Skip to content

Commit 0f698e0

Browse files
committed
fixed broken tests
1 parent 061dd30 commit 0f698e0

4 files changed

Lines changed: 55 additions & 87 deletions

File tree

sormas-backend/src/main/java/de/symeda/sormas/backend/externalmessage/ExternalMessageFacadeEjb.java

Lines changed: 33 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,8 @@
111111
@RightsAllowed({
112112
UserRight._EXTERNAL_MESSAGE_ACCESS,
113113
UserRight._EXTERNAL_MESSAGE_LABORATORY_VIEW,
114-
UserRight._EXTERNAL_MESSAGE_DOCTOR_DECLARATION_VIEW })
114+
UserRight._EXTERNAL_MESSAGE_DOCTOR_DECLARATION_VIEW,
115+
UserRight._EXTERNAL_MESSAGE_SURVEY_RESPONSE_VIEW })
115116
public class ExternalMessageFacadeEjb implements ExternalMessageFacade {
116117

117118
private static final String SURVEY_PERIOD_INTERVAL_DAYS_CONFIG_KEY = "SURVEY_PERIOD_INTERVAL_DAYS";
@@ -292,36 +293,7 @@ private ExternalMessageDto saveWithFallback(ExternalMessageDto dto) {
292293
}
293294

294295
@Override
295-
public ExternalMessageDto save(@Valid ExternalMessageDto dto) {
296-
return save(dto, true, false);
297-
}
298-
299-
@Override
300-
public ExternalMessageDto saveAndProcessLabmessage(@Valid ExternalMessageDto labMessage) {
301-
if (!labMessage.isAutomaticProcessingPossible() || !checkAutomaticProcessingAllowed()) {
302-
return save(labMessage);
303-
}
304-
305-
try {
306-
ProcessingResult<ExternalMessageProcessingResult> result = automaticLabMessageProcessor.processLabMessage(labMessage);
307-
308-
if (result.getStatus().isCanceled()) {
309-
logger.error("Processing of lab message with UUID {} has been canceled", labMessage.getUuid());
310-
}
311-
} catch (ExecutionException e) {
312-
logger.error("Could not process lab message with UUID " + labMessage.getUuid(), e);
313-
} catch (InterruptedException e) {
314-
logger.error("Could not process lab message with UUID " + labMessage.getUuid(), e);
315-
Thread.currentThread().interrupt();
316-
} finally {
317-
save(labMessage);
318-
}
319-
320-
return getByUuid(labMessage.getUuid());
321-
}
322-
323-
@Override
324-
@RightsAllowed(UserRight._EXTERNAL_MESSAGE_SURVEY_RESPONSE_VIEW)
296+
@RightsAllowed(UserRight._EXTERNAL_MESSAGE_SURVEY_RESPONSE_PROCESS)
325297
public List<ExternalMessageDto> saveAndProcessSurveyResponses(Date since) {
326298

327299
if (since == null) {
@@ -397,6 +369,35 @@ public List<ExternalMessageDto> saveAndProcessSurveyResponses(Date since) {
397369
return savedDtos;
398370
}
399371

372+
@Override
373+
public ExternalMessageDto save(@Valid ExternalMessageDto dto) {
374+
return save(dto, true, false);
375+
}
376+
377+
@Override
378+
public ExternalMessageDto saveAndProcessLabmessage(@Valid ExternalMessageDto labMessage) {
379+
if (!labMessage.isAutomaticProcessingPossible() || !checkAutomaticProcessingAllowed()) {
380+
return save(labMessage);
381+
}
382+
383+
try {
384+
ProcessingResult<ExternalMessageProcessingResult> result = automaticLabMessageProcessor.processLabMessage(labMessage);
385+
386+
if (result.getStatus().isCanceled()) {
387+
logger.error("Processing of lab message with UUID {} has been canceled", labMessage.getUuid());
388+
}
389+
} catch (ExecutionException e) {
390+
logger.error("Could not process lab message with UUID " + labMessage.getUuid(), e);
391+
} catch (InterruptedException e) {
392+
logger.error("Could not process lab message with UUID " + labMessage.getUuid(), e);
393+
Thread.currentThread().interrupt();
394+
} finally {
395+
save(labMessage);
396+
}
397+
398+
return getByUuid(labMessage.getUuid());
399+
}
400+
400401
private List<String> extractUuids(List<ExternalMessageDto> dtos) {
401402
return dtos.stream().map(EntityDto::getUuid).filter(Objects::nonNull).collect(toList());
402403
}
@@ -607,7 +608,7 @@ public ExternalMessageDto getByUuid(String uuid) {
607608
@RightsAllowed({
608609
UserRight._EXTERNAL_MESSAGE_LABORATORY_DELETE,
609610
UserRight._EXTERNAL_MESSAGE_DOCTOR_DECLARATION_DELETE,
610-
UserRight._EXTERNAL_MESSAGE_SURVEY_RESPONSE_DELETE, })
611+
UserRight._EXTERNAL_MESSAGE_SURVEY_RESPONSE_DELETE })
611612
public void delete(String uuid) {
612613
externalMessageService.deletePermanent(externalMessageService.getByUuid(uuid));
613614
}
@@ -1039,7 +1040,6 @@ public ExternalMessageDto overwriteSurveyResponse(String uuid, java.util.Map<Str
10391040
}
10401041

10411042
@Override
1042-
@RightsAllowed(UserRight._EXTERNAL_MESSAGE_SURVEY_RESPONSE_VIEW)
10431043
public de.symeda.sormas.api.patch.partial_retrieval.DisplayablePartialRetrievalResponse fetchSurveyResponseFieldsForDisplay(
10441044
String externalMessageUuid) {
10451045

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

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
package de.symeda.sormas.backend;
22

3-
import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.classes;
4-
import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.fields;
5-
import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.methods;
6-
import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.noClasses;
3+
import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.*;
74

85
import java.util.Arrays;
96
import java.util.Collections;
@@ -288,7 +285,13 @@ public void testExternalMessageFacadeEjbAuthorization(JavaClasses classes) {
288285
assertFacadeEjbAnnotated(
289286
ExternalMessageFacadeEjb.class,
290287
AuthMode.CLASS_ONLY,
291-
Arrays.asList("getExternalMessagesAdapterVersion", "fetchAndSaveExternalMessages", "bulkAssignExternalMessages", "delete"),
288+
Arrays.asList(
289+
"getExternalMessagesAdapterVersion",
290+
"fetchAndSaveExternalMessages",
291+
"bulkAssignExternalMessages",
292+
"delete",
293+
"overwriteSurveyResponse",
294+
"saveAndProcessSurveyResponses"),
292295
classes);
293296
}
294297

sormas-backend/src/test/java/de/symeda/sormas/backend/patch/partial_retrieval/PartialRetrieverImplTest.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
import de.symeda.sormas.api.epidata.EpiDataDto;
1414
import de.symeda.sormas.api.exposure.ExposureDto;
1515
import de.symeda.sormas.api.exposure.ExposureType;
16-
import de.symeda.sormas.api.utils.YesNoUnknown;
1716
import de.symeda.sormas.api.i18n.I18nProperties;
1817
import de.symeda.sormas.api.immunization.ImmunizationDto;
1918
import de.symeda.sormas.api.immunization.ImmunizationStatus;
@@ -24,6 +23,7 @@
2423
import de.symeda.sormas.api.person.PersonReferenceDto;
2524
import de.symeda.sormas.api.symptoms.SymptomsDto;
2625
import de.symeda.sormas.api.user.UserReferenceDto;
26+
import de.symeda.sormas.api.utils.YesNoUnknown;
2727
import de.symeda.sormas.api.vaccination.VaccinationDto;
2828
import de.symeda.sormas.backend.AbstractBeanTest;
2929

@@ -93,7 +93,7 @@ void retrievePartialForDisplay() {
9393

9494
() -> Assertions.assertNotNull(caseDiseaseFieldInfo),
9595

96-
() -> Assertions.assertEquals("Disease", caseDiseaseFieldInfo.getTranslatedFieldName()),
96+
() -> Assertions.assertEquals("Maladie", caseDiseaseFieldInfo.getTranslatedFieldName()),
9797
() -> Assertions.assertEquals("Paralysie Flasque Aiguë", caseDiseaseFieldInfo.getTranslatedFieldValue()));
9898
}
9999

@@ -158,17 +158,19 @@ void retrievePartial_null_value() {
158158
CaseDataDto originalCase = creator.createUnclassifiedCase(disease);
159159

160160
// EXECUTE
161-
String caseClassificationDateFieldName = toFieldName(CaseDataDto.I18N_PREFIX, CaseDataDto.CLASSIFICATION_DATE);
161+
String caseFollowUpUntilFieldName = toFieldName(CaseDataDto.I18N_PREFIX, CaseDataDto.FOLLOW_UP_UNTIL);
162162
PartialRetrievalResponse actual = victim().retrievePartial(
163-
new PartialRetrievalRequest().setCaseUuid(originalCase.getUuid()).setFieldsToRetrieve(Set.of(caseClassificationDateFieldName)));
163+
new PartialRetrievalRequest().setCaseUuid(originalCase.getUuid()).setFieldsToRetrieve(Set.of(caseFollowUpUntilFieldName)));
164+
165+
System.out.println("actual = " + actual);
164166

165167
// CHECK
166-
FieldInfo classificationDateFieldInfo = actual.getFieldInfoDictionary().get(caseClassificationDateFieldName);
168+
FieldInfo followUpUntilFieldInfo = actual.getFieldInfoDictionary().get(caseFollowUpUntilFieldName);
167169
Assertions.assertAll(
168170
() -> Assertions.assertTrue(actual.getFailuresDictionary().isEmpty()),
169-
() -> Assertions.assertTrue(actual.getFieldInfoDictionary().containsKey(caseClassificationDateFieldName)),
170-
() -> Assertions.assertEquals("Date of classification", classificationDateFieldInfo.getTranslatedFieldName()),
171-
() -> Assertions.assertNull(classificationDateFieldInfo.getFieldValue()));
171+
() -> Assertions.assertTrue(actual.getFieldInfoDictionary().containsKey(caseFollowUpUntilFieldName)),
172+
() -> Assertions.assertEquals("Follow-up until", followUpUntilFieldInfo.getTranslatedFieldName()),
173+
() -> Assertions.assertNull(followUpUntilFieldInfo.getFieldValue()));
172174
}
173175

174176
@Test

sormas-backend/src/test/java/de/symeda/sormas/patch/DataPatcherImplTest.java

Lines changed: 4 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@
3636
import de.symeda.sormas.api.infrastructure.country.CountryDto;
3737
import de.symeda.sormas.api.infrastructure.country.CountryReferenceDto;
3838
import de.symeda.sormas.api.infrastructure.facility.FacilityDto;
39-
import de.symeda.sormas.api.infrastructure.region.RegionFacade;
4039
import de.symeda.sormas.api.patch.*;
4140
import de.symeda.sormas.api.person.*;
4241
import de.symeda.sormas.api.symptoms.SymptomState;
@@ -56,15 +55,12 @@ void patch_noErrorsReplaceAlways() {
5655

5756
String newLastname = "toto";
5857
String newSequelaeDetails = "Some very interesting sequelaeDetails";
59-
String classificationDate = "2030-02-01";
6058
CaseDataPatchRequest request = new CaseDataPatchRequest().setCaseUuid(originalCase.getUuid())
6159
.setReplacementStrategy(DataReplacementStrategy.ALWAYS)
6260
.setPatchDictionary(
6361
Map.of(
6462
"Person.lastName",
6563
newLastname,
66-
"CaseData.classificationDate",
67-
classificationDate,
6864

6965
"CaseData.sequelaeDetails",
7066
newSequelaeDetails));
@@ -73,7 +69,6 @@ void patch_noErrorsReplaceAlways() {
7369
DataPatchResponse response = victim().patch(request);
7470

7571
// CHECK
76-
7772
CaseDataDto actualCase = getCaseFacade().getByUuid(originalCase.getUuid());
7873
PersonDto actualPerson = getPersonFacade().getByUuid(originalCase.getPerson().getUuid());
7974

@@ -82,9 +77,6 @@ void patch_noErrorsReplaceAlways() {
8277
// PERSON
8378
() -> Assertions.assertEquals(newLastname, actualPerson.getLastName()),
8479
// CASE
85-
() -> Assertions.assertEquals(
86-
Date.from(LocalDate.parse(classificationDate).atStartOfDay(ZoneId.systemDefault()).toInstant()),
87-
actualCase.getClassificationDate()),
8880
() -> Assertions.assertEquals(newSequelaeDetails, actualCase.getSequelaeDetails()));
8981
}
9082

@@ -411,34 +403,6 @@ void patch_customizableEnu_default_enum_other() {
411403
return e1;
412404
}
413405

414-
@Test
415-
void patch_referenceData() {
416-
// PREPARE
417-
registerBeanForLookup(RegionFacade.class, getRegionFacade());
418-
419-
CaseDataDto originalCase = creator.createUnclassifiedCase(Disease.PERTUSSIS);
420-
421-
FacilityDto healthFacility = getFacilityFacade().getByUuid(originalCase.getHealthFacility().getUuid());
422-
originalCase.setDistrict(healthFacility.getDistrict());
423-
getCaseFacade().save(originalCase);
424-
425-
// must be able to ignore accents - whitespaces - case
426-
Map<String, Object> patchDictionary = Map.of("CaseData.region", " régIoN ");
427-
CaseDataPatchRequest request = new CaseDataPatchRequest().setCaseUuid(originalCase.getUuid())
428-
.setReplacementStrategy(DataReplacementStrategy.ALWAYS)
429-
.setPatchDictionary(patchDictionary);
430-
431-
// EXECUTE
432-
DataPatchResponse response = victim().patch(request);
433-
434-
// CHECK
435-
436-
Assertions.assertAll(
437-
() -> Assertions.assertTrue(response.getFailures().isEmpty(), "Failure found, but should be empty"),
438-
439-
() -> Assertions.assertEquals(patchDictionary, response.getValidPatchDictionary()));
440-
}
441-
442406
@Test
443407
void patch_referenceData_country() {
444408
// PREPARE
@@ -767,21 +731,20 @@ void patch_ifNotAlreadyPresent_sameDayDifferentTime_noForbiddenValueOverride() {
767731
CaseDataDto originalCase = creator.createUnclassifiedCase(Disease.PERTUSSIS);
768732

769733
// Set classificationDate to 08:30 on 2024-06-15 — a non-midnight timestamp on the same calendar day that will be patched
770-
java.util.Date existingDate = java.util.Date.from(LocalDateTime.of(2024, 6, 15, 8, 30, 0).atZone(ZoneId.systemDefault()).toInstant());
771-
originalCase.setClassificationDate(existingDate);
734+
java.util.Date existingDate = java.util.Date.from(LocalDateTime.of(2024, 6, 15, 12, 30, 0).atZone(ZoneId.systemDefault()).toInstant());
735+
originalCase.setReportDate(existingDate);
772736
getCaseFacade().save(originalCase);
773737

774738
// Patch with the same calendar day as a plain date string — DatePatchMapper resolves this to midnight (00:00:00),
775739
// which differs in time from existingDate. Without DateEqualityChecker this would trigger FORBIDDEN_VALUE_OVERRIDE.
776740
String patchDate = "2024-06-15";
777-
CaseDataPatchRequest request =
778-
new CaseDataPatchRequest().setCaseUuid(originalCase.getUuid()).setPatchDictionary(Map.of("CaseData.classificationDate", patchDate));
741+
CaseDataPatchRequest request = new CaseDataPatchRequest().setCaseUuid(originalCase.getUuid())
742+
.setPatchDictionary(Map.of(toFieldName(CaseDataDto.I18N_PREFIX, CaseDataDto.REPORT_DATE), patchDate));
779743

780744
// EXECUTE
781745
DataPatchResponse response = victim().patch(request);
782746

783747
// CHECK
784-
785748
Assertions.assertAll(
786749
() -> Assertions.assertTrue(response.getFailures().isEmpty(), "FORBIDDEN_VALUE_OVERRIDE must not fire for same-day dates"),
787750
() -> Assertions.assertTrue(response.isApplied()));

0 commit comments

Comments
 (0)