diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingVorgangWithEingangProcessor.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingVorgangWithEingangProcessor.java index 253c61c08de8fe9bf248a1b273dc017c321eb140..d5501ce829b68463ed23e8ce516bdc78bdef4bc1 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingVorgangWithEingangProcessor.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingVorgangWithEingangProcessor.java @@ -39,13 +39,17 @@ class ForwardingVorgangWithEingangProcessor implements RepresentationModelProces } boolean isForwardableByOzgCloud(VorgangWithEingang vorgang) { - return featureToggleProperties.isForwardByOzgCloudEnabled() && isStatusNeu(vorgang); + return featureToggleProperties.isForwardByOzgCloudEnabled() && isStatusNeu(vorgang) && isNotPoststelleOrEinheitlicherAnsprechpartner(); } private boolean isStatusNeu(VorgangWithEingang vorgang) { return vorgang.getStatus() == VorgangStatus.NEU; } + boolean isNotPoststelleOrEinheitlicherAnsprechpartner() { + return userService.hasRole(UserRole.VERWALTUNG_POSTSTELLE) || userService.hasRole(UserRole.EINHEITLICHER_ANSPRECHPARTNER); + } + private Link buildForwardByOzgCloudLink(VorgangWithEingang vorgang) { return linkTo(methodOn(CommandController.CommandByRelationController.class).createCommand(vorgang.getId(), vorgang.getId(), vorgang.getVersion(), null)).withRel(REL_FORWARD_BY_OZGCLOUD); diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingVorgangWithEingangProcessorTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingVorgangWithEingangProcessorTest.java index 6cb6708f9eaac89da60d6166a21b5af6ce0268f0..afddb5f1524487dbd49a858c0306fe16f9fd388c 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingVorgangWithEingangProcessorTest.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/forwarding/ForwardingVorgangWithEingangProcessorTest.java @@ -182,6 +182,16 @@ class ForwardingVorgangWithEingangProcessorTest { assertThat(forwardableByOzgCloud).isFalse(); } + + @ParameterizedTest + @EnumSource + void shouldNotCallIsNotPoststelleOrEinheitlicherAnsprechpartner(VorgangStatus status) { + var vorgang = VorgangWithEingangTestFactory.createBuilder().status(status).build(); + + processor.isForwardableByOzgCloud(vorgang); + + verify(processor, never()).isNotPoststelleOrEinheitlicherAnsprechpartner(); + } } @Nested @@ -192,27 +202,91 @@ class ForwardingVorgangWithEingangProcessorTest { when(featureToggleProperties.isForwardByOzgCloudEnabled()).thenReturn(true); } - @ParameterizedTest - @EnumSource(mode = Mode.EXCLUDE, names = { "NEU" }) - void shouldReturnFalseOnVorgangStatusNotNeu(VorgangStatus status) { - var vorgang = VorgangWithEingangTestFactory.createBuilder().status(status).build(); + @Nested + class TestOnVorgangNotNeu { + @ParameterizedTest + @EnumSource(mode = Mode.EXCLUDE, names = { "NEU" }) + void shouldReturnFalseOnVorgangStatusNotNeu(VorgangStatus status) { + var vorgang = VorgangWithEingangTestFactory.createBuilder().status(status).build(); - var forwardableByOzgCloud = processor.isForwardableByOzgCloud(vorgang); + var forwardableByOzgCloud = processor.isForwardableByOzgCloud(vorgang); - assertThat(forwardableByOzgCloud).isFalse(); + assertThat(forwardableByOzgCloud).isFalse(); + } + + @ParameterizedTest + @EnumSource(mode = Mode.EXCLUDE, names = { "NEU" }) + void shouldNotCallIsNotPoststelleOrEinheitlicherAnsprechpartner(VorgangStatus status) { + var vorgang = VorgangWithEingangTestFactory.createBuilder().status(status).build(); + + processor.isForwardableByOzgCloud(vorgang); + + verify(processor, never()).isNotPoststelleOrEinheitlicherAnsprechpartner(); + } } - @Test - void shouldReturnTrueOnVorgangStatusNeu() { - var vorgang = VorgangWithEingangTestFactory.createBuilder().status(VorgangStatus.NEU).build(); + @Nested + class TestOnVorgangIsNeu { - var forwardableByOzgCloud = processor.isForwardableByOzgCloud(vorgang); + private final VorgangWithEingang newVorgang = VorgangWithEingangTestFactory.createBuilder().status(VorgangStatus.NEU).build(); + + @Test + void shouldCallIsNotPoststelleOrEinheitlicherAnsprechpartner() { + processor.isForwardableByOzgCloud(newVorgang); + + verify(processor).isNotPoststelleOrEinheitlicherAnsprechpartner(); + } - assertThat(forwardableByOzgCloud).isTrue(); + @ParameterizedTest + @ValueSource(booleans = { true, false }) + void shouldReturnValueOfisNotPoststelleOrEinheitlicherAnsprechpartner(boolean isNotPoststelleOrEinheitlicherAnsprechpartner) { + doReturn(isNotPoststelleOrEinheitlicherAnsprechpartner).when(processor).isNotPoststelleOrEinheitlicherAnsprechpartner(); + + var forwardableByOzgCloud = processor.isForwardableByOzgCloud(newVorgang); + + assertThat(forwardableByOzgCloud).isEqualTo(isNotPoststelleOrEinheitlicherAnsprechpartner); + } } } } + @Nested + class TestIsNotPoststelleOrEinheitlicherAnsprechpartner { + + private static final String UNKOWN_ROLE = "UNKOWN_ROLE"; + + @BeforeEach + void mock() { + when(userService.hasRole(any())).thenAnswer(invocation -> { + var role = invocation.getArgument(0, String.class); + return role == UserRole.EINHEITLICHER_ANSPRECHPARTNER || role == UserRole.VERWALTUNG_POSTSTELLE; + }); + } + + @Test + void shouldCallUserServiceForCurrentRole() { + processor.isForwardableByEmail(); + + verify(userService).hasRole(UserRole.EINHEITLICHER_ANSPRECHPARTNER); + } + + @ParameterizedTest + @ValueSource(strings = { UserRole.EINHEITLICHER_ANSPRECHPARTNER, UserRole.VERWALTUNG_POSTSTELLE }) + void shouldReturnFalse(String role) { + var isNotPoststelleOrEinheitlicherAnsprechpartner = processor.isNotPoststelleOrEinheitlicherAnsprechpartner(); + + assertThat(isNotPoststelleOrEinheitlicherAnsprechpartner).isTrue(); + } + + @ParameterizedTest + @ValueSource(strings = { UserRole.VERWALTUNG_LOESCHEN, UserRole.VERWALTUNG_USER, UNKOWN_ROLE }) + void shouldReturnTrue(String role) { + var isNotPoststelleOrEinheitlicherAnsprechpartner = processor.isNotPoststelleOrEinheitlicherAnsprechpartner(); + + assertThat(isNotPoststelleOrEinheitlicherAnsprechpartner).isTrue(); + } + } + @Nested class TestIsForwardableByEmail {