diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/AlfaProperties.java b/alfa-service/src/main/java/de/ozgcloud/alfa/AlfaProperties.java new file mode 100644 index 0000000000000000000000000000000000000000..937fd3d129077099d4002c82f4f554945f87914e --- /dev/null +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/AlfaProperties.java @@ -0,0 +1,14 @@ +package de.ozgcloud.alfa; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +import lombok.Getter; + +@Configuration +public class AlfaProperties { + + @Getter + @Value("${spring.application.name}") + private String applicationName; +} diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/EnvironmentController.java b/alfa-service/src/main/java/de/ozgcloud/alfa/EnvironmentController.java index fbd8861943a56e85bd4127e32d351a4318c6a5a1..b2c9bd3c1ac957ff55037513a7488e3439bdc0b3 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/EnvironmentController.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/EnvironmentController.java @@ -35,15 +35,15 @@ import de.ozgcloud.alfa.vorgang.VorgangProcessorProperties; @RestController @RequestMapping(EnvironmentController.BASE_PATH) public class EnvironmentController { - - static final String BASE_PATH = "/api/environment"; + + static final String BASE_PATH = "/api/environment"; // NOSONAR @Autowired private OAuth2Properties oAuth2Properties; @Autowired private GoofyProperties goofyProperties; - + @Autowired private VorgangProcessorProperties vorgangProcessorProperties; 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 ca2989926949cd23d9c585310a4706a68576acab..7ef9c3b7cfb26ff17cb357db4a76920364aae5f2 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 @@ -15,6 +15,7 @@ import de.itvsh.ozg.pluto.statistic.GrpcVorgangStatisticQuery.Operator; import de.itvsh.ozg.pluto.statistic.GrpcVorgangStatisticRequest; import de.itvsh.ozg.pluto.statistic.GrpcVorgangStatisticResponse; import de.itvsh.ozg.pluto.statistic.StatisticServiceGrpc.StatisticServiceBlockingStub; +import de.ozgcloud.alfa.AlfaProperties; import de.ozgcloud.alfa.common.GrpcUtil; import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; import net.devh.boot.grpc.client.inject.GrpcClient; @@ -27,7 +28,7 @@ class StatisticRemoteService { static final String EXISTS_WIEDERVORLAGE_OVERDUE_RESULT_NAME = "existsWiedervorlageOverdue"; static final String STATUS_PATH = "Vorgang.status"; - static final String WIEDERVORLAGE_NEXT_FRIST_PATH = "ClientAttribute.Goofy.nextWiedervorlageFrist"; + static final String WIEDERVORLAGE_NEXT_FRIST_PATH_TEMPLATE = "ClientAttribute.%s.nextWiedervorlageFrist"; static final String OPERAND_TODAY_DATE = "today()"; @@ -35,6 +36,8 @@ class StatisticRemoteService { private StatisticServiceBlockingStub statisticServiceStub; @Autowired private StatisticMapper mapper; + @Autowired + private AlfaProperties alfaProperties; public Map<String, StatisticResult> getVorgaengeStatistics(List<VorgangStatus> countByVorgangStatus) { var grpcRequest = GrpcVorgangStatisticRequest.newBuilder() @@ -64,7 +67,7 @@ class StatisticRemoteService { GrpcVorgangStatisticQuery buildExistsWiedervorlageOverdueQuery() { return GrpcVorgangStatisticQuery.newBuilder() .setResultName(EXISTS_WIEDERVORLAGE_OVERDUE_RESULT_NAME) - .setPath(WIEDERVORLAGE_NEXT_FRIST_PATH) + .setPath(String.format(WIEDERVORLAGE_NEXT_FRIST_PATH_TEMPLATE, alfaProperties.getApplicationName())) .setGroupMethod(GroupMethod.EXISTS) .setOperator(Operator.LESS_THEN_OR_EQUAL_TO) .setOperandStringValue(OPERAND_TODAY_DATE) 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 1510fd62c4551445ae56d7fe8aebb3448a5a5f98..b868bf8f05d5ff708e6284556e3a80ec92ea5b4f 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 @@ -8,6 +8,7 @@ import java.util.Optional; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import de.ozgcloud.alfa.AlfaProperties; import de.ozgcloud.alfa.common.user.CurrentUserService; import de.ozgcloud.alfa.common.user.UserRole; import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; @@ -17,7 +18,7 @@ class StatisticService { // TODO sebo: dieser Code wird später gelöscht static final String COUNT_WIEDERVORLAGE_NEXT_FRIST_KEY = "countWiedervorlage"; - static final String COUNT_WIEDERVORLAGE_NEXT_FRIST = COUNT_WIEDERVORLAGE_NEXT_FRIST_KEY + ":ClientAttribute.Goofy.nextWiedervorlageFrist"; + static final String COUNT_WIEDERVORLAGE_NEXT_FRIST_TEMPLATE = COUNT_WIEDERVORLAGE_NEXT_FRIST_KEY + ":ClientAttribute.%s.nextWiedervorlageFrist"; // END: code löschen static final List<VorgangStatus> VORGAENGE_STATUS_COUNT_VERWALTUNG_USER = List.of(VorgangStatus.NEU, VorgangStatus.ANGENOMMEN, @@ -31,6 +32,9 @@ class StatisticService { @Autowired private CurrentUserService currentUserService; + @Autowired + private AlfaProperties alfaProperties; + public Statistic getVorgaengeStatistic() { var response = remoteService.getVorgaengeStatistics(List.of(VorgangStatus.ZU_LOESCHEN)); return buildGetVorgaengeStatisticResult(response); @@ -81,7 +85,7 @@ class StatisticService { } List<String> createCountByPathList() { - return List.of(COUNT_WIEDERVORLAGE_NEXT_FRIST); + return List.of(String.format(COUNT_WIEDERVORLAGE_NEXT_FRIST_TEMPLATE, alfaProperties.getApplicationName())); } Statistic buildStatistic(CountVorgangResponse response) { 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 new file mode 100644 index 0000000000000000000000000000000000000000..a7df744e48b0d94e6be8253edcc284d41a3a4415 --- /dev/null +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/GrpcVorgangStatisticQueryTestFactory.java @@ -0,0 +1,14 @@ +package de.ozgcloud.alfa.statistic; + +import de.itvsh.ozg.pluto.statistic.GrpcVorgangStatisticQuery; + +public class GrpcVorgangStatisticQueryTestFactory { + + public static GrpcVorgangStatisticQuery create() { + return createBuilder().build(); + } + + public static GrpcVorgangStatisticQuery.Builder createBuilder() { + return GrpcVorgangStatisticQuery.newBuilder(); + } +} diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/GrpcVorgangStatisticResponseTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/GrpcVorgangStatisticResponseTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..c9fa2a9d833d538a7886bd2103c8172d6415d30c --- /dev/null +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/statistic/GrpcVorgangStatisticResponseTestFactory.java @@ -0,0 +1,14 @@ +package de.ozgcloud.alfa.statistic; + +import de.itvsh.ozg.pluto.statistic.GrpcVorgangStatisticResponse; + +public class GrpcVorgangStatisticResponseTestFactory { + + public static GrpcVorgangStatisticResponse create() { + return createBuilder().build(); + } + + public static GrpcVorgangStatisticResponse.Builder createBuilder() { + return GrpcVorgangStatisticResponse.newBuilder(); + } +} 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 37fc3c3d6716861fc6755654b4f904bc3c33a2c6..af1809e9c527e83206416a82e1f4a805eb738867 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 @@ -19,13 +19,15 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; +import com.thedeanda.lorem.LoremIpsum; + import de.itvsh.ozg.pluto.statistic.GrpcVorgangCountResponse; -import de.itvsh.ozg.pluto.statistic.GrpcVorgangStatisticQuery; import de.itvsh.ozg.pluto.statistic.GrpcVorgangStatisticQuery.GroupMethod; import de.itvsh.ozg.pluto.statistic.GrpcVorgangStatisticQuery.Operator; import de.itvsh.ozg.pluto.statistic.GrpcVorgangStatisticResponse; import de.itvsh.ozg.pluto.statistic.GrpcVorgangStatisticResult; import de.itvsh.ozg.pluto.statistic.StatisticServiceGrpc.StatisticServiceBlockingStub; +import de.ozgcloud.alfa.AlfaProperties; import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; class StatisticRemoteServiceTest { @@ -37,32 +39,55 @@ class StatisticRemoteServiceTest { private StatisticServiceBlockingStub serviceStub; @Mock private StatisticMapper mapper; + @Mock + private AlfaProperties alfaProperties; private static final List<VorgangStatus> STATUSES_TO_COUNT = List.of(VorgangStatus.NEU, VorgangStatus.ANGENOMMEN, VorgangStatus.IN_BEARBEITUNG, VorgangStatus.BESCHIEDEN, VorgangStatus.ABGESCHLOSSEN, VorgangStatus.VERWORFEN, VorgangStatus.ZU_LOESCHEN); + @DisplayName("Build count by vorgang status query") @Nested class TestBuildCountByVorgangStatusQuery { @ParameterizedTest @EnumSource(mode = Mode.EXCLUDE, names = "WEITERGELEITET") - void shouldBuildQuery(VorgangStatus vorgangStatus) { + void shouldContainResultName(VorgangStatus vorgangStatus) { + var query = service.buildCountByVorgangStatusQuery(vorgangStatus); + + assertThat(query.getResultName()).isEqualTo(String.format(COUNT_VORGANG_STATUS_RESULT_NAME_FORMAT, vorgangStatus.name())); + } + + @ParameterizedTest + @EnumSource(mode = Mode.EXCLUDE, names = "WEITERGELEITET") + void shouldContainPath(VorgangStatus vorgangStatus) { + var query = service.buildCountByVorgangStatusQuery(vorgangStatus); + + assertThat(query.getPath()).isEqualTo(STATUS_PATH); + } + + @ParameterizedTest + @EnumSource(mode = Mode.EXCLUDE, names = "WEITERGELEITET") + void shouldContainGroupMethod(VorgangStatus vorgangStatus) { var query = service.buildCountByVorgangStatusQuery(vorgangStatus); - assertThat(query) - .extracting( - GrpcVorgangStatisticQuery::getResultName, - GrpcVorgangStatisticQuery::getPath, - GrpcVorgangStatisticQuery::getOperator, - GrpcVorgangStatisticQuery::getOperandStringValue, - GrpcVorgangStatisticQuery::getGroupMethod) - .containsExactly( - String.format(COUNT_VORGANG_STATUS_RESULT_NAME_FORMAT, vorgangStatus.name()), - STATUS_PATH, - Operator.EQUAL, - vorgangStatus.name(), - GroupMethod.COUNT); + assertThat(query.getGroupMethod()).isEqualTo(GroupMethod.COUNT); + } + + @ParameterizedTest + @EnumSource(mode = Mode.EXCLUDE, names = "WEITERGELEITET") + void shouldContainOperator(VorgangStatus vorgangStatus) { + var query = service.buildCountByVorgangStatusQuery(vorgangStatus); + + assertThat(query.getOperator()).isEqualTo(Operator.EQUAL); + } + + @ParameterizedTest + @EnumSource(mode = Mode.EXCLUDE, names = "WEITERGELEITET") + void shouldContainOperandStringValue(VorgangStatus vorgangStatus) { + var query = service.buildCountByVorgangStatusQuery(vorgangStatus); + + assertThat(query.getOperandStringValue()).isEqualTo(vorgangStatus.name()); } } @@ -81,35 +106,67 @@ class StatisticRemoteServiceTest { @Nested class TestBuildExistsWiedervorlageOverdueQuery { + private final String applicationName = LoremIpsum.getInstance().getFirstName(); + + @BeforeEach + void init() { + when(alfaProperties.getApplicationName()).thenReturn(applicationName); + } + + @Test + void shouldContainResultName() { + var query = service.buildExistsWiedervorlageOverdueQuery(); + + assertThat(query.getResultName()).isEqualTo(StatisticRemoteService.EXISTS_WIEDERVORLAGE_OVERDUE_RESULT_NAME); + } + @Test - void shouldBuildQuery() { + void shouldContainPath() { var query = service.buildExistsWiedervorlageOverdueQuery(); - assertThat(query) - .extracting( - GrpcVorgangStatisticQuery::getResultName, - GrpcVorgangStatisticQuery::getPath, - GrpcVorgangStatisticQuery::getOperator, - GrpcVorgangStatisticQuery::getGroupMethod, - GrpcVorgangStatisticQuery::getOperandStringValue) - .contains( - EXISTS_WIEDERVORLAGE_OVERDUE_RESULT_NAME, - WIEDERVORLAGE_NEXT_FRIST_PATH, - Operator.LESS_THEN_OR_EQUAL_TO, - GroupMethod.EXISTS, - OPERAND_TODAY_DATE); + assertThat(query.getPath()).isEqualTo(String.format(StatisticRemoteService.WIEDERVORLAGE_NEXT_FRIST_PATH_TEMPLATE, applicationName)); + } + + @Test + void shouldContainGroupMethod() { + var query = service.buildExistsWiedervorlageOverdueQuery(); + + assertThat(query.getGroupMethod()).isEqualTo(GroupMethod.EXISTS); + } + + @Test + void shouldContainOperator() { + var query = service.buildExistsWiedervorlageOverdueQuery(); + + assertThat(query.getOperator()).isEqualTo(Operator.LESS_THEN_OR_EQUAL_TO); + } + + @Test + void shouldContainOperandStringValue() { + var query = service.buildExistsWiedervorlageOverdueQuery(); + + assertThat(query.getOperandStringValue()).isEqualTo(StatisticRemoteService.OPERAND_TODAY_DATE); + } + + @Test + void shouldCallPropertiesToGetClientName() { + service.buildExistsWiedervorlageOverdueQuery(); + + verify(alfaProperties).getApplicationName(); } } + @DisplayName("Get vorgaenge statistic") @Nested class TestGetVorgaengeStatistics { - private GrpcVorgangStatisticResponse response; + private final GrpcVorgangStatisticResponse response = GrpcVorgangStatisticResponseTestFactory.create();; @BeforeEach void beforeEach() { - response = GrpcVorgangStatisticResponse.newBuilder().build(); when(serviceStub.getVorgangStatistic(any())).thenReturn(response); + + doReturn(GrpcVorgangStatisticQueryTestFactory.create()).when(service).buildExistsWiedervorlageOverdueQuery(); } @Test 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 12882febfa0e5a20c466e29a7e2894b861434fbc..58326fa8570d3d65e80125785c0cb862579c22ee 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 @@ -3,6 +3,7 @@ package de.ozgcloud.alfa.statistic; import static de.ozgcloud.alfa.statistic.StatisticRemoteService.*; import static de.ozgcloud.alfa.statistic.StatisticService.*; import static org.assertj.core.api.Assertions.*; +import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; import java.util.Collections; @@ -18,6 +19,9 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; +import com.thedeanda.lorem.LoremIpsum; + +import de.ozgcloud.alfa.AlfaProperties; import de.ozgcloud.alfa.common.user.CurrentUserService; import de.ozgcloud.alfa.common.user.UserRole; import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus; @@ -31,6 +35,8 @@ class StatisticServiceTest { private StatisticRemoteService remoteService; @Mock private CurrentUserService currentUserService; + @Mock + private AlfaProperties alfaProperties; @Nested class TestBuildGetVorgaengeStatisticResult { @@ -224,25 +230,28 @@ class StatisticServiceTest { } // TODO sebo: später löschen - @DisplayName("Get statistic") + @DisplayName("Count vorgang") @Nested - class TestGetStatistic { + class TestCountVorgang { private static final int WIEDERVORLAGE_COUNT = 8; private CountVorgangResponse response = CountVorgangResponseTestFactory.createBuilder() .pathCountResult(Map.of(StatisticService.COUNT_WIEDERVORLAGE_NEXT_FRIST_KEY, WIEDERVORLAGE_COUNT)).build(); + private final String applicationName = LoremIpsum.getInstance().getFirstName(); @Test void shouldCallRemoteService() { + when(alfaProperties.getApplicationName()).thenReturn(applicationName); when(remoteService.countVorgang(any())).thenReturn(response); service.countVorgang(); - verify(remoteService).countVorgang(List.of(StatisticService.COUNT_WIEDERVORLAGE_NEXT_FRIST)); + verify(remoteService).countVorgang(List.of(String.format(StatisticService.COUNT_WIEDERVORLAGE_NEXT_FRIST_TEMPLATE, applicationName))); } @Test void shouldBuildStatistic() { + when(alfaProperties.getApplicationName()).thenReturn(applicationName); when(remoteService.countVorgang(any())).thenReturn(response); service.countVorgang(); diff --git a/alfa-service/src/test/resources/application.yml b/alfa-service/src/test/resources/application.yml index 90b792d47554dae05fae77dd26ed00e58bf90ed2..6755b16a49c3ab763d02289cd904fddef4b58f6a 100644 --- a/alfa-service/src/test/resources/application.yml +++ b/alfa-service/src/test/resources/application.yml @@ -22,8 +22,6 @@ spring: mvc: pathmatch: matching-strategy: ant-path-matcher - application: - name: Goofy jackson: deserialization: 'ADJUST_DATES_TO_CONTEXT_TIME_ZONE': false diff --git a/goofy-client/apps/alfa/src/app/app.component.spec.ts b/goofy-client/apps/alfa/src/app/app.component.spec.ts index 28083558118311299471deca65596bf71b6b0de4..03072f098f89bfaa5da2227b736754f6f5911f2f 100644 --- a/goofy-client/apps/alfa/src/app/app.component.spec.ts +++ b/goofy-client/apps/alfa/src/app/app.component.spec.ts @@ -106,10 +106,6 @@ describe('AppComponent', () => { expect(component).toBeTruthy(); }); - it(`should have "goofy" as title`, () => { - expect(component.title).toEqual('goofy'); - }); - it(`should call iconService registerIcons`, () => { expect(iconService.registerIcons).toHaveBeenCalled(); }); diff --git a/goofy-client/apps/alfa/src/app/app.component.ts b/goofy-client/apps/alfa/src/app/app.component.ts index a7281cd0edccb0a34da07e77cf7cba1b414d6fe6..0596fd0884a931e357e4d289a3158e9f8173fcf2 100644 --- a/goofy-client/apps/alfa/src/app/app.component.ts +++ b/goofy-client/apps/alfa/src/app/app.component.ts @@ -41,8 +41,6 @@ import { Observable, Subscription, filter, tap } from 'rxjs'; }) export class AppComponent implements OnInit { - readonly title: string = 'goofy'; - public apiRoot$: Observable<StateResource<ApiRootResource>>; private oAuthEventSubscription: Subscription; @@ -51,7 +49,6 @@ export class AppComponent implements OnInit { private apiRootFacade: ApiRootFacade, private iconService: IconService, private oAuthService: OAuthService, - private titleService: Title, private navigationService: NavigationService ) { this.iconService.registerIcons(); @@ -124,10 +121,5 @@ export class AppComponent implements OnInit { }) ); } - - //TOCHECK Wird die genutzt? - public setTitle(newTitle: string) { - this.titleService.setTitle(newTitle); - } } diff --git a/goofy-server/src/main/resources/application.yml b/goofy-server/src/main/resources/application.yml index 5837d4eb11e997f55fb06b8012b27760ded8017b..ba93adc361269a881e2cabe739047a48233ca434 100644 --- a/goofy-server/src/main/resources/application.yml +++ b/goofy-server/src/main/resources/application.yml @@ -10,7 +10,7 @@ spring: pathmatch: matching-strategy: ant-path-matcher application: - name: Goofy + name: Alfa jackson: deserialization: 'ADJUST_DATES_TO_CONTEXT_TIME_ZONE': false diff --git a/goofy-server/src/main/resources/banner.txt b/goofy-server/src/main/resources/banner.txt index 13e3273b90490767f580107cfd3fec70dcb2ba0d..e95c531227e0ec959fd83f59e7031a9bb2b1b8d3 100644 --- a/goofy-server/src/main/resources/banner.txt +++ b/goofy-server/src/main/resources/banner.txt @@ -1,6 +1,7 @@ - ___ ___ ___ ___ __ __ - / __| / _ \ / _ \ | __|\ \ / / -| (_ || (_) || (_) || _| \ / - \___| \___/ \___/ |_| |_| -================================ + ______ __ ______ ______ +/\ __ \ /\ \ /\ ___\ /\ __ \ +\ \ __ \ \ \ \____ \ \ __\ \ \ __ \ + \ \_\ \_\ \ \_____\ \ \_\ \ \_\ \_\ + \/_/\/_/ \/_____/ \/_/ \/_/\/_/ +================================================= ${spring-boot.version} ${application.version}