Search in sources :

Example 1 with PotentialDuplicate

use of org.hisp.dhis.deduplication.PotentialDuplicate in project dhis2-core by dhis2.

the class DeduplicationController method updatePotentialDuplicate.

@PutMapping(value = "/{id}")
@ResponseStatus(value = HttpStatus.OK)
public void updatePotentialDuplicate(@PathVariable String id, @RequestParam(value = "status") String status) throws NotFoundException, BadRequestException {
    checkDeduplicationStatusRequestParam(status);
    PotentialDuplicate potentialDuplicate = getPotentialDuplicateBy(id);
    DeduplicationStatus deduplicationStatus = DeduplicationStatus.valueOf(status);
    checkDbAndRequestStatus(potentialDuplicate, deduplicationStatus);
    potentialDuplicate.setStatus(deduplicationStatus);
    deduplicationService.updatePotentialDuplicate(potentialDuplicate);
}
Also used : DeduplicationStatus(org.hisp.dhis.deduplication.DeduplicationStatus) PotentialDuplicate(org.hisp.dhis.deduplication.PotentialDuplicate) ResponseStatus(org.springframework.web.bind.annotation.ResponseStatus) PutMapping(org.springframework.web.bind.annotation.PutMapping)

Example 2 with PotentialDuplicate

use of org.hisp.dhis.deduplication.PotentialDuplicate in project dhis2-core by dhis2.

the class DeduplicationController method mergePotentialDuplicate.

@PostMapping(value = "/{id}/merge")
@ResponseStatus(value = HttpStatus.OK)
public void mergePotentialDuplicate(@PathVariable String id, @RequestParam(defaultValue = "AUTO") MergeStrategy mergeStrategy, @RequestBody(required = false) MergeObject mergeObject) throws NotFoundException, PotentialDuplicateConflictException, PotentialDuplicateForbiddenException {
    PotentialDuplicate potentialDuplicate = getPotentialDuplicateBy(id);
    if (potentialDuplicate.getOriginal() == null || potentialDuplicate.getDuplicate() == null) {
        throw new PotentialDuplicateConflictException("PotentialDuplicate is missing references and cannot be merged.");
    }
    TrackedEntityInstance original = getTei(potentialDuplicate.getOriginal());
    TrackedEntityInstance duplicate = getTei(potentialDuplicate.getDuplicate());
    if (mergeObject == null) {
        mergeObject = new MergeObject();
    }
    DeduplicationMergeParams params = DeduplicationMergeParams.builder().potentialDuplicate(potentialDuplicate).mergeObject(mergeObject).original(original).duplicate(duplicate).build();
    if (MergeStrategy.MANUAL.equals(mergeStrategy)) {
        deduplicationService.manualMerge(params);
    } else {
        deduplicationService.autoMerge(params);
    }
}
Also used : PotentialDuplicateConflictException(org.hisp.dhis.deduplication.PotentialDuplicateConflictException) MergeObject(org.hisp.dhis.deduplication.MergeObject) PotentialDuplicate(org.hisp.dhis.deduplication.PotentialDuplicate) TrackedEntityInstance(org.hisp.dhis.trackedentity.TrackedEntityInstance) DeduplicationMergeParams(org.hisp.dhis.deduplication.DeduplicationMergeParams) PostMapping(org.springframework.web.bind.annotation.PostMapping) ResponseStatus(org.springframework.web.bind.annotation.ResponseStatus)

Example 3 with PotentialDuplicate

use of org.hisp.dhis.deduplication.PotentialDuplicate in project dhis2-core by dhis2.

the class DeduplicationControllerMvcTest method shouldMergePotentialDuplicate.

@Test
void shouldMergePotentialDuplicate() throws Exception {
    String uid = "uid";
    PotentialDuplicate potentialDuplicate = new PotentialDuplicate(teiA, teiB);
    when(deduplicationService.getPotentialDuplicateByUid(uid)).thenReturn(potentialDuplicate);
    MergeObject mergeObject = MergeObject.builder().build();
    mockMvc.perform(post(ENDPOINT + "/" + uid + "/merge").content(objectMapper.writeValueAsString(mergeObject)).param("mergeStrategy", MergeStrategy.AUTO.name()).contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON)).andExpect(status().isOk());
    verify(deduplicationService).autoMerge(deduplicationMergeParams);
    verify(deduplicationService, times(0)).manualMerge(deduplicationMergeParams);
}
Also used : MergeObject(org.hisp.dhis.deduplication.MergeObject) PotentialDuplicate(org.hisp.dhis.deduplication.PotentialDuplicate) Test(org.junit.jupiter.api.Test)

Example 4 with PotentialDuplicate

use of org.hisp.dhis.deduplication.PotentialDuplicate in project dhis2-core by dhis2.

the class DeduplicationControllerMvcTest method shouldThrowUpdatePotentialDuplicateAlreadyMerged.

@Test
void shouldThrowUpdatePotentialDuplicateAlreadyMerged() throws Exception {
    String uid = "uid";
    PotentialDuplicate potentialDuplicate = new PotentialDuplicate(teiA, teiB);
    potentialDuplicate.setStatus(DeduplicationStatus.MERGED);
    when(deduplicationService.getPotentialDuplicateByUid(uid)).thenReturn(potentialDuplicate);
    mockMvc.perform(put(ENDPOINT + "/" + uid).param("status", DeduplicationStatus.INVALID.name()).content(objectMapper.writeValueAsString(potentialDuplicate)).contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON)).andExpect(result -> assertTrue(result.getResolvedException() instanceof BadRequestException));
    verify(deduplicationService).getPotentialDuplicateByUid(uid);
}
Also used : PotentialDuplicate(org.hisp.dhis.deduplication.PotentialDuplicate) BadRequestException(org.hisp.dhis.webapi.controller.exception.BadRequestException) Test(org.junit.jupiter.api.Test)

Example 5 with PotentialDuplicate

use of org.hisp.dhis.deduplication.PotentialDuplicate in project dhis2-core by dhis2.

the class DeduplicationControllerMvcTest method shouldGetPotentialDuplicateById.

@Test
void shouldGetPotentialDuplicateById() throws Exception {
    PotentialDuplicate potentialDuplicate = new PotentialDuplicate(teiA, teiB);
    String uid = "uid";
    when(deduplicationService.getPotentialDuplicateByUid(uid)).thenReturn(potentialDuplicate);
    mockMvc.perform(get(ENDPOINT + "/" + uid).content("{}").contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON)).andExpect(status().isOk()).andExpect(content().contentType("application/json"));
    verify(deduplicationService).getPotentialDuplicateByUid(uid);
}
Also used : PotentialDuplicate(org.hisp.dhis.deduplication.PotentialDuplicate) Test(org.junit.jupiter.api.Test)

Aggregations

PotentialDuplicate (org.hisp.dhis.deduplication.PotentialDuplicate)23 Test (org.junit.jupiter.api.Test)19 BadRequestException (org.hisp.dhis.webapi.controller.exception.BadRequestException)7 PotentialDuplicateConflictException (org.hisp.dhis.deduplication.PotentialDuplicateConflictException)6 MergeObject (org.hisp.dhis.deduplication.MergeObject)5 ConflictException (org.hisp.dhis.webapi.controller.exception.ConflictException)4 NotFoundException (org.hisp.dhis.webapi.controller.exception.NotFoundException)4 OperationNotAllowedException (org.hisp.dhis.webapi.controller.exception.OperationNotAllowedException)4 TrackedEntityInstance (org.hisp.dhis.trackedentity.TrackedEntityInstance)3 ResponseStatus (org.springframework.web.bind.annotation.ResponseStatus)2 DeduplicationMergeParams (org.hisp.dhis.deduplication.DeduplicationMergeParams)1 DeduplicationStatus (org.hisp.dhis.deduplication.DeduplicationStatus)1 PotentialDuplicateForbiddenException (org.hisp.dhis.deduplication.PotentialDuplicateForbiddenException)1 FieldFilterParams (org.hisp.dhis.fieldfilter.FieldFilterParams)1 RootNode (org.hisp.dhis.node.types.RootNode)1 CrudControllerAdvice (org.hisp.dhis.webapi.controller.CrudControllerAdvice)1 BeforeEach (org.junit.jupiter.api.BeforeEach)1 GetMapping (org.springframework.web.bind.annotation.GetMapping)1 PostMapping (org.springframework.web.bind.annotation.PostMapping)1 PutMapping (org.springframework.web.bind.annotation.PutMapping)1