diff --git a/sormas-api/src/main/java/de/symeda/sormas/api/InfrastructureDataReferenceDto.java b/sormas-api/src/main/java/de/symeda/sormas/api/InfrastructureDataReferenceDto.java index 8e1ed742f8d..243fff0b5fb 100644 --- a/sormas-api/src/main/java/de/symeda/sormas/api/InfrastructureDataReferenceDto.java +++ b/sormas-api/src/main/java/de/symeda/sormas/api/InfrastructureDataReferenceDto.java @@ -32,6 +32,10 @@ protected InfrastructureDataReferenceDto(String uuid, String caption, String ext this.externalId = externalId; } + public void setExternalId(String externalId) { + this.externalId = externalId; + } + public String getExternalId() { return externalId; } diff --git a/sormas-backend/src/main/java/de/symeda/sormas/backend/infrastructure/country/CountryFacadeEjb.java b/sormas-backend/src/main/java/de/symeda/sormas/backend/infrastructure/country/CountryFacadeEjb.java index 47ed5bb7f65..fa47224dfb1 100644 --- a/sormas-backend/src/main/java/de/symeda/sormas/backend/infrastructure/country/CountryFacadeEjb.java +++ b/sormas-backend/src/main/java/de/symeda/sormas/backend/infrastructure/country/CountryFacadeEjb.java @@ -202,20 +202,28 @@ public static CountryReferenceDto toReferenceDto(Country entity) { if (entity == null) { return null; } - return new CountryReferenceDto( + CountryReferenceDto dto = new CountryReferenceDto( entity.getUuid(), I18nProperties.getCountryName(entity.getIsoCode(), entity.getDefaultName()), entity.getIsoCode()); + + dto.setExternalId(entity.getExternalId()); + + return dto; } public static CountryReferenceDto toReferenceDto(CountryDto entity) { if (entity == null) { return null; } - return new CountryReferenceDto( + CountryReferenceDto dto = new CountryReferenceDto( entity.getUuid(), I18nProperties.getCountryName(entity.getIsoCode(), entity.getDefaultName()), entity.getIsoCode()); + + dto.setExternalId(entity.getExternalId()); + + return dto; } @Override diff --git a/sormas-backend/src/test/java/de/symeda/sormas/patch/DataPatcherImplTest.java b/sormas-backend/src/test/java/de/symeda/sormas/patch/DataPatcherImplTest.java index 2a48b7fb78b..34c7c97c2fb 100644 --- a/sormas-backend/src/test/java/de/symeda/sormas/patch/DataPatcherImplTest.java +++ b/sormas-backend/src/test/java/de/symeda/sormas/patch/DataPatcherImplTest.java @@ -1,5 +1,9 @@ package de.symeda.sormas.patch; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.mockStatic; +import static org.mockito.Mockito.when; + import java.sql.Date; import java.time.LocalDate; import java.time.LocalDateTime; @@ -19,6 +23,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; +import org.mockito.MockedStatic; import org.mockito.Mockito; import de.symeda.sormas.api.Disease; @@ -52,6 +57,7 @@ import de.symeda.sormas.api.immunization.ImmunizationStatus; import de.symeda.sormas.api.immunization.MeansOfImmunization; import de.symeda.sormas.api.infrastructure.country.CountryDto; +import de.symeda.sormas.api.infrastructure.country.CountryFacade; import de.symeda.sormas.api.infrastructure.country.CountryReferenceDto; import de.symeda.sormas.api.infrastructure.facility.FacilityDto; import de.symeda.sormas.api.patch.CaseDataPatchRequest; @@ -84,6 +90,7 @@ import de.symeda.sormas.backend.patch.mapping.impl.valuemapper.CollectionPatchMapper; import de.symeda.sormas.backend.systemconfiguration.SystemConfigurationCategory; import de.symeda.sormas.backend.systemconfiguration.SystemConfigurationCategoryService; +import de.symeda.sormas.backend.util.InstanceProvider; class DataPatcherImplTest extends AbstractBeanTest { @@ -504,6 +511,53 @@ void patch_referenceData_country() { actualPerson.getBirthCountry())); } + @Test + void patch_referenceData_country_external_id() { + // PREPARE + MockProducer.getProperties().setProperty(ConfigFacadeEjb.COUNTRY_LOCALE, "lu"); + + String germanyCountryUuid = "ABCD-1234-EFGH-5678-IJKL-MNOP"; + CountryDto dto = new CountryDto(); + dto.setIsoCode("DEU"); + dto.setUuid(germanyCountryUuid); + dto.setExternalId("DE"); + dto.setDefaultName("Germany"); + CountryDto germanyReferenceDto = getCountryFacade().save(dto); + + CaseDataDto originalCase = creator.createUnclassifiedCase(Disease.PERTUSSIS); + + // must be able to ignore accents - whitespaces - case + Map patchDictionary = Map.of("Person.birthCountry", "DE"); + CaseDataPatchRequest request = new CaseDataPatchRequest().setCaseUuid(originalCase.getUuid()) + .setReplacementStrategy(DataReplacementStrategy.ALWAYS) + .setPatchDictionary(patchDictionary) + .setInputLanguages(List.of(Language.DE, Language.EN, Language.FR)); + + CountryFacade mockFacade = mock(CountryFacade.class); + + CountryReferenceDto germany = new CountryReferenceDto(germanyCountryUuid, "Germany", "DEU"); + germany.setExternalId("DE"); + when(mockFacade.getAllActiveAsReference()).thenReturn(List.of(germany)); + + try (MockedStatic mockedStatic = mockStatic(InstanceProvider.class)) { + mockedStatic.when(() -> InstanceProvider.getInstanceFor(CountryFacade.class)).thenReturn(mockFacade); + + // EXECUTE + DataPatchResponse response = victim().patch(request); + + PersonDto actualPerson = getPersonFacade().getByUuid(originalCase.getPerson().getUuid()); + + // CHECK + Assertions.assertAll( + () -> Assertions.assertTrue(response.getFailures().isEmpty(), "Failure found, but should be empty"), + + () -> Assertions.assertEquals( + new CountryReferenceDto(germanyReferenceDto.getUuid(), germanyReferenceDto.getIsoCode()), + actualPerson.getBirthCountry())); + } + + } + @Test void patch_notSupportedForDisease() { // PREPARE