diff --git a/src/main/java/de/ozgcloud/processor/processor/CommandProcessedEvent.java b/src/main/java/de/ozgcloud/processor/processor/CommandProcessedEvent.java new file mode 100644 index 0000000000000000000000000000000000000000..1a6a2bd49a9cca3729dc29c32c31cfa6418de164 --- /dev/null +++ b/src/main/java/de/ozgcloud/processor/processor/CommandProcessedEvent.java @@ -0,0 +1,13 @@ +package de.ozgcloud.processor.processor; + +import de.itvsh.ozg.pluto.command.Command; +import de.itvsh.ozg.pluto.command.CommandExecutedEvent; + +class CommandProcessedEvent extends CommandExecutedEvent { + + private static final long serialVersionUID = 1L; + + public CommandProcessedEvent(Command command) { + super(command); + } +} diff --git a/src/main/java/de/ozgcloud/processor/processor/ProcessorEventListener.java b/src/main/java/de/ozgcloud/processor/processor/ProcessorEventListener.java index 34a8f1c8875dfa01c2a3033ae84e5f86f6d20561..a5056754a9c4164f4e86bca353aea208fdb9f259 100644 --- a/src/main/java/de/ozgcloud/processor/processor/ProcessorEventListener.java +++ b/src/main/java/de/ozgcloud/processor/processor/ProcessorEventListener.java @@ -62,9 +62,10 @@ class ProcessorEventListener { public void onCommandExecuteProcessor(CommandCreatedEvent event) { var vorgang = getVorgang(event.getSource().getVorgangId()); processorService.processVorgang(vorgang, getProcessorNames(event.getSource())).forEach(processorResultMono -> processorResultMono - .doOnError(cause -> handleCommandError(cause, event.getSource().getId())).onErrorComplete() + .doOnError(cause -> publishCommandFailedEvent(cause, event.getSource().getId())).onErrorComplete() .map(result -> addVorgangId(result, event.getSource().getVorgangId())) .subscribe(resultService::processResult)); + publishCommandProcessedEvent(event.getSource()); } private Vorgang getVorgang(String vorgangId) { @@ -80,7 +81,11 @@ class ProcessorEventListener { return result.toBuilder().vorgangId(VorgangId.from(vorgangId)).build(); } - private void handleCommandError(Throwable e, String commandId) { + private void publishCommandFailedEvent(Throwable e, String commandId) { publisher.publishEvent(new CommandFailedEvent(commandId, e.getMessage())); } + + private void publishCommandProcessedEvent(Command command) { + publisher.publishEvent(new CommandProcessedEvent(command)); + } } \ No newline at end of file diff --git a/src/test/java/de/ozgcloud/processor/processor/ProcessorEventListenerTest.java b/src/test/java/de/ozgcloud/processor/processor/ProcessorEventListenerTest.java index 4e8c098605d8314b0103c0a637fa2fb09fcb11d4..47553f7bc314796602317b36eafe69dcaebc5fee 100644 --- a/src/test/java/de/ozgcloud/processor/processor/ProcessorEventListenerTest.java +++ b/src/test/java/de/ozgcloud/processor/processor/ProcessorEventListenerTest.java @@ -10,6 +10,7 @@ import java.util.Map; import java.util.stream.Stream; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -126,6 +127,8 @@ class ProcessorEventListenerTest { private Throwable exception; @Captor private ArgumentCaptor<CommandFailedEvent> commandFailedEventCaptor; + @Captor + private ArgumentCaptor<CommandProcessedEvent> commandSuccessEventCaptor; private final Vorgang vorgang = VorgangTestFactory.create(); private final Collection<String> processorNames = List.of("dummy1", "dummy2"); @@ -153,7 +156,7 @@ class ProcessorEventListenerTest { @Test @SneakyThrows - void shouldHandleCommandError() { + void shouldPublishCommandFailedEvent() { var errorMsg = "ErrorMsg"; when(exception.getMessage()).thenReturn(errorMsg); when(processorService.processVorgang(any(), any())).thenReturn(Stream.of(Mono.error(exception))); @@ -165,5 +168,18 @@ class ProcessorEventListenerTest { assertThat(commandFailedEventCaptor.getValue().getSource()).isEqualTo(CommandTestFactory.ID); assertThat(commandFailedEventCaptor.getValue().getErrorMessage()).isEqualTo(errorMsg); } + + @Disabled + @Test + @SneakyThrows + void shouldPublishCommandProcessedEvent() { + when(processorService.processVorgang(any(), any())).thenReturn(Stream.empty()); + + vorgangEventListener.onCommandExecuteProcessor(event); + + verify(publisher).publishEvent(commandSuccessEventCaptor.capture()); + assertThat(commandFailedEventCaptor.getValue().getClass()).isEqualTo(CommandProcessedEvent.class); + assertThat(commandFailedEventCaptor.getValue().getSource()).isEqualTo(command); + } } } \ No newline at end of file