Skip to content

Commit

Permalink
#5722 Documents of the discarded case / contact get lost while merging
Browse files Browse the repository at this point in the history
  • Loading branch information
lgal authored and lgal committed Jun 14, 2021
1 parent 1b470c7 commit 6e37877
Show file tree
Hide file tree
Showing 4 changed files with 89 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@
import de.symeda.sormas.api.contact.ContactCriteria;
import de.symeda.sormas.api.contact.ContactDto;
import de.symeda.sormas.api.contact.ContactReferenceDto;
import de.symeda.sormas.api.document.DocumentRelatedEntityType;
import de.symeda.sormas.api.epidata.EpiDataDto;
import de.symeda.sormas.api.epidata.EpiDataHelper;
import de.symeda.sormas.api.event.EventParticipantReferenceDto;
Expand Down Expand Up @@ -205,6 +206,8 @@
import de.symeda.sormas.backend.contact.ContactService;
import de.symeda.sormas.backend.contact.VisitSummaryExportDetails;
import de.symeda.sormas.backend.disease.DiseaseConfigurationFacadeEjb.DiseaseConfigurationFacadeEjbLocal;
import de.symeda.sormas.backend.document.Document;
import de.symeda.sormas.backend.document.DocumentService;
import de.symeda.sormas.backend.epidata.EpiData;
import de.symeda.sormas.backend.epidata.EpiDataFacadeEjb;
import de.symeda.sormas.backend.epidata.EpiDataFacadeEjb.EpiDataFacadeEjbLocal;
Expand Down Expand Up @@ -405,6 +408,8 @@ public class CaseFacadeEjb implements CaseFacade {
private ExternalSurveillanceToolGatewayFacadeEjbLocal externalSurveillanceToolGatewayFacade;
@EJB
private ExternalShareInfoService externalShareInfoService;
@EJB
private DocumentService documentService;

@Override
public List<CaseDataDto> getAllActiveCasesAfter(Date date) {
Expand Down Expand Up @@ -3194,6 +3199,14 @@ private void mergeCase(CaseDataDto leadCaseData, CaseDataDto otherCaseData, bool
otherVisit.setDisease(leadCaseData.getDisease());
visitFacade.saveVisit(otherVisit);
}

// 6 Documents
List<Document> documents = documentService.getRelatedToEntity(DocumentRelatedEntityType.CASE, otherCase.getUuid());
for (Document document : documents) {
document.setRelatedEntityUuid(leadCaseData.getUuid());

documentService.ensurePersisted(document);
}
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,6 @@
import javax.validation.Valid;
import javax.validation.constraints.NotNull;

import de.symeda.sormas.api.externaldata.ExternalDataDto;
import de.symeda.sormas.api.externaldata.ExternalDataUpdateException;
import org.apache.commons.collections.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand All @@ -86,10 +84,13 @@
import de.symeda.sormas.api.contact.MergeContactIndexDto;
import de.symeda.sormas.api.contact.SimilarContactDto;
import de.symeda.sormas.api.dashboard.DashboardContactDto;
import de.symeda.sormas.api.document.DocumentRelatedEntityType;
import de.symeda.sormas.api.epidata.EpiDataDto;
import de.symeda.sormas.api.epidata.EpiDataHelper;
import de.symeda.sormas.api.exposure.ExposureDto;
import de.symeda.sormas.api.exposure.ExposureType;
import de.symeda.sormas.api.externaldata.ExternalDataDto;
import de.symeda.sormas.api.externaldata.ExternalDataUpdateException;
import de.symeda.sormas.api.followup.FollowUpDto;
import de.symeda.sormas.api.followup.FollowUpPeriodDto;
import de.symeda.sormas.api.i18n.Captions;
Expand Down Expand Up @@ -133,6 +134,8 @@
import de.symeda.sormas.backend.common.CriteriaBuilderHelper;
import de.symeda.sormas.backend.common.TaskCreationException;
import de.symeda.sormas.backend.disease.DiseaseConfigurationFacadeEjb.DiseaseConfigurationFacadeEjbLocal;
import de.symeda.sormas.backend.document.Document;
import de.symeda.sormas.backend.document.DocumentService;
import de.symeda.sormas.backend.epidata.EpiData;
import de.symeda.sormas.backend.epidata.EpiDataFacadeEjb;
import de.symeda.sormas.backend.epidata.EpiDataFacadeEjb.EpiDataFacadeEjbLocal;
Expand Down Expand Up @@ -244,6 +247,8 @@ public class ContactFacadeEjb implements ContactFacade {
private DiseaseConfigurationFacadeEjbLocal diseaseConfigurationFacade;
@EJB
private SampleFacadeEjbLocal sampleFacade;
@EJB
private DocumentService documentService;

@Override
public List<String> getAllActiveUuids() {
Expand Down Expand Up @@ -1762,6 +1767,14 @@ public void mergeContact(String leadUuid, String otherUuid) {
otherVisit.setDisease(leadContactDto.getDisease());
visitFacade.saveVisit(otherVisit);
}

// 4 Documents
List<Document> documents = documentService.getRelatedToEntity(DocumentRelatedEntityType.CONTACT, otherContact.getUuid());
for (Document document : documents) {
document.setRelatedEntityUuid(leadContact.getUuid());

documentService.ensurePersisted(document);
}
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.sql.Timestamp;
import java.time.LocalDate;
import java.time.LocalDateTime;
Expand Down Expand Up @@ -73,6 +75,8 @@
import de.symeda.sormas.api.contact.ContactDto;
import de.symeda.sormas.api.contact.ContactReferenceDto;
import de.symeda.sormas.api.contact.FollowUpStatus;
import de.symeda.sormas.api.document.DocumentDto;
import de.symeda.sormas.api.document.DocumentRelatedEntityType;
import de.symeda.sormas.api.epidata.EpiDataDto;
import de.symeda.sormas.api.event.EventDto;
import de.symeda.sormas.api.event.EventInvestigationStatus;
Expand Down Expand Up @@ -1140,7 +1144,7 @@ public void testGenerateEpidNumber() throws ExternalSurveillanceToolException {
}

@Test
public void testMergeCase() {
public void testMergeCase() throws IOException {

useNationalUserLogin();
// 1. Create
Expand Down Expand Up @@ -1208,6 +1212,23 @@ public void testMergeCase() {
otherVisit.getSymptoms().setAbdominalPain(SymptomState.YES);
getVisitFacade().saveVisit(otherVisit);

DocumentDto document = creator.createDocument(
leadUserReference,
"document.pdf",
"application/pdf",
42L,
DocumentRelatedEntityType.CASE,
leadCase.getUuid(),
"content".getBytes(StandardCharsets.UTF_8));
DocumentDto otherDocument = creator.createDocument(
leadUserReference,
"other_document.pdf",
"application/pdf",
42L,
DocumentRelatedEntityType.CASE,
otherCase.getUuid(),
"other content".getBytes(StandardCharsets.UTF_8));

// 2. Merge

getCaseFacade().mergeCase(leadCase.getUuid(), otherCase.getUuid());
Expand Down Expand Up @@ -1285,6 +1306,14 @@ public void testMergeCase() {
assertEquals(SymptomState.YES, mergedCase.getSymptoms().getAbdominalPain());
assertEquals(SymptomState.YES, mergedCase.getSymptoms().getAnorexiaAppetiteLoss());
assertTrue(mergedCase.getSymptoms().getSymptomatic());

// 5 Documents
List<DocumentDto> mergedDocuments = getDocumentFacade().getDocumentsRelatedToEntity(DocumentRelatedEntityType.CASE, leadCase.getUuid());

assertEquals(mergedDocuments.size(), 2);
List<String> documentUuids = mergedDocuments.stream().map(DocumentDto::getUuid).collect(Collectors.toList());
assertTrue(documentUuids.contains(document.getUuid()));
assertTrue(documentUuids.contains(otherDocument.getUuid()));
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.when;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Arrays;
Expand Down Expand Up @@ -66,6 +68,8 @@
import de.symeda.sormas.api.contact.FollowUpStatus;
import de.symeda.sormas.api.contact.MapContactDto;
import de.symeda.sormas.api.contact.SimilarContactDto;
import de.symeda.sormas.api.document.DocumentDto;
import de.symeda.sormas.api.document.DocumentRelatedEntityType;
import de.symeda.sormas.api.epidata.EpiDataDto;
import de.symeda.sormas.api.epidata.EpiDataHelper;
import de.symeda.sormas.api.event.EventDto;
Expand Down Expand Up @@ -1332,7 +1336,7 @@ public void testGetContactsByPersonUuids() {
}

@Test
public void testMergeContact() {
public void testMergeContact() throws IOException {

useNationalUserLogin();
// 1. Create
Expand Down Expand Up @@ -1403,6 +1407,23 @@ public void testMergeContact() {
otherVisit.getSymptoms().setAbdominalPain(SymptomState.YES);
getVisitFacade().saveVisit(otherVisit);

DocumentDto document = creator.createDocument(
leadUserReference,
"document.pdf",
"application/pdf",
42L,
DocumentRelatedEntityType.CONTACT,
leadContact.getUuid(),
"content".getBytes(StandardCharsets.UTF_8));
DocumentDto otherDocument = creator.createDocument(
leadUserReference,
"other_document.pdf",
"application/pdf",
42L,
DocumentRelatedEntityType.CONTACT,
otherContact.getUuid(),
"other content".getBytes(StandardCharsets.UTF_8));

// 2. Merge

getContactFacade().mergeContact(leadContact.getUuid(), otherContact.getUuid());
Expand Down Expand Up @@ -1444,5 +1465,14 @@ public void testMergeContact() {
assertEquals(2, mergedVisits.size());
assertTrue(mergedVisits.contains(leadVisit.getUuid()));
assertTrue(mergedVisits.contains(otherVisit.getUuid()));

// 5 Documents
List<DocumentDto> mergedDocuments = getDocumentFacade().getDocumentsRelatedToEntity(DocumentRelatedEntityType.CONTACT, leadContact.getUuid());

assertEquals(mergedDocuments.size(), 2);
List<String> documentUuids = mergedDocuments.stream().map(DocumentDto::getUuid).collect(Collectors.toList());
assertTrue(documentUuids.contains(document.getUuid()));
assertTrue(documentUuids.contains(otherDocument.getUuid()));

}
}

0 comments on commit 6e37877

Please sign in to comment.