Skip to content
This repository was archived by the owner on May 5, 2021. It is now read-only.

Commit 3c90edf

Browse files
author
barnabartha
committed
SORMAS-Foundation#4008 - cases merge filter fix - add test
1 parent fb80d9a commit 3c90edf

3 files changed

Lines changed: 57 additions & 5 deletions

File tree

sormas-backend/src/main/java/de/symeda/sormas/backend/caze/CaseFacadeEjb.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1354,8 +1354,8 @@ public List<CaseIndexDto[]> getCasesForDuplicateMerging(CaseCriteria criteria, b
13541354
Predicate creationDateFilter = cb.or(
13551355
cb.lessThan(root.get(Case.CREATION_DATE), root2.get(Case.CREATION_DATE)),
13561356
cb.or(
1357-
cb.lessThan(root2.get(Case.CREATION_DATE), DateHelper.getEndOfDay(criteria.getCreationDateFrom())),
1358-
cb.greaterThan(root2.get(Case.CREATION_DATE), DateHelper.getStartOfDay(criteria.getCreationDateTo()))));
1357+
cb.lessThanOrEqualTo(root2.get(Case.CREATION_DATE), DateHelper.getStartOfDay(criteria.getCreationDateFrom())),
1358+
cb.greaterThanOrEqualTo(root2.get(Case.CREATION_DATE), DateHelper.getEndOfDay(criteria.getCreationDateTo()))));
13591359

13601360
Predicate filter = cb.and(caseService.createDefaultFilter(cb, root), caseService.createDefaultFilter(cb, root2));
13611361
if (userFilter != null) {

sormas-backend/src/test/java/de/symeda/sormas/backend/H2Function.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,12 @@ public static float similarity(String a, String b) {
1111
return a.equalsIgnoreCase(b) ? 1 : 0;
1212
}
1313

14-
public static int date_part(String part, Date date) {
14+
public static long date_part(String part, Date date) {
1515
switch (part) {
1616
case "year":
1717
return DateHelper8.toLocalDate(date).getYear();
18+
case "epoch":
19+
return date.getTime() / 1000;
1820
default:
1921
throw new IllegalArgumentException(part);
2022
}

sormas-backend/src/test/java/de/symeda/sormas/backend/caze/CaseFacadeEjbTest.java

Lines changed: 52 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import static org.junit.Assert.assertThat;
2828
import static org.junit.Assert.assertTrue;
2929

30+
import java.sql.Timestamp;
3031
import java.time.LocalDate;
3132
import java.util.ArrayList;
3233
import java.util.Arrays;
@@ -36,15 +37,17 @@
3637
import java.util.List;
3738
import java.util.stream.Collectors;
3839

39-
import de.symeda.sormas.api.VisitOrigin;
40-
import de.symeda.sormas.api.messaging.MessageType;
40+
import org.apache.commons.lang3.time.DateUtils;
41+
import org.hibernate.internal.SessionImpl;
42+
import org.hibernate.query.spi.QueryImplementor;
4143
import org.junit.Assert;
4244
import org.junit.Rule;
4345
import org.junit.Test;
4446
import org.junit.rules.ExpectedException;
4547

4648
import de.symeda.sormas.api.Disease;
4749
import de.symeda.sormas.api.Language;
50+
import de.symeda.sormas.api.VisitOrigin;
4851
import de.symeda.sormas.api.caze.CaseClassification;
4952
import de.symeda.sormas.api.caze.CaseCriteria;
5053
import de.symeda.sormas.api.caze.CaseDataDto;
@@ -72,6 +75,7 @@
7275
import de.symeda.sormas.api.exposure.ExposureType;
7376
import de.symeda.sormas.api.facility.FacilityReferenceDto;
7477
import de.symeda.sormas.api.hospitalization.PreviousHospitalizationDto;
78+
import de.symeda.sormas.api.messaging.MessageType;
7579
import de.symeda.sormas.api.person.PersonDto;
7680
import de.symeda.sormas.api.person.PersonReferenceDto;
7781
import de.symeda.sormas.api.person.PresentCondition;
@@ -116,6 +120,52 @@ public class CaseFacadeEjbTest extends AbstractBeanTest {
116120
@Rule
117121
public final ExpectedException exception = ExpectedException.none();
118122

123+
@Test
124+
public void testGetCasesForDuplicateMerging() {
125+
126+
final Date today = new Date();
127+
final Date threeDaysAgo = DateUtils.addDays(today, -3);
128+
129+
RDCFEntities rdcf = creator.createRDCFEntities("Region", "District", "Community", "Facility");
130+
UserDto user = creator
131+
.createUser(rdcf.region.getUuid(), rdcf.district.getUuid(), rdcf.facility.getUuid(), "Surv", "Sup", UserRole.SURVEILLANCE_SUPERVISOR);
132+
PersonDto cazePerson = creator.createPerson("Case", "Person");
133+
CaseDataDto caze = creator.createCase(
134+
user.toReference(),
135+
cazePerson.toReference(),
136+
Disease.EVD,
137+
CaseClassification.PROBABLE,
138+
InvestigationStatus.PENDING,
139+
today,
140+
rdcf);
141+
142+
SessionImpl em = (SessionImpl) getEntityManager();
143+
QueryImplementor query = em.createQuery("select c from cases c where c.uuid=:uuid");
144+
query.setParameter("uuid", caze.getUuid());
145+
Case singleResult = (Case) query.getSingleResult();
146+
147+
singleResult.setCreationDate(new Timestamp(threeDaysAgo.getTime()));
148+
singleResult.setReportDate(threeDaysAgo);
149+
em.save(singleResult);
150+
151+
PersonDto cazePerson2 = creator.createPerson("Case", "Person");
152+
CaseDataDto case2 = creator.createCase(
153+
user.toReference(),
154+
cazePerson2.toReference(),
155+
Disease.EVD,
156+
CaseClassification.PROBABLE,
157+
InvestigationStatus.PENDING,
158+
DateUtils.addMinutes(today, -3),
159+
rdcf);
160+
161+
final List<CaseIndexDto[]> casesForDuplicateMergingToday =
162+
getCaseFacade().getCasesForDuplicateMerging(new CaseCriteria().creationDateFrom(today).creationDateTo(today), true);
163+
final List<CaseIndexDto[]> casesForDuplicateMergingThreeDaysAgo =
164+
getCaseFacade().getCasesForDuplicateMerging(new CaseCriteria().creationDateFrom(threeDaysAgo).creationDateTo(threeDaysAgo), true);
165+
Assert.assertEquals(1, casesForDuplicateMergingToday.size());
166+
Assert.assertEquals(1, casesForDuplicateMergingThreeDaysAgo.size());
167+
}
168+
119169
@Test
120170
public void testDiseaseChangeUpdatesContacts() {
121171

0 commit comments

Comments
 (0)