diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/statistic/Statistic.java b/alfa-service/src/main/java/de/ozgcloud/alfa/statistic/Statistic.java index 2a17cc875696000782390062587d6e91474db53f..855d2ef1c57c58cc69cebffe7fb37facf972a25f 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/statistic/Statistic.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/statistic/Statistic.java @@ -12,4 +12,5 @@ public class Statistic { private ByStatus byStatus; private int wiedervorlagen; private boolean existsWiedervorlageOverdue; + private int ungeleseneNachrichten; } diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/statistic/StatisticRemoteService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/statistic/StatisticRemoteService.java index cd508d6198827251fd4f661a7e0a4815570fa898..a2cb6eede0078e730bfb682a6fc222db8897a740 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/statistic/StatisticRemoteService.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/statistic/StatisticRemoteService.java @@ -25,9 +25,11 @@ class StatisticRemoteService { static final String COUNT_VORGANG_STATUS_RESULT_NAME_FORMAT = "countVorgangStatus_%s"; static final String COUNT_WIEDERVORLAGE_NEXT_FRIST_RESULT_NAME = "countWiedervorlage"; static final String EXISTS_WIEDERVORLAGE_OVERDUE_RESULT_NAME = "existsWiedervorlageOverdue"; + static final String COUNT_VORGAENGE_WITH_UNGELESENE_NACHRICHTEN_RESULT_NAME = "countVorgaengeWithUngeleseneNachrichten"; static final String STATUS_PATH = "Vorgang.status"; static final String WIEDERVORLAGE_NEXT_FRIST_PATH_TEMPLATE = "ClientAttribute.%s.nextWiedervorlageFrist"; + static final String VORGAENGE_WITH_UNGELESENE_NACHRICHTEN_PATH = "ClientAttribute.OzgCloud_NachrichtenManager.hasNewPostfachNachricht"; static final String OPERAND_TODAY_DATE = "today()"; @@ -43,6 +45,7 @@ class StatisticRemoteService { .addAllQuery(buildCountByStatusQueries(countByVorgangStatus)) .addQuery(buildCountWiedervorlageNextFristQuery()) .addQuery(buildExistsWiedervorlageOverdueQuery()) + .addQuery(buildCountVorgaengeWithUngeleseneNachrichtenQuery()) .build(); var grpcResponse = statisticServiceStub.getVorgangStatistic(grpcRequest); @@ -93,4 +96,14 @@ class StatisticRemoteService { .map(mapper::toResult) .collect(Collectors.toMap(StatisticResult::getName, Function.identity())); } + + public GrpcVorgangStatisticQuery buildCountVorgaengeWithUngeleseneNachrichtenQuery() { + return GrpcVorgangStatisticQuery.newBuilder() + .setResultName(COUNT_VORGAENGE_WITH_UNGELESENE_NACHRICHTEN_RESULT_NAME) + .setPath(VORGAENGE_WITH_UNGELESENE_NACHRICHTEN_PATH) + .setGroupMethod(GroupMethod.COUNT) + .setOperator(Operator.EQUAL) + .setOperandBoolValue(true) + .build(); + } } \ No newline at end of file diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/statistic/StatisticService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/statistic/StatisticService.java index 68b9ab06c4d73f5b6810035b9b1312a6d3edbd2c..6b88ba78d635f291e3db330f661119f131ceb019 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/statistic/StatisticService.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/statistic/StatisticService.java @@ -48,6 +48,7 @@ class StatisticService { return Statistic.builder() .existsWiedervorlageOverdue(getBooleanResult(response, StatisticRemoteService.EXISTS_WIEDERVORLAGE_OVERDUE_RESULT_NAME)) .wiedervorlagen(getIntResult(response, StatisticRemoteService.COUNT_WIEDERVORLAGE_NEXT_FRIST_RESULT_NAME)) + .ungeleseneNachrichten(getIntResult(response, StatisticRemoteService.COUNT_VORGAENGE_WITH_UNGELESENE_NACHRICHTEN_RESULT_NAME)) .byStatus(ByStatus.builder() .neu(getIntResult(response, remoteService.buildCountByStatusResultName(VorgangStatus.NEU))) .abgeschlossen(getIntResult(response, remoteService.buildCountByStatusResultName(VorgangStatus.ABGESCHLOSSEN))) diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/GrpcVorgangStatisticQueryTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/GrpcVorgangStatisticQueryTestFactory.java index 0d26d330dc055948cec844b3cfd851f4adf72fd5..517f2f4495241c63259375ad45e7e6389b120f67 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/GrpcVorgangStatisticQueryTestFactory.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/GrpcVorgangStatisticQueryTestFactory.java @@ -1,14 +1,19 @@ package de.ozgcloud.alfa.statistic; +import com.thedeanda.lorem.LoremIpsum; + import de.ozgcloud.vorgang.statistic.GrpcVorgangStatisticQuery; public class GrpcVorgangStatisticQueryTestFactory { + public static final String RESULT_NAME = LoremIpsum.getInstance().getWords(1); + public static GrpcVorgangStatisticQuery create() { return createBuilder().build(); } public static GrpcVorgangStatisticQuery.Builder createBuilder() { - return GrpcVorgangStatisticQuery.newBuilder(); + return GrpcVorgangStatisticQuery.newBuilder() + .setResultName(RESULT_NAME); } } diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/StatisticRemoteServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/StatisticRemoteServiceTest.java index 5716d65c2197741fbf8d03e498f3b283e398cc17..c46fcf4d906019549f29b03431768834a11ddf5d 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/StatisticRemoteServiceTest.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/StatisticRemoteServiceTest.java @@ -15,6 +15,8 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.EnumSource; import org.junit.jupiter.params.provider.EnumSource.Mode; +import org.mockito.ArgumentCaptor; +import org.mockito.Captor; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; @@ -26,6 +28,7 @@ import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; import de.ozgcloud.vorgang.statistic.GrpcVorgangStatisticQuery; import de.ozgcloud.vorgang.statistic.GrpcVorgangStatisticQuery.GroupMethod; import de.ozgcloud.vorgang.statistic.GrpcVorgangStatisticQuery.Operator; +import de.ozgcloud.vorgang.statistic.GrpcVorgangStatisticRequest; import de.ozgcloud.vorgang.statistic.GrpcVorgangStatisticResponse; import de.ozgcloud.vorgang.statistic.GrpcVorgangStatisticResult; import de.ozgcloud.vorgang.statistic.StatisticServiceGrpc.StatisticServiceBlockingStub; @@ -190,12 +193,20 @@ class StatisticRemoteServiceTest { class TestGetVorgaengeStatistics { private final GrpcVorgangStatisticResponse response = GrpcVorgangStatisticResponseTestFactory.create(); + private final GrpcVorgangStatisticQuery countVorgaengeWithUngeleseneNachrichtenQuery = GrpcVorgangStatisticQueryTestFactory.createBuilder() + .setResultName("ungelesene nachrichten").build(); + private final GrpcVorgangStatisticQuery existsWiedervorlageOverdueQuery = GrpcVorgangStatisticQueryTestFactory.createBuilder() + .setResultName("exists overdue").build(); + + @Captor + private ArgumentCaptor<GrpcVorgangStatisticRequest> grpcRequestCaptor; @BeforeEach void beforeEach() { when(serviceStub.getVorgangStatistic(any())).thenReturn(response); - doReturn(GrpcVorgangStatisticQueryTestFactory.create()).when(service).buildExistsWiedervorlageOverdueQuery(); + doReturn(existsWiedervorlageOverdueQuery).when(service).buildExistsWiedervorlageOverdueQuery(); + doReturn(countVorgaengeWithUngeleseneNachrichtenQuery).when(service).buildCountVorgaengeWithUngeleseneNachrichtenQuery(); } @Test @@ -232,6 +243,21 @@ class StatisticRemoteServiceTest { verify(service).buildStatisticResult(response); } + + @Test + void shouldCallBuildCountVorgaengeWithUngeleseneNachrichtenQuery() { + service.getVorgaengeStatistics(STATUSES_TO_COUNT); + + verify(service).buildCountVorgaengeWithUngeleseneNachrichtenQuery(); + } + + @Test + void shouldAddCountVorgaengeWithUngeleseneNachrichtenQuery() { + service.getVorgaengeStatistics(STATUSES_TO_COUNT); + + verify(serviceStub).getVorgangStatistic(grpcRequestCaptor.capture()); + assertThat(grpcRequestCaptor.getValue().getQueryList()).contains(countVorgaengeWithUngeleseneNachrichtenQuery); + } } @Nested @@ -270,4 +296,47 @@ class StatisticRemoteServiceTest { .hasEntrySatisfying(RESULT_NAME, statisticResult -> assertThat(statisticResult.getIntValue()).isEqualTo(RESULT_INT)); } } + + @Nested + class TestBuildCountVorgaengeWithUngeleseneNachrichtenQuery { + + @Test + void shouldHaveResultName() { + var query = callService(); + + assertThat(query.getResultName()).isEqualTo(COUNT_VORGAENGE_WITH_UNGELESENE_NACHRICHTEN_RESULT_NAME); + } + + @Test + void shouldHavePath() { + var query = callService(); + + assertThat(query.getPath()).isEqualTo(VORGAENGE_WITH_UNGELESENE_NACHRICHTEN_PATH); + } + + @Test + void shouldHaveGroupingMethod() { + var query = callService(); + + assertThat(query.getGroupMethod()).isEqualTo(GroupMethod.COUNT); + } + + @Test + void shouldHaveOperator() { + var query = callService(); + + assertThat(query.getOperator()).isEqualTo(Operator.EQUAL); + } + + @Test + void shouldHaveOperandValue() { + var query = callService(); + + assertThat(query.getOperandBoolValue()).isTrue(); + } + + private GrpcVorgangStatisticQuery callService() { + return service.buildCountVorgaengeWithUngeleseneNachrichtenQuery(); + } + } } \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/StatisticServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/StatisticServiceTest.java index 1b030d675d4eec8e8cee9f8c2bcb0f3f83e339e1..e35e1de7fecbdcfeae02ca7e75064d40e354546d 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/StatisticServiceTest.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/StatisticServiceTest.java @@ -138,6 +138,14 @@ class StatisticServiceTest { assertThat(statistic.getByStatus().getNeu()).isZero(); } + + @Test + void shouldContainUngeleseneNachrichten() { + var statistic = service.buildGetVorgaengeStatisticResult( + Map.of(COUNT_VORGAENGE_WITH_UNGELESENE_NACHRICHTEN_RESULT_NAME, StatisticResultTestFactory.create())); + + assertThat(statistic.getUngeleseneNachrichten()).isEqualTo(StatisticResultTestFactory.INT_VALUE); + } } @Nested