diff --git a/wls-wahlvorstand-service/src/main/java/de/muenchen/oss/wahllokalsystem/wahlvorstandservice/service/wahlvorstand/WahlvorstandService.java b/wls-wahlvorstand-service/src/main/java/de/muenchen/oss/wahllokalsystem/wahlvorstandservice/service/wahlvorstand/WahlvorstandService.java index d4d6d38f5..923a84f73 100644 --- a/wls-wahlvorstand-service/src/main/java/de/muenchen/oss/wahllokalsystem/wahlvorstandservice/service/wahlvorstand/WahlvorstandService.java +++ b/wls-wahlvorstand-service/src/main/java/de/muenchen/oss/wahllokalsystem/wahlvorstandservice/service/wahlvorstand/WahlvorstandService.java @@ -16,6 +16,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import lombok.val; +import org.apache.commons.collections4.CollectionUtils; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.parameters.P; @@ -56,7 +57,7 @@ public Optional updateWahlvorstand(@P("wahlbezirkID") final S wahlvorstandValidator.validWahlbezirkIDOrThrow(wahlbezirkID); KonfigurierterWahltagModel konfigurierterWahltagModel = konfigurierterWahltagClient.getKonfigurierterWahltag(); WahlvorstandModel wahlvorstand = wahlvorstandEaiClient.getWahlvorstand(wahlbezirkID, konfigurierterWahltagModel.wahltag()); - return Optional.of(persistWahlvorstand(wahlvorstand, konfigurierterWahltagModel)); + return Optional.ofNullable(persistWahlvorstand(wahlvorstand, konfigurierterWahltagModel)); } @Transactional @@ -96,7 +97,7 @@ public Optional getFallbackWahlvorstand(String wahlbezirkID) } private WahlvorstandModel persistWahlvorstand(WahlvorstandModel wahlvorstand, KonfigurierterWahltagModel konfigurierterWahltagModel) { - if (wahlvorstand == null || wahlvorstand.wahlvorstandsmitglieder().isEmpty()) { + if (wahlvorstand == null || CollectionUtils.isEmpty(wahlvorstand.wahlvorstandsmitglieder())) { return null; } diff --git a/wls-wahlvorstand-service/src/test/java/de/muenchen/oss/wahllokalsystem/wahlvorstandservice/service/wahlvorstand/WahlvorstandServiceTest.java b/wls-wahlvorstand-service/src/test/java/de/muenchen/oss/wahllokalsystem/wahlvorstandservice/service/wahlvorstand/WahlvorstandServiceTest.java index b17970c1c..02b8f369a 100644 --- a/wls-wahlvorstand-service/src/test/java/de/muenchen/oss/wahllokalsystem/wahlvorstandservice/service/wahlvorstand/WahlvorstandServiceTest.java +++ b/wls-wahlvorstand-service/src/test/java/de/muenchen/oss/wahllokalsystem/wahlvorstandservice/service/wahlvorstand/WahlvorstandServiceTest.java @@ -5,6 +5,7 @@ import de.muenchen.oss.wahllokalsystem.wahlvorstandservice.utils.TestDataFactory; import de.muenchen.oss.wahllokalsystem.wls.common.exception.TechnischeWlsException; import de.muenchen.oss.wahllokalsystem.wls.common.exception.util.ExceptionFactory; +import java.util.Collections; import java.util.Optional; import lombok.val; import org.assertj.core.api.Assertions; @@ -94,6 +95,48 @@ void should_updateWahlvorstandAndReturnWahlvorstandModel_when_givenValidWahlbezi Mockito.verify(wahlvorstandValidator).validWahlbezirkIDOrThrow(wahlbezirkID); Mockito.verify(wahlvorstandRepository).save(mockedWahlvorstand); } + + @Test + void should_notSaveWahlvorstand_when_givenWahlvorstandIsNull() { + val wahlbezirkID = "wahlbezirkID"; + + val mockedKonfigurierterWahltagFromClient = TestDataFactory.CreateFromClient.konfigurierterWahltagModel(); + Mockito.when(konfigurierterWahltagClient.getKonfigurierterWahltag()).thenReturn(mockedKonfigurierterWahltagFromClient); + Mockito.when(wahlvorstandEaiClient.getWahlvorstand(wahlbezirkID, mockedKonfigurierterWahltagFromClient.wahltag())) + .thenReturn(null); + + val result = unitUnderTest.updateWahlvorstand(wahlbezirkID); + Assertions.assertThat(result).isEmpty(); + } + + @Test + void should_notSaveWahlvorstand_when_givenWahlvorstandsMitgliederIsEmpty() { + val wahlbezirkID = "wahlbezirkID"; + + val mockedKonfigurierterWahltagFromClient = TestDataFactory.CreateFromClient.konfigurierterWahltagModel(); + val mockedWahlvorstandModelFromClient = TestDataFactory.CreateFromClient.wahlvorstandModelWithCustomMembers(wahlbezirkID, Collections.emptyList()); + Mockito.when(konfigurierterWahltagClient.getKonfigurierterWahltag()).thenReturn(mockedKonfigurierterWahltagFromClient); + Mockito.when(wahlvorstandEaiClient.getWahlvorstand(wahlbezirkID, mockedKonfigurierterWahltagFromClient.wahltag())) + .thenReturn(mockedWahlvorstandModelFromClient); + + val result = unitUnderTest.updateWahlvorstand(wahlbezirkID); + Assertions.assertThat(result).isEmpty(); + } + + @Test + void should_notThrowNullPointerException_when_givenWahlvorstandsMitgliederIsNull() { + val wahlbezirkID = "wahlbezirkID"; + + val mockedKonfigurierterWahltagFromClient = TestDataFactory.CreateFromClient.konfigurierterWahltagModel(); + val mockedWahlvorstandModelFromClient = TestDataFactory.CreateFromClient.wahlvorstandModelWithCustomMembers(wahlbezirkID, null); + Mockito.when(konfigurierterWahltagClient.getKonfigurierterWahltag()).thenReturn(mockedKonfigurierterWahltagFromClient); + Mockito.when(wahlvorstandEaiClient.getWahlvorstand(wahlbezirkID, mockedKonfigurierterWahltagFromClient.wahltag())) + .thenReturn(mockedWahlvorstandModelFromClient); + + val result = unitUnderTest.updateWahlvorstand(wahlbezirkID); + Assertions.assertThat(result).isEmpty(); + Assertions.assertThatCode(() -> unitUnderTest.updateWahlvorstand(wahlbezirkID)).doesNotThrowAnyException(); + } } @Nested diff --git a/wls-wahlvorstand-service/src/test/java/de/muenchen/oss/wahllokalsystem/wahlvorstandservice/utils/TestDataFactory.java b/wls-wahlvorstand-service/src/test/java/de/muenchen/oss/wahllokalsystem/wahlvorstandservice/utils/TestDataFactory.java index 8431ca9ee..76345a6f2 100644 --- a/wls-wahlvorstand-service/src/test/java/de/muenchen/oss/wahllokalsystem/wahlvorstandservice/utils/TestDataFactory.java +++ b/wls-wahlvorstand-service/src/test/java/de/muenchen/oss/wahllokalsystem/wahlvorstandservice/utils/TestDataFactory.java @@ -159,6 +159,10 @@ public static WahlvorstandModel wahlvorstandModel(String wahlbezirkID) { return new WahlvorstandModel(wahlbezirkID, LocalDateTime.now().withNano(0), wahlvorstandsmitgliedModelList); } + + public static WahlvorstandModel wahlvorstandModelWithCustomMembers(String wahlbezirkID, List mitglieder) { + return new WahlvorstandModel(wahlbezirkID, LocalDateTime.now().withNano(0), mitglieder); + } } public static class MapWahlvorstandsmitglied {