From 1a1cbc457874d75784fb0fb328becc7f515c8ccd Mon Sep 17 00:00:00 2001 From: Tobias Bruns <kontakt@tobias-bruns.de> Date: Wed, 12 Feb 2025 15:09:17 +0100 Subject: [PATCH] OZG-7689 fix bean management --- pom.xml | 12 +- .../command/CommandRemoteService.java | 4 +- .../processor/command/CommandService.java | 2 +- ...ava => ProcessorManagerCommandMapper.java} | 2 +- .../ozgcloud/processor/ProcessorITCase.java | 130 ++++++++++++++++++ .../command/CommandRemoteServiceTest.java | 2 +- 6 files changed, 141 insertions(+), 11 deletions(-) rename src/main/java/de/ozgcloud/processor/command/{CommandMapper.java => ProcessorManagerCommandMapper.java} (91%) create mode 100644 src/test/java/de/ozgcloud/processor/ProcessorITCase.java diff --git a/pom.xml b/pom.xml index 311eeb0..82105bb 100644 --- a/pom.xml +++ b/pom.xml @@ -89,6 +89,12 @@ <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-jsr310</artifactId> </dependency> + + <!-- commons --> + <dependency> + <groupId>org.apache.commons</groupId> + <artifactId>commons-lang3</artifactId> + </dependency> <!-- test --> <dependency> @@ -136,12 +142,6 @@ <scope>test</scope> </dependency> - <!-- commons --> - <dependency> - <groupId>org.apache.commons</groupId> - <artifactId>commons-lang3</artifactId> - </dependency> - </dependencies> <build> diff --git a/src/main/java/de/ozgcloud/processor/command/CommandRemoteService.java b/src/main/java/de/ozgcloud/processor/command/CommandRemoteService.java index 7f07dc8..6daf930 100644 --- a/src/main/java/de/ozgcloud/processor/command/CommandRemoteService.java +++ b/src/main/java/de/ozgcloud/processor/command/CommandRemoteService.java @@ -7,13 +7,13 @@ import de.ozgcloud.vorgang.grpc.command.GrpcGetCommandRequest; import lombok.RequiredArgsConstructor; import net.devh.boot.grpc.client.inject.GrpcClient; -@Service +@Service("processorManagerCommandService") @RequiredArgsConstructor class CommandRemoteService { @GrpcClient("command-manager") private final CommandServiceBlockingStub commandServiceStub; - private final CommandMapper mapper; + private final ProcessorManagerCommandMapper mapper; public Command getCommand(String id) { var grpcCommand = commandServiceStub.getCommand(buildRequest(id)); diff --git a/src/main/java/de/ozgcloud/processor/command/CommandService.java b/src/main/java/de/ozgcloud/processor/command/CommandService.java index 4a3c6c6..61f293d 100644 --- a/src/main/java/de/ozgcloud/processor/command/CommandService.java +++ b/src/main/java/de/ozgcloud/processor/command/CommandService.java @@ -4,7 +4,7 @@ import org.springframework.stereotype.Service; import lombok.RequiredArgsConstructor; -@Service +@Service("processorCommandService") @RequiredArgsConstructor public class CommandService { diff --git a/src/main/java/de/ozgcloud/processor/command/CommandMapper.java b/src/main/java/de/ozgcloud/processor/command/ProcessorManagerCommandMapper.java similarity index 91% rename from src/main/java/de/ozgcloud/processor/command/CommandMapper.java rename to src/main/java/de/ozgcloud/processor/command/ProcessorManagerCommandMapper.java index d3084d8..10021f0 100644 --- a/src/main/java/de/ozgcloud/processor/command/CommandMapper.java +++ b/src/main/java/de/ozgcloud/processor/command/ProcessorManagerCommandMapper.java @@ -9,7 +9,7 @@ import de.ozgcloud.processor.vorgang.VorgangId; import de.ozgcloud.vorgang.grpc.command.GrpcCommand; @Mapper -interface CommandMapper { +interface ProcessorManagerCommandMapper { @Mapping(target = "order", source = "orderString") Command fromGrpc(GrpcCommand command); diff --git a/src/test/java/de/ozgcloud/processor/ProcessorITCase.java b/src/test/java/de/ozgcloud/processor/ProcessorITCase.java new file mode 100644 index 0000000..9116dae --- /dev/null +++ b/src/test/java/de/ozgcloud/processor/ProcessorITCase.java @@ -0,0 +1,130 @@ +/* + * Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.processor; + +import static org.awaitility.Awaitility.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import java.util.concurrent.TimeUnit; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.bean.override.mockito.MockitoBean; + +import de.ozgcloud.command.VorgangCreatedEvent; +import de.ozgcloud.common.test.ITCase; +import de.ozgcloud.processor.processor.ProcessorService; +import de.ozgcloud.processor.vorgang.Vorgang; +import de.ozgcloud.processor.vorgang.VorgangId; +import de.ozgcloud.processor.vorgang.VorgangService; +import de.ozgcloud.processor.vorgang.VorgangTestFactory; + +//TODO: +// - rebuild it as api-test +// - build it as ProcessorManager-local test +// ozg api lib mit in-process server unterstützen: https://stackoverflow.com/questions/71059894/does-grpc-have-a-channel-that-can-be-used-for-testing + +@SpringBootTest(properties = { + "ozgcloud.processors.0.name=test", + "ozgcloud.processors.0.address=http://localhost:8090/testprocessor", + "ozgcloud.processors.0.forms.0.formEngineName=testFormEngine", + "ozgcloud.processors.0.forms.0.formId=testForm", + "grpc.server.in-process-name=test", + "ozgcloud.command-manager.address=in-process:test", +//}, classes = { VorgangManagerServerApplication.class }) +}, classes = { ProcessorTestApplication.class }) +//@WithMockCustomUser +@ITCase +@DirtiesContext +@Disabled +class ProcessorITCase { + + @Autowired + private ApplicationEventPublisher publisher; + + @MockitoBean + private VorgangService processorVorgangService; + +// @MockitoBean +// private PostfachService postfachService; +// @MockitoBean +// private de.ozgcloud.notification.vorgang.VorgangService notificationService; +// @MockitoBean +// private UserNotificationEventListener userNotificationEventListener; +// +// @MockitoBean +// private CommandService commandService; + @MockitoBean + private ProcessorService processorService; + +// @Captor +// private ArgumentCaptor<CreateCommandRequest> requestCaptor; + + @BeforeEach + void init() { + when(processorVorgangService.getVorgang(any())).thenReturn(buildVorgang()); + +// when(notificationService.getVorgang(any())).thenReturn(de.ozgcloud.notification.vorgang.Vorgang.builder().build()); + + when(processorService.processVorgang(any(), anyString())).thenThrow(RuntimeException.class); + } + +// @BeforeEach +// void setupCommandService() { +// var commandBuilder = PersistedCommand.builder().id("42").status(CommandStatus.PENDING).createdAt(ZonedDateTime.now()); +// +// when(commandService.createCommand(any())).thenReturn(commandBuilder.build()); +// when(commandService.findById("42")) +// .thenReturn(Optional.of(commandBuilder.status(CommandStatus.FINISHED).finishedAt(ZonedDateTime.now()).build())); +// } + + @Test + void triggerProcessorOnNewVorgang() { + publisher.publishEvent(new VorgangCreatedEvent(VorgangTestFactory.ID.toString())); + + await().atMost(5, TimeUnit.SECONDS).untilAsserted(() -> { + verify(processorVorgangService).getVorgang(any()); +// verify(commandService).createCommand(requestCaptor.capture()); + }); +// +// var request = requestCaptor.getValue(); +// @SuppressWarnings("unchecked") +// Map<String, Object> item = (Map<String, Object>) request.getBodyObject().get("item"); +// assertThat(item).containsEntry("text", "Es ist eine Fehler bei der Verarbeitung des Vorganges aufgetreten"); + } + + private Vorgang buildVorgang() { + return Vorgang.builder() + .id(VorgangId.from(de.ozgcloud.processor.vorgang.VorgangTestFactory.ID)) + .formEngineName("testFormEngine") + .formId("testForm") + .build(); + } +} diff --git a/src/test/java/de/ozgcloud/processor/command/CommandRemoteServiceTest.java b/src/test/java/de/ozgcloud/processor/command/CommandRemoteServiceTest.java index 57c2a3c..290be1f 100644 --- a/src/test/java/de/ozgcloud/processor/command/CommandRemoteServiceTest.java +++ b/src/test/java/de/ozgcloud/processor/command/CommandRemoteServiceTest.java @@ -23,7 +23,7 @@ class CommandRemoteServiceTest { @Mock private CommandServiceBlockingStub stub; @Mock - private CommandMapper mapper; + private ProcessorManagerCommandMapper mapper; @Nested class TestGetCommand { -- GitLab