From 8acecf997522ee4d46fc90aad5b5bb74e8000fb5 Mon Sep 17 00:00:00 2001 From: Karnaiah Pesula Date: Tue, 10 Feb 2026 08:53:51 +0100 Subject: [PATCH 1/4] Implemented custom general properties for dynamic document generation --- .../api/docgeneneration/DocumentWorkflow.java | 36 +++++++++---------- .../api/docgeneneration/RootEntityType.java | 3 +- .../DocumentTemplateFacadeEjb.java | 36 +++++++++++++++++++ 3 files changed, 55 insertions(+), 20 deletions(-) diff --git a/sormas-api/src/main/java/de/symeda/sormas/api/docgeneneration/DocumentWorkflow.java b/sormas-api/src/main/java/de/symeda/sormas/api/docgeneneration/DocumentWorkflow.java index 060afed1471..f1b02510734 100644 --- a/sormas-api/src/main/java/de/symeda/sormas/api/docgeneneration/DocumentWorkflow.java +++ b/sormas-api/src/main/java/de/symeda/sormas/api/docgeneneration/DocumentWorkflow.java @@ -21,6 +21,7 @@ import static de.symeda.sormas.api.docgeneneration.RootEntityType.ROOT_EVENT_ACTIONS; import static de.symeda.sormas.api.docgeneneration.RootEntityType.ROOT_EVENT_PARTICIPANT; import static de.symeda.sormas.api.docgeneneration.RootEntityType.ROOT_EVENT_PARTICIPANTS; +import static de.symeda.sormas.api.docgeneneration.RootEntityType.ROOT_GENERAL; import static de.symeda.sormas.api.docgeneneration.RootEntityType.ROOT_PATHOGEN_TEST; import static de.symeda.sormas.api.docgeneneration.RootEntityType.ROOT_PERSON; import static de.symeda.sormas.api.docgeneneration.RootEntityType.ROOT_SAMPLE; @@ -54,7 +55,8 @@ public enum DocumentWorkflow { ROOT_USER, ROOT_SAMPLE, ROOT_PATHOGEN_TEST, - ROOT_VACCINATION), + ROOT_VACCINATION, + ROOT_GENERAL), QUARANTINE_ORDER_CONTACT(DocumentWorkflowType.DOCUMENT, "quarantineContact", DOCX, @@ -64,7 +66,8 @@ public enum DocumentWorkflow { ROOT_USER, ROOT_SAMPLE, ROOT_PATHOGEN_TEST, - ROOT_VACCINATION), + ROOT_VACCINATION, + ROOT_GENERAL), QUARANTINE_ORDER_EVENT_PARTICIPANT(DocumentWorkflowType.DOCUMENT, "quarantineEventParticipant", DOCX, @@ -74,14 +77,16 @@ public enum DocumentWorkflow { ROOT_USER, ROOT_SAMPLE, ROOT_PATHOGEN_TEST, - ROOT_VACCINATION), + ROOT_VACCINATION, + ROOT_GENERAL), QUARANTINE_ORDER_TRAVEL_ENTRY(DocumentWorkflowType.DOCUMENT, "quarantineTravelEntry", DOCX, UserRight.DOCUMENT_TEMPLATE_MANAGEMENT, ROOT_TRAVEL_ENTRY, ROOT_PERSON, - ROOT_USER), + ROOT_USER, + ROOT_GENERAL), EVENT_HANDOUT(DocumentWorkflowType.DOCUMENT, "eventHandout", HTML, @@ -127,22 +132,15 @@ public enum DocumentWorkflow { ROOT_TRAVEL_ENTRY, ROOT_PERSON, ROOT_USER), - SURVEY_DOCUMENT(DocumentWorkflowType.DOCUMENT, - "survey", - DOCX, - UserRight.SURVEY_EDIT, - ROOT_CASE, - ROOT_PERSON, - ROOT_USER, - ROOT_SAMPLE), + SURVEY_DOCUMENT(DocumentWorkflowType.DOCUMENT, "survey", DOCX, UserRight.SURVEY_EDIT, ROOT_CASE, ROOT_PERSON, ROOT_USER, ROOT_SAMPLE), SURVEY_EMAIL(DocumentWorkflowType.EMAIL, - Constants.EMAIL_TEMPLATES_FOLDER + "/surveys", - TXT, - UserRight.SURVEY_EDIT, - ROOT_CASE, - ROOT_PERSON, - ROOT_USER, - ROOT_SAMPLE),; + Constants.EMAIL_TEMPLATES_FOLDER + "/surveys", + TXT, + UserRight.SURVEY_EDIT, + ROOT_CASE, + ROOT_PERSON, + ROOT_USER, + ROOT_SAMPLE),; private final DocumentWorkflowType type; private final String templateDirectory; diff --git a/sormas-api/src/main/java/de/symeda/sormas/api/docgeneneration/RootEntityType.java b/sormas-api/src/main/java/de/symeda/sormas/api/docgeneneration/RootEntityType.java index 07b8a3f5ff0..dc5d241ef40 100644 --- a/sormas-api/src/main/java/de/symeda/sormas/api/docgeneneration/RootEntityType.java +++ b/sormas-api/src/main/java/de/symeda/sormas/api/docgeneneration/RootEntityType.java @@ -28,7 +28,8 @@ public enum RootEntityType { ROOT_EVENT_ACTIONS("eventActions"), ROOT_EVENT_PARTICIPANTS("eventParticipants"), ROOT_TRAVEL_ENTRY("travelEntry"), - ROOT_VACCINATION("vaccination"); + ROOT_VACCINATION("vaccination"), + ROOT_GENERAL("general"); private final String entityName; diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/docgeneration/DocumentTemplateFacadeEjb.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/docgeneration/DocumentTemplateFacadeEjb.java index 627307154e5..1144421814b 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/docgeneration/DocumentTemplateFacadeEjb.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/docgeneration/DocumentTemplateFacadeEjb.java @@ -19,7 +19,11 @@ import java.io.File; import java.io.IOException; import java.nio.charset.StandardCharsets; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.time.format.FormatStyle; import java.util.List; +import java.util.Optional; import java.util.Properties; import java.util.Set; import java.util.regex.Matcher; @@ -229,6 +233,11 @@ private Properties prepareProperties( continue; } + // check if the entity is from a general. + if (rootEntityType == RootEntityType.ROOT_GENERAL) { + fillGeneralValues(documentVariables, properties, propertyKey); + } + Object entity = entities.getEntity(rootEntityType); if (entity instanceof HasUuid) { if (documentWorkflow.isDocx() || propertyKey.contains(propertySeparator)) { @@ -284,6 +293,33 @@ private Properties prepareProperties( return properties; } + private void fillGeneralValues(DocumentVariables documentVariables, Properties properties, String propertyKey) { + // finding the general property key. Based on the type, formatStyle is deciding. + // general properties are allowed only doc-formatted files. + Optional generalPropertyOpt = documentVariables.getVariables() + .stream() + .filter(e -> e.startsWith(RootEntityType.ROOT_GENERAL.getEntityName() + ".")) + .filter(e -> e.equals(propertyKey)) + .findAny(); + + if (generalPropertyOpt.isPresent()) { + String generalProperty = generalPropertyOpt.get(); + String dateType = generalProperty.substring(generalProperty.lastIndexOf('.') + 1); + FormatStyle formatStyle; + switch (dateType) { + case "medium": + formatStyle = FormatStyle.MEDIUM; + break; + case "short": + default: + formatStyle = FormatStyle.SHORT; + } + String propertyValue = + LocalDate.now().format(DateTimeFormatter.ofLocalizedDate(formatStyle).withLocale(I18nProperties.getUserLanguage().getLocale())); + properties.setProperty(generalProperty, propertyValue); + } + } + private byte[] generateDocumentDocx(File templateFile, Properties properties) throws DocumentTemplateException { return templateEngine.generateDocumentDocx(properties, templateFile); } From 9d5a09f701ea39942fa6dc0f88f9dd053ff75545 Mon Sep 17 00:00:00 2001 From: Karnaiah Pesula Date: Wed, 4 Mar 2026 11:44:21 +0100 Subject: [PATCH 2/4] Incorporating survey token while merging the cases and its related test --- .../sormas/backend/caze/CaseFacadeEjb.java | 14 +++++++ .../backend/survey/SurveyTokenService.java | 22 ++++++++++ .../sormas/backend/TestDataCreator.java | 9 ++++ .../backend/survey/SurveyServiceTest.java | 42 +++++++++++++++++++ 4 files changed, 87 insertions(+) create mode 100644 sormas-backend/src/test/java/de/symeda/sormas/backend/survey/SurveyServiceTest.java diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/CaseFacadeEjb.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/CaseFacadeEjb.java index e1558a9f1db..2e1bcb8c905 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/CaseFacadeEjb.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/CaseFacadeEjb.java @@ -185,6 +185,7 @@ import de.symeda.sormas.api.sormastosormas.ShareTreeCriteria; import de.symeda.sormas.api.sormastosormas.SormasToSormasException; import de.symeda.sormas.api.sormastosormas.SormasToSormasRuntimeException; +import de.symeda.sormas.api.survey.SurveyTokenCriteria; import de.symeda.sormas.api.symptoms.SymptomsDto; import de.symeda.sormas.api.symptoms.SymptomsHelper; import de.symeda.sormas.api.task.TaskContext; @@ -330,6 +331,8 @@ import de.symeda.sormas.backend.sormastosormas.share.outgoing.ShareRequestInfoService; import de.symeda.sormas.backend.sormastosormas.share.outgoing.SormasToSormasShareInfo; import de.symeda.sormas.backend.specialcaseaccess.SpecialCaseAccessService; +import de.symeda.sormas.backend.survey.SurveyToken; +import de.symeda.sormas.backend.survey.SurveyTokenService; import de.symeda.sormas.backend.symptoms.Symptoms; import de.symeda.sormas.backend.symptoms.SymptomsFacadeEjb; import de.symeda.sormas.backend.symptoms.SymptomsFacadeEjb.SymptomsFacadeEjbLocal; @@ -517,6 +520,8 @@ public class CaseFacadeEjb extends AbstractCoreFacadeEjb tokens = surveyService.findBy(new SurveyTokenCriteria().caseAssignedTo(otherCase.toReference())); + tokens.forEach(s -> { + s.setCaseAssignedTo(leadCase); + surveyService.ensurePersisted(s); + }); + } } private void copyDtoValues(CaseDataDto leadCaseData, CaseDataDto otherCaseData, boolean cloning) { diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/survey/SurveyTokenService.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/survey/SurveyTokenService.java index 2d06684deb5..304999b89b9 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/survey/SurveyTokenService.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/survey/SurveyTokenService.java @@ -15,6 +15,8 @@ package de.symeda.sormas.backend.survey; +import java.util.List; + import javax.ejb.LocalBean; import javax.ejb.Stateless; import javax.persistence.criteria.CriteriaBuilder; @@ -101,6 +103,26 @@ public SurveyToken getToken(SurveyTokenCriteria criteria) { return QueryHelper.getFirstResult(em, cq); } + /** + * Finds survey tokens based on the provided criteria. The results are ordered by assignment date in descending order. + * + * @param criteria + * @return List + */ + public List findBy(SurveyTokenCriteria criteria) { + CriteriaBuilder cb = em.getCriteriaBuilder(); + CriteriaQuery cq = cb.createQuery(SurveyToken.class); + Root root = cq.from(SurveyToken.class); + cq.select(root); + Predicate filter = CriteriaBuilderHelper.and(cb, this.buildCriteriaFilter(criteria, cb, root, new SurveyTokenJoins(root))); + if (filter != null) { + cq.where(filter); + } + cq.orderBy(cb.desc(root.get(SurveyToken.ASSIGNMENT_DATE))); + + return em.createQuery(cq).getResultList(); + } + public SurveyToken getBySurveyAndToken(SurveyReferenceDto survey, String token) { CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery cq = cb.createQuery(SurveyToken.class); diff --git a/sormas-backend/src/test/java/de/symeda/sormas/backend/TestDataCreator.java b/sormas-backend/src/test/java/de/symeda/sormas/backend/TestDataCreator.java index 3a22d06a743..23e750abbaa 100644 --- a/sormas-backend/src/test/java/de/symeda/sormas/backend/TestDataCreator.java +++ b/sormas-backend/src/test/java/de/symeda/sormas/backend/TestDataCreator.java @@ -128,6 +128,7 @@ import de.symeda.sormas.api.sormastosormas.share.incoming.ShareRequestStatus; import de.symeda.sormas.api.specialcaseaccess.SpecialCaseAccessDto; import de.symeda.sormas.api.survey.SurveyDto; +import de.symeda.sormas.api.survey.SurveyTokenDto; import de.symeda.sormas.api.systemevents.SystemEventDto; import de.symeda.sormas.api.systemevents.SystemEventStatus; import de.symeda.sormas.api.systemevents.SystemEventType; @@ -2476,6 +2477,14 @@ public SurveyDto createSurvey(String name, Disease disease) { return beanTest.getSurveyFacade().save(survey); } + public SurveyTokenDto createSurveyToken(CaseReferenceDto caze) { + SurveyDto survey = this.createSurvey("Malaria-Survey", Disease.MALARIA); + SurveyTokenDto token = SurveyTokenDto.build(survey.toReference()); + token.setToken("MALA01"); + token.setCaseAssignedTo(caze); + return beanTest.getSurveyTokenFacade().save(token); + } + public NotifierDto createNotifier(String firstName, String lastName, String email, String phone, String address, String registrationNumber) { NotifierDto notifier = new NotifierDto(); notifier.setFirstName(firstName); diff --git a/sormas-backend/src/test/java/de/symeda/sormas/backend/survey/SurveyServiceTest.java b/sormas-backend/src/test/java/de/symeda/sormas/backend/survey/SurveyServiceTest.java new file mode 100644 index 00000000000..bd1fb14ca15 --- /dev/null +++ b/sormas-backend/src/test/java/de/symeda/sormas/backend/survey/SurveyServiceTest.java @@ -0,0 +1,42 @@ +package de.symeda.sormas.backend.survey; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.greaterThan; +import static org.hamcrest.Matchers.is; + +import java.util.List; + +import org.junit.jupiter.api.Test; + +import de.symeda.sormas.api.Disease; +import de.symeda.sormas.api.caze.CaseDataDto; +import de.symeda.sormas.api.survey.SurveyTokenCriteria; +import de.symeda.sormas.api.user.UserDto; +import de.symeda.sormas.backend.AbstractBeanTest; +import de.symeda.sormas.backend.TestDataCreator; + +/** + * Test class for testing the SurveyService. + */ +public class SurveyServiceTest extends AbstractBeanTest { + + private UserDto surveillanceOfficer; + private TestDataCreator.RDCF rdcf; + + @Override + public void init() { + super.init(); + rdcf = creator.createRDCF("Region", "District", "Community", "Facility"); + surveillanceOfficer = creator.createSurveillanceOfficer(rdcf); + } + + @Test + public void testSurveyTokens() { + CaseDataDto caze = creator.createCase(surveillanceOfficer.toReference(), rdcf, (c) -> { + c.setDisease(Disease.MALARIA); + }); + creator.createSurveyToken(caze.toReference()); + List tokenList = getSurveyTokenService().findBy(new SurveyTokenCriteria()); + assertThat(tokenList.size(), is(greaterThan(0))); + } +} From 301c6f3860b6ff02fa2d4052b55bd184b44af4ce Mon Sep 17 00:00:00 2001 From: Karnaiah Pesula Date: Wed, 4 Mar 2026 11:50:34 +0100 Subject: [PATCH 3/4] reverting general workflow --- .../api/docgeneneration/DocumentWorkflow.java | 13 +++---- .../api/docgeneneration/RootEntityType.java | 3 +- .../DocumentTemplateFacadeEjb.java | 36 ------------------- 3 files changed, 5 insertions(+), 47 deletions(-) diff --git a/sormas-api/src/main/java/de/symeda/sormas/api/docgeneneration/DocumentWorkflow.java b/sormas-api/src/main/java/de/symeda/sormas/api/docgeneneration/DocumentWorkflow.java index f1b02510734..54e6ff91c5f 100644 --- a/sormas-api/src/main/java/de/symeda/sormas/api/docgeneneration/DocumentWorkflow.java +++ b/sormas-api/src/main/java/de/symeda/sormas/api/docgeneneration/DocumentWorkflow.java @@ -21,7 +21,6 @@ import static de.symeda.sormas.api.docgeneneration.RootEntityType.ROOT_EVENT_ACTIONS; import static de.symeda.sormas.api.docgeneneration.RootEntityType.ROOT_EVENT_PARTICIPANT; import static de.symeda.sormas.api.docgeneneration.RootEntityType.ROOT_EVENT_PARTICIPANTS; -import static de.symeda.sormas.api.docgeneneration.RootEntityType.ROOT_GENERAL; import static de.symeda.sormas.api.docgeneneration.RootEntityType.ROOT_PATHOGEN_TEST; import static de.symeda.sormas.api.docgeneneration.RootEntityType.ROOT_PERSON; import static de.symeda.sormas.api.docgeneneration.RootEntityType.ROOT_SAMPLE; @@ -55,8 +54,7 @@ public enum DocumentWorkflow { ROOT_USER, ROOT_SAMPLE, ROOT_PATHOGEN_TEST, - ROOT_VACCINATION, - ROOT_GENERAL), + ROOT_VACCINATION), QUARANTINE_ORDER_CONTACT(DocumentWorkflowType.DOCUMENT, "quarantineContact", DOCX, @@ -66,8 +64,7 @@ public enum DocumentWorkflow { ROOT_USER, ROOT_SAMPLE, ROOT_PATHOGEN_TEST, - ROOT_VACCINATION, - ROOT_GENERAL), + ROOT_VACCINATION), QUARANTINE_ORDER_EVENT_PARTICIPANT(DocumentWorkflowType.DOCUMENT, "quarantineEventParticipant", DOCX, @@ -77,16 +74,14 @@ public enum DocumentWorkflow { ROOT_USER, ROOT_SAMPLE, ROOT_PATHOGEN_TEST, - ROOT_VACCINATION, - ROOT_GENERAL), + ROOT_VACCINATION), QUARANTINE_ORDER_TRAVEL_ENTRY(DocumentWorkflowType.DOCUMENT, "quarantineTravelEntry", DOCX, UserRight.DOCUMENT_TEMPLATE_MANAGEMENT, ROOT_TRAVEL_ENTRY, ROOT_PERSON, - ROOT_USER, - ROOT_GENERAL), + ROOT_USER), EVENT_HANDOUT(DocumentWorkflowType.DOCUMENT, "eventHandout", HTML, diff --git a/sormas-api/src/main/java/de/symeda/sormas/api/docgeneneration/RootEntityType.java b/sormas-api/src/main/java/de/symeda/sormas/api/docgeneneration/RootEntityType.java index dc5d241ef40..07b8a3f5ff0 100644 --- a/sormas-api/src/main/java/de/symeda/sormas/api/docgeneneration/RootEntityType.java +++ b/sormas-api/src/main/java/de/symeda/sormas/api/docgeneneration/RootEntityType.java @@ -28,8 +28,7 @@ public enum RootEntityType { ROOT_EVENT_ACTIONS("eventActions"), ROOT_EVENT_PARTICIPANTS("eventParticipants"), ROOT_TRAVEL_ENTRY("travelEntry"), - ROOT_VACCINATION("vaccination"), - ROOT_GENERAL("general"); + ROOT_VACCINATION("vaccination"); private final String entityName; diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/docgeneration/DocumentTemplateFacadeEjb.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/docgeneration/DocumentTemplateFacadeEjb.java index 1144421814b..627307154e5 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/docgeneration/DocumentTemplateFacadeEjb.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/docgeneration/DocumentTemplateFacadeEjb.java @@ -19,11 +19,7 @@ import java.io.File; import java.io.IOException; import java.nio.charset.StandardCharsets; -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; -import java.time.format.FormatStyle; import java.util.List; -import java.util.Optional; import java.util.Properties; import java.util.Set; import java.util.regex.Matcher; @@ -233,11 +229,6 @@ private Properties prepareProperties( continue; } - // check if the entity is from a general. - if (rootEntityType == RootEntityType.ROOT_GENERAL) { - fillGeneralValues(documentVariables, properties, propertyKey); - } - Object entity = entities.getEntity(rootEntityType); if (entity instanceof HasUuid) { if (documentWorkflow.isDocx() || propertyKey.contains(propertySeparator)) { @@ -293,33 +284,6 @@ private Properties prepareProperties( return properties; } - private void fillGeneralValues(DocumentVariables documentVariables, Properties properties, String propertyKey) { - // finding the general property key. Based on the type, formatStyle is deciding. - // general properties are allowed only doc-formatted files. - Optional generalPropertyOpt = documentVariables.getVariables() - .stream() - .filter(e -> e.startsWith(RootEntityType.ROOT_GENERAL.getEntityName() + ".")) - .filter(e -> e.equals(propertyKey)) - .findAny(); - - if (generalPropertyOpt.isPresent()) { - String generalProperty = generalPropertyOpt.get(); - String dateType = generalProperty.substring(generalProperty.lastIndexOf('.') + 1); - FormatStyle formatStyle; - switch (dateType) { - case "medium": - formatStyle = FormatStyle.MEDIUM; - break; - case "short": - default: - formatStyle = FormatStyle.SHORT; - } - String propertyValue = - LocalDate.now().format(DateTimeFormatter.ofLocalizedDate(formatStyle).withLocale(I18nProperties.getUserLanguage().getLocale())); - properties.setProperty(generalProperty, propertyValue); - } - } - private byte[] generateDocumentDocx(File templateFile, Properties properties) throws DocumentTemplateException { return templateEngine.generateDocumentDocx(properties, templateFile); } From 3d6a3e15ca4e67b547d43ac31406bac6552864ab Mon Sep 17 00:00:00 2001 From: Karnaiah Pesula Date: Tue, 10 Mar 2026 11:14:55 +0100 Subject: [PATCH 4/4] Fixes: Issue# 13873 Survey token is missing while merging two cases in SORMAS Summary: Incorporate survey token while merging the cases. Changes: Introduced a new method to find the survey token for the case. For a normal merge scenario, assign the respective caseId. In case of cloning, it's not correct to assign the existing survey to the new case. Updated the TestDataCreator for returning the test survey token details. Created SurveyServiceTest to validate findSurveyToken of the case. --- .../sormas/backend/caze/CaseFacadeEjb.java | 1 + .../sormas/backend/TestDataCreator.java | 5 ++++ .../backend/survey/SurveyServiceTest.java | 24 +++++++++++++++++++ 3 files changed, 30 insertions(+) diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/CaseFacadeEjb.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/CaseFacadeEjb.java index 2e1bcb8c905..d40289a68d4 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/CaseFacadeEjb.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/caze/CaseFacadeEjb.java @@ -4087,6 +4087,7 @@ private void mergeCase(CaseDataDto leadCaseData, CaseDataDto otherCaseData, bool travelEntryService.ensurePersisted(t); }); + // Including survey token for merge case. // 11. servey token reference if (!cloning) { List tokens = surveyService.findBy(new SurveyTokenCriteria().caseAssignedTo(otherCase.toReference())); diff --git a/sormas-backend/src/test/java/de/symeda/sormas/backend/TestDataCreator.java b/sormas-backend/src/test/java/de/symeda/sormas/backend/TestDataCreator.java index 23e750abbaa..13e6d6c666f 100644 --- a/sormas-backend/src/test/java/de/symeda/sormas/backend/TestDataCreator.java +++ b/sormas-backend/src/test/java/de/symeda/sormas/backend/TestDataCreator.java @@ -2477,6 +2477,11 @@ public SurveyDto createSurvey(String name, Disease disease) { return beanTest.getSurveyFacade().save(survey); } + /** + * + * @param caze + * @return + */ public SurveyTokenDto createSurveyToken(CaseReferenceDto caze) { SurveyDto survey = this.createSurvey("Malaria-Survey", Disease.MALARIA); SurveyTokenDto token = SurveyTokenDto.build(survey.toReference()); diff --git a/sormas-backend/src/test/java/de/symeda/sormas/backend/survey/SurveyServiceTest.java b/sormas-backend/src/test/java/de/symeda/sormas/backend/survey/SurveyServiceTest.java index bd1fb14ca15..6646e2e80fc 100644 --- a/sormas-backend/src/test/java/de/symeda/sormas/backend/survey/SurveyServiceTest.java +++ b/sormas-backend/src/test/java/de/symeda/sormas/backend/survey/SurveyServiceTest.java @@ -1,6 +1,21 @@ +/* + * SORMAS® - Surveillance Outbreak Response Management & Analysis System + * Copyright © 2016-2026 SORMAS Foundation gGmbH + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ package de.symeda.sormas.backend.survey; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.greaterThan; import static org.hamcrest.Matchers.is; @@ -23,6 +38,10 @@ public class SurveyServiceTest extends AbstractBeanTest { private UserDto surveillanceOfficer; private TestDataCreator.RDCF rdcf; + /** + * @see AbstractBeanTest#init() + * Initializing the primary data for the test. + */ @Override public void init() { super.init(); @@ -30,6 +49,10 @@ public void init() { surveillanceOfficer = creator.createSurveillanceOfficer(rdcf); } + /** + * Test method for {@link de.symeda.sormas.backend.survey.SurveyService#findBy(de.symeda.sormas.api.survey.SurveyTokenCriteria)}. + * + */ @Test public void testSurveyTokens() { CaseDataDto caze = creator.createCase(surveillanceOfficer.toReference(), rdcf, (c) -> { @@ -38,5 +61,6 @@ public void testSurveyTokens() { creator.createSurveyToken(caze.toReference()); List tokenList = getSurveyTokenService().findBy(new SurveyTokenCriteria()); assertThat(tokenList.size(), is(greaterThan(0))); + assertThat(tokenList.get(0).getToken(), is(equalTo("MALA01"))); } }