diff --git a/lombok.config b/lombok.config index e955a6b5b3b394bbae6458ecf7ac76f3b1b0f446..89d6230792835a66972d94928d8053e014e4fd16 100644 --- a/lombok.config +++ b/lombok.config @@ -28,4 +28,5 @@ lombok.log.log4j.flagUsage = ERROR lombok.data.flagUsage = ERROR lombok.nonNull.exceptionType = IllegalArgumentException lombok.addLombokGeneratedAnnotation = true -lombok.copyableAnnotations += org.springframework.beans.factory.annotation.Qualifier \ No newline at end of file +lombok.copyableAnnotations += org.springframework.beans.factory.annotation.Qualifier +lombok.copyableAnnotations += net.devh.boot.grpc.client.inject.GrpcClient \ No newline at end of file diff --git a/pom.xml b/pom.xml index bb7d3fc760eb515e4fa7e018ed2d18407d981dd6..7ed47721fde52888abd872c85ff7e5349a8cb88e 100644 --- a/pom.xml +++ b/pom.xml @@ -43,7 +43,7 @@ <description>OZG-Cloud Processor Manager</description> <properties> - <vorgang-manager.version>2.17.0</vorgang-manager.version> + <vorgang-manager.version>2.22.0-SNAPSHOT</vorgang-manager.version> <api-lib.version>0.13.0</api-lib.version> <tyrus-standalone-client.version>2.2.0</tyrus-standalone-client.version> <okio.version>3.9.1</okio.version> diff --git a/src/main/java/de/ozgcloud/processor/command/Command.java b/src/main/java/de/ozgcloud/processor/command/Command.java new file mode 100644 index 0000000000000000000000000000000000000000..e517c170a8f9006deafe4e91d1afcbfe59d582d5 --- /dev/null +++ b/src/main/java/de/ozgcloud/processor/command/Command.java @@ -0,0 +1,15 @@ +package de.ozgcloud.processor.command; + +import de.ozgcloud.processor.vorgang.VorgangId; +import lombok.Builder; +import lombok.Getter; + +@Getter +@Builder +public class Command { + + private String id; + private String order; + + private VorgangId vorgangId; +} diff --git a/src/main/java/de/ozgcloud/processor/command/CommandMapper.java b/src/main/java/de/ozgcloud/processor/command/CommandMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..d3084d8109e4c56399ba9a7e3dc899bc19e727d2 --- /dev/null +++ b/src/main/java/de/ozgcloud/processor/command/CommandMapper.java @@ -0,0 +1,21 @@ +package de.ozgcloud.processor.command; + +import java.util.Objects; + +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; + +import de.ozgcloud.processor.vorgang.VorgangId; +import de.ozgcloud.vorgang.grpc.command.GrpcCommand; + +@Mapper +interface CommandMapper { + + @Mapping(target = "order", source = "orderString") + Command fromGrpc(GrpcCommand command); + + default VorgangId fromString(String idString) { + return Objects.nonNull(idString) ? VorgangId.from(idString) : null; + } + +} diff --git a/src/main/java/de/ozgcloud/processor/command/CommandRemoteService.java b/src/main/java/de/ozgcloud/processor/command/CommandRemoteService.java new file mode 100644 index 0000000000000000000000000000000000000000..7f07dc8574ac8396b2739c9dd0d4e4cc04e3d74e --- /dev/null +++ b/src/main/java/de/ozgcloud/processor/command/CommandRemoteService.java @@ -0,0 +1,27 @@ +package de.ozgcloud.processor.command; + +import org.springframework.stereotype.Service; + +import de.ozgcloud.vorgang.grpc.command.CommandServiceGrpc.CommandServiceBlockingStub; +import de.ozgcloud.vorgang.grpc.command.GrpcGetCommandRequest; +import lombok.RequiredArgsConstructor; +import net.devh.boot.grpc.client.inject.GrpcClient; + +@Service +@RequiredArgsConstructor +class CommandRemoteService { + + @GrpcClient("command-manager") + private final CommandServiceBlockingStub commandServiceStub; + private final CommandMapper mapper; + + public Command getCommand(String id) { + var grpcCommand = commandServiceStub.getCommand(buildRequest(id)); + + return mapper.fromGrpc(grpcCommand); + } + + private GrpcGetCommandRequest buildRequest(String id) { + return GrpcGetCommandRequest.newBuilder().setId(id).build(); + } +} diff --git a/src/main/java/de/ozgcloud/processor/command/CommandService.java b/src/main/java/de/ozgcloud/processor/command/CommandService.java new file mode 100644 index 0000000000000000000000000000000000000000..4a3c6c6cf745002ae1057cb7edda846fcf71f90f --- /dev/null +++ b/src/main/java/de/ozgcloud/processor/command/CommandService.java @@ -0,0 +1,16 @@ +package de.ozgcloud.processor.command; + +import org.springframework.stereotype.Service; + +import lombok.RequiredArgsConstructor; + +@Service +@RequiredArgsConstructor +public class CommandService { + + private final CommandRemoteService remoteService; + + public Command getCommand(String id) { + return remoteService.getCommand(id); + } +} diff --git a/src/main/java/de/ozgcloud/processor/event/EventService.java b/src/main/java/de/ozgcloud/processor/event/EventService.java new file mode 100644 index 0000000000000000000000000000000000000000..b13eb001772af0a636233c7aa613f03351123918 --- /dev/null +++ b/src/main/java/de/ozgcloud/processor/event/EventService.java @@ -0,0 +1,26 @@ +package de.ozgcloud.processor.event; + +import java.util.Map; +import java.util.Optional; + +import org.springframework.stereotype.Service; + +import de.ozgcloud.processor.command.Command; + +@Service +public class EventService { + + private static final Map<String, String> STATUS_ORDER_TO_EVENT = Map.of( + "VORGANG_ANNEHMEN", "ANGENOMMEN", + "VORGANG_VERWERFEN", "VERWORFEN", + "VORGANG_ZURUECKHOLEN", "ZURUECKGEHOLT", + "VORGANG_BEARBEITEN", "BEARBEITUNG_BEGONNEN", + "VORGANG_BESCHEIDEN", "BESCHIEDEN", + "VORGANG_ZURUECKSTELLEN", "ZURUECKGESTELLT", + "VORGANG_ABSCHLIESSEN", "ABGESCHLOSSEN", + "VORGANG_WIEDEREROEFFNEN", "WIEDEREROEFFNET"); + + public Optional<String> getEventNameFromOrder(Command command) { + return Optional.ofNullable(STATUS_ORDER_TO_EVENT.get(command.getOrder())); + } +} diff --git a/src/main/java/de/ozgcloud/processor/processor/ProcessorEventListener.java b/src/main/java/de/ozgcloud/processor/processor/ProcessorEventListener.java index 5f8ac51fe140c015f7592cced1d9e922dfce6fe7..a5e4dd0d7859ca578aacfc8e87b0ac140dd04809 100644 --- a/src/main/java/de/ozgcloud/processor/processor/ProcessorEventListener.java +++ b/src/main/java/de/ozgcloud/processor/processor/ProcessorEventListener.java @@ -39,11 +39,15 @@ import de.ozgcloud.command.Command; import de.ozgcloud.command.CommandCreatedEvent; import de.ozgcloud.command.CommandFailedEvent; import de.ozgcloud.command.VorgangCreatedEvent; +import de.ozgcloud.command.status.StatusChangedEvent; import de.ozgcloud.processor.ProcessorManagerConfiguration; +import de.ozgcloud.processor.command.CommandService; +import de.ozgcloud.processor.event.EventService; import de.ozgcloud.processor.result.ResultService; import de.ozgcloud.processor.vorgang.Vorgang; import de.ozgcloud.processor.vorgang.VorgangId; import de.ozgcloud.processor.vorgang.VorgangService; +import lombok.NonNull; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; import reactor.core.publisher.Mono; @@ -54,6 +58,15 @@ import reactor.core.publisher.Mono; @Log4j2 class ProcessorEventListener { + public static final String PROCESS_VORGANG_ORDER = "PROCESS_VORGANG"; + public static final Predicate<Command> IS_PROCESS_VORGANG_EVENT = command -> command.getOrder().equals(PROCESS_VORGANG_ORDER); + + static final String COMMAND_PROCESSOR_NAMES_KEY = "processorNames"; + + private static final String IS_PROCESS_VORGANG = "{T(de.ozgcloud.processor.processor.ProcessorEventListener).IS_PROCESS_VORGANG_EVENT.test(event.getSource())}"; + + private static final String EVENT_NAME_CREATED = "VORGANG_CREATED"; + @Qualifier(ProcessorManagerConfiguration.VORGANG_SERVICE_NAME) // NOSONAR private final VorgangService service; @@ -63,47 +76,58 @@ class ProcessorEventListener { @Qualifier(ProcessorManagerConfiguration.RESULT_SERVICE_NAME) // NOSONAR private final ResultService resultService; - private final ApplicationEventPublisher publisher; - - static final String PROCESS_VORGANG_ORDER = "PROCESS_VORGANG"; - private static final String IS_PROCESS_VORGANG = "{T(de.ozgcloud.processor.processor.ProcessorEventListener).IS_PROCESS_VORGANG_EVENT.test(event.getSource())}"; - public static final Predicate<Command> IS_PROCESS_VORGANG_EVENT = command -> command.getOrder().equals(PROCESS_VORGANG_ORDER); + private final CommandService commandService; + private final EventService eventService; - static final String COMMAND_PROCESSOR_NAMES_KEY = "processorNames"; + private final ApplicationEventPublisher publisher; @EventListener public void triggerNewVorgangProcessors(VorgangCreatedEvent event) { try { - var vorgang = getVorgang(event.getSource()); - processorService.processVorgang(vorgang).forEach(processorResultMono -> processorResultMono - .doOnError(cause -> handleError(cause, event.getSource())).onErrorComplete() - .map(result -> addVorgangId(result, event.getSource())) - .subscribe(resultService::processResult)); + processVorgang(VorgangId.from(event.getSource()), EVENT_NAME_CREATED); } catch (RuntimeException e) { - handleError(e, event.getSource()); + handleError(e, VorgangId.from(event.getSource())); } } + @EventListener + public void onStatusChange(StatusChangedEvent event) { + var command = commandService.getCommand(event.getSource()); + var eventName = eventService.getEventNameFromOrder(command); + + eventName.ifPresent(name -> processVorgang(command.getVorgangId(), name)); + } + + void processVorgang(@NonNull VorgangId vorgangId, String eventName) { + var vorgang = getVorgang(vorgangId); + + processorService.processVorgang(vorgang, eventName) + .forEach(processorResultMono -> processorResultMono.doOnError(cause -> handleError(cause, vorgangId)) + .onErrorComplete() + .map(result -> addVorgangId(result, vorgangId)) + .subscribe(resultService::processResult)); + } + @EventListener(condition = IS_PROCESS_VORGANG) public void onCommandProcessVorgang(CommandCreatedEvent event) { try { - var vorgang = getVorgang(event.getSource().getVorgangId()); + var vorgang = getVorgang(VorgangId.from(event.getSource().getVorgangId())); processorService.processVorgang(vorgang, getProcessorNames(event.getSource())) - .forEach(processorResultMono -> processResult(processorResultMono, event.getSource().getVorgangId())); + .forEach(processorResultMono -> processResult(processorResultMono, VorgangId.from(event.getSource().getVorgangId()))); publishCommandProcessedEvent(event.getSource()); } catch (Exception e) { - handleError(e, event.getSource().getVorgangId()); + handleError(e, VorgangId.from(event.getSource().getVorgangId())); publishCommandFailedEvent(e.getCause(), event.getSource().getId()); } } - void processResult(Mono<ProcessorResult> processorResultMono, String vorgangId) { + void processResult(Mono<ProcessorResult> processorResultMono, VorgangId vorgangId) { var blockedResult = processorResultMono.map(result -> addVorgangId(result, vorgangId)).block(); resultService.processResult(blockedResult); } - private Vorgang getVorgang(String vorgangId) { - return service.getVorgang(VorgangId.from(vorgangId)); + private Vorgang getVorgang(VorgangId vorgangId) { + return service.getVorgang(vorgangId); } @SuppressWarnings("unchecked") @@ -115,11 +139,11 @@ class ProcessorEventListener { return (Collection<String>) processorNames; } - private ProcessorResult addVorgangId(ProcessorResult result, String vorgangId) { - return result.toBuilder().vorgangId(VorgangId.from(vorgangId)).build(); + private ProcessorResult addVorgangId(ProcessorResult result, VorgangId vorgangId) { + return result.toBuilder().vorgangId(vorgangId).build(); } - private void handleError(Throwable cause, String vorgangId) { + private void handleError(Throwable cause, VorgangId vorgangId) { try { LOG.error("Error on procession Vorgang {} externally", vorgangId, cause); resultService.processError(cause, vorgangId); diff --git a/src/main/java/de/ozgcloud/processor/processor/ProcessorProperties.java b/src/main/java/de/ozgcloud/processor/processor/ProcessorProperties.java index 51fe4ae61b818c4320bf1aa144647dd000795ec8..6ca5dcf5c03b1930dc0c4c9151ed570a26d5106e 100644 --- a/src/main/java/de/ozgcloud/processor/processor/ProcessorProperties.java +++ b/src/main/java/de/ozgcloud/processor/processor/ProcessorProperties.java @@ -23,9 +23,11 @@ */ package de.ozgcloud.processor.processor; +import java.util.Collections; import java.util.List; import java.util.Set; +import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; import org.springframework.boot.context.properties.ConfigurationProperties; @@ -91,6 +93,11 @@ class ProcessorProperties { @AllArgsConstructor static class Form { + /** Events to trigger Processor for this Form */ + @NotEmpty + @Builder.Default + private Set<String> events = Collections.singleton("VORGANG_CREATED"); + @NotNull private String formEngineName; diff --git a/src/main/java/de/ozgcloud/processor/processor/ProcessorService.java b/src/main/java/de/ozgcloud/processor/processor/ProcessorService.java index ff4d2230dfaf2883bf85450f2c0ea065ad20e4a6..c318ef6bac7adce1ed5fe0227e2ec039179b887c 100644 --- a/src/main/java/de/ozgcloud/processor/processor/ProcessorService.java +++ b/src/main/java/de/ozgcloud/processor/processor/ProcessorService.java @@ -64,18 +64,20 @@ public class ProcessorService { private final WebClient webClient; - public Stream<Mono<ProcessorResult>> processVorgang(Vorgang vorgang) { - return getProcessors(vorgang).map(processor -> callProcessor(processor, vorgang)); + public Stream<Mono<ProcessorResult>> processVorgang(Vorgang vorgang, String event) { + return getProcessors(vorgang, event).map(processor -> callProcessor(processor, vorgang)); } - Stream<Processor> getProcessors(Vorgang vorgang) { - return properties.getProcessors().parallelStream().filter(processor -> hasFormEngineNameAndFormIds(processor.getForms(), vorgang)); + Stream<Processor> getProcessors(Vorgang vorgang, String event) { + return properties.getProcessors().parallelStream() + .filter(processor -> hasFormEngineNameAndFormIds(processor.getForms(), vorgang, event)); } - boolean hasFormEngineNameAndFormIds(Collection<Form> forms, Vorgang vorgang) { + boolean hasFormEngineNameAndFormIds(Collection<Form> forms, Vorgang vorgang, String event) { return Optional.ofNullable(forms).orElse(Collections.emptySet()).stream() .filter(form -> StringUtils.equals(form.getFormEngineName(), vorgang.getFormEngineName())) - .anyMatch(form -> StringUtils.equals(form.getFormId(), vorgang.getFormId())); + .filter(form -> StringUtils.equals(form.getFormId(), vorgang.getFormId())) + .anyMatch(form -> form.getEvents().contains(event)); } public Stream<Mono<ProcessorResult>> processVorgang(Vorgang vorgang, Collection<String> processorNames) { diff --git a/src/main/java/de/ozgcloud/processor/result/AktennotizFactory.java b/src/main/java/de/ozgcloud/processor/result/AktennotizFactory.java index 5083d57cb9ac80fc9756e49c37f46fefbc570ce9..6db10a803f40301eb344db18da27fa3ab0f35c92 100644 --- a/src/main/java/de/ozgcloud/processor/result/AktennotizFactory.java +++ b/src/main/java/de/ozgcloud/processor/result/AktennotizFactory.java @@ -27,6 +27,7 @@ import org.springframework.stereotype.Component; import de.ozgcloud.processor.ProcessorManagerConfiguration; import de.ozgcloud.processor.processor.ProcessorResult; +import de.ozgcloud.processor.vorgang.VorgangId; @Component(ProcessorManagerConfiguration.AKTENNOTIZ_FACTORY_NAME) // NOSONAR public class AktennotizFactory { @@ -46,15 +47,15 @@ public class AktennotizFactory { .build(); } - public Aktennotiz createErrorAktennotiz(String vorgangId, String processorName, String exceptionId) { + public Aktennotiz createErrorAktennotiz(VorgangId vorgangId, String processorName, String exceptionId) { return createErrorAktennotizBuilder(vorgangId) .text(buildErrorText(processorName, exceptionId)) .build(); } - public Aktennotiz.AktennotizBuilder createErrorAktennotizBuilder(String vorgangId) { + public Aktennotiz.AktennotizBuilder createErrorAktennotizBuilder(VorgangId vorgangId) { return Aktennotiz.builder() - .vorgangId(vorgangId) + .vorgangId(vorgangId.toString()) .severity(Severity.ERROR) .headline("Fehler"); } diff --git a/src/main/java/de/ozgcloud/processor/result/ResultService.java b/src/main/java/de/ozgcloud/processor/result/ResultService.java index 9fdc0b84b92d294f6b63fd7b597e7aafe942426e..3e041010602c5e74f09832185000a515a4f53a97 100644 --- a/src/main/java/de/ozgcloud/processor/result/ResultService.java +++ b/src/main/java/de/ozgcloud/processor/result/ResultService.java @@ -33,6 +33,7 @@ import de.ozgcloud.apilib.alfa.AlfaService; import de.ozgcloud.apilib.vorgang.OzgCloudVorgangIdMapper; import de.ozgcloud.processor.ProcessorManagerConfiguration; import de.ozgcloud.processor.processor.ProcessorResult; +import de.ozgcloud.processor.vorgang.VorgangId; import lombok.RequiredArgsConstructor; @Service(ProcessorManagerConfiguration.RESULT_SERVICE_NAME) // NOSONAR @@ -51,10 +52,11 @@ public class ResultService { } } - public void processError(Throwable cause, String vorgangId) { + public void processError(Throwable cause, VorgangId vorgangId) { if (cause instanceof ProcessorTechnicalException exception) { addAktenNotiz( - aktennotizFactory.createErrorAktennotiz(exception.getVorgangId(), exception.getProcessorName(), exception.getExceptionId())); + aktennotizFactory.createErrorAktennotiz(VorgangId.from(exception.getVorgangId()), exception.getProcessorName(), + exception.getExceptionId())); } else { addAktenNotiz(aktennotizFactory.createErrorAktennotizBuilder(vorgangId) .text("Es ist eine Fehler bei der Verarbeitung des Vorganges aufgetreten").build()); diff --git a/src/test/java/de/ozgcloud/processor/command/CommandRemoteServiceTest.java b/src/test/java/de/ozgcloud/processor/command/CommandRemoteServiceTest.java new file mode 100644 index 0000000000000000000000000000000000000000..57c2a3c243e4ccd67ab981b87a5a8d670d345738 --- /dev/null +++ b/src/test/java/de/ozgcloud/processor/command/CommandRemoteServiceTest.java @@ -0,0 +1,63 @@ +package de.ozgcloud.processor.command; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.mockito.ArgumentCaptor; +import org.mockito.Captor; +import org.mockito.InjectMocks; +import org.mockito.Mock; + +import de.ozgcloud.apilib.common.command.grpc.GrpcCommandTestFactory; +import de.ozgcloud.vorgang.grpc.command.CommandServiceGrpc.CommandServiceBlockingStub; +import de.ozgcloud.vorgang.grpc.command.GrpcGetCommandRequest; + +class CommandRemoteServiceTest { + + @InjectMocks + private CommandRemoteService service; + + @Mock + private CommandServiceBlockingStub stub; + @Mock + private CommandMapper mapper; + + @Nested + class TestGetCommand { + + @Captor + private ArgumentCaptor<GrpcGetCommandRequest> requestCaptor; + + @Test + void shouldCallStub() { + service.getCommand(CommandTestFactory.ID); + + verify(stub).getCommand(requestCaptor.capture()); + assertThat(requestCaptor.getValue()).extracting(GrpcGetCommandRequest::getId) + .isEqualTo(CommandTestFactory.ID); + } + + @Test + void shouldCallMapper() { + var grpcCommand = GrpcCommandTestFactory.create(); + when(stub.getCommand(any())).thenReturn(grpcCommand); + + service.getCommand(CommandTestFactory.ID); + + verify(mapper).fromGrpc(grpcCommand); + } + + @Test + void shouldReturnMappingResult() { + when(mapper.fromGrpc(any())).thenReturn(CommandTestFactory.create()); + + var result = service.getCommand(CommandTestFactory.ID); + + assertThat(result).usingRecursiveComparison().isEqualTo(CommandTestFactory.create()); + } + } + +} diff --git a/src/test/java/de/ozgcloud/processor/command/CommandServiceTest.java b/src/test/java/de/ozgcloud/processor/command/CommandServiceTest.java new file mode 100644 index 0000000000000000000000000000000000000000..75d3946f01939ee1668f8993922bcdb25dbc3011 --- /dev/null +++ b/src/test/java/de/ozgcloud/processor/command/CommandServiceTest.java @@ -0,0 +1,39 @@ +package de.ozgcloud.processor.command; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; + +class CommandServiceTest { + + @InjectMocks + private CommandService service; + @Mock + private CommandRemoteService remoteService; + + @Nested + class TestGetCommand { + @Test + void shouldCallRemoteService() { + service.getCommand(CommandTestFactory.ID); + + verify(remoteService).getCommand(CommandTestFactory.ID); + } + + @Test + void shouldReturnLoadedCommand() { + var expected = CommandTestFactory.create(); + when(remoteService.getCommand(any())).thenReturn(expected); + + var result = service.getCommand(CommandTestFactory.ID); + + assertThat(result).isSameAs(expected); + } + } + +} diff --git a/src/test/java/de/ozgcloud/processor/command/CommandTestFactory.java b/src/test/java/de/ozgcloud/processor/command/CommandTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..005dbfe9bdea4ea93086342c8ea81c695d966888 --- /dev/null +++ b/src/test/java/de/ozgcloud/processor/command/CommandTestFactory.java @@ -0,0 +1,22 @@ +package de.ozgcloud.processor.command; + +import java.util.UUID; + +import de.ozgcloud.processor.vorgang.VorgangTestFactory; + +public class CommandTestFactory { + + public static final String ID = UUID.randomUUID().toString(); + public static final String ORDER = "ANNEHMEN"; + + public static Command create() { + return createBuilder().build(); + } + + public static Command.CommandBuilder createBuilder() { + return Command.builder() + .id(ID) + .order(ORDER) + .vorgangId(VorgangTestFactory.ID); + } +} diff --git a/src/test/java/de/ozgcloud/processor/event/EventServiceTest.java b/src/test/java/de/ozgcloud/processor/event/EventServiceTest.java new file mode 100644 index 0000000000000000000000000000000000000000..14d6d2836738543913e23bc83d2e983a8fa5097a --- /dev/null +++ b/src/test/java/de/ozgcloud/processor/event/EventServiceTest.java @@ -0,0 +1,36 @@ +package de.ozgcloud.processor.event; + +import static org.assertj.core.api.Assertions.*; + +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Spy; + +import de.ozgcloud.processor.command.CommandTestFactory; + +class EventServiceTest { + + @Spy + @InjectMocks + private EventService service; + + @Nested + class TestGetEventName { + + @Test + void shouldReturnEventName() { + var result = service.getEventNameFromOrder(CommandTestFactory.createBuilder().order("VORGANG_ANNEHMEN").build()); + + assertThat(result).contains("ANGENOMMEN"); + } + + @Test + void shouldReturnEmptyForUnkown() { + var result = service.getEventNameFromOrder(CommandTestFactory.createBuilder().order("quatsch").build()); + + assertThat(result).isEmpty(); + } + } + +} diff --git a/src/test/java/de/ozgcloud/processor/processor/FormTestFactory.java b/src/test/java/de/ozgcloud/processor/processor/FormTestFactory.java index f0a943e159c6f4d8d6af893a3fc561b36daf4fc3..0210a3b3d5d6959e783e408978e41d0aae605fa0 100644 --- a/src/test/java/de/ozgcloud/processor/processor/FormTestFactory.java +++ b/src/test/java/de/ozgcloud/processor/processor/FormTestFactory.java @@ -23,18 +23,23 @@ */ package de.ozgcloud.processor.processor; +import java.util.Collections; + import de.ozgcloud.apilib.vorgang.OzgCloudEingangHeaderTestFactory; import de.ozgcloud.processor.processor.ProcessorProperties.Form; import de.ozgcloud.processor.processor.ProcessorProperties.Form.FormBuilder; public class FormTestFactory { + public static String EVENT = "VORGANG_CREATED"; + public static Form create() { return createBuilder().build(); } public static FormBuilder createBuilder() { return Form.builder() + .events(Collections.singleton(EVENT)) .formId(OzgCloudEingangHeaderTestFactory.FORM_ID) .formEngineName(OzgCloudEingangHeaderTestFactory.FORM_ENGINE_NAME); } diff --git a/src/test/java/de/ozgcloud/processor/processor/ProcessorEventListenerITCase.java b/src/test/java/de/ozgcloud/processor/processor/ProcessorEventListenerITCase.java index d59d18de59df0b25e28ae41ae7e8fc65791e5d47..531fd3bb1a1013046e1cb5814d9bdf7eb919065c 100644 --- a/src/test/java/de/ozgcloud/processor/processor/ProcessorEventListenerITCase.java +++ b/src/test/java/de/ozgcloud/processor/processor/ProcessorEventListenerITCase.java @@ -30,8 +30,8 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.context.ApplicationEventPublisher; +import org.springframework.test.context.bean.override.mockito.MockitoBean; import de.ozgcloud.apilib.vorgang.OzgCloudVorgangTestFactory; import de.ozgcloud.command.CommandCreatedEvent; @@ -46,11 +46,11 @@ import de.ozgcloud.processor.vorgang.VorgangTestFactory; @ITCase class ProcessorEventListenerITCase { - @MockBean + @MockitoBean private ResultService resultService; - @MockBean + @MockitoBean private VorgangService service; - @MockBean + @MockitoBean private ProcessorService processorService; @Autowired diff --git a/src/test/java/de/ozgcloud/processor/processor/ProcessorEventListenerTest.java b/src/test/java/de/ozgcloud/processor/processor/ProcessorEventListenerTest.java index e4e11f1733d0ad91e77be9162fd1f74a15b24bee..29273a7e3b02be522c7674c73f50ff9a5e9d32dc 100644 --- a/src/test/java/de/ozgcloud/processor/processor/ProcessorEventListenerTest.java +++ b/src/test/java/de/ozgcloud/processor/processor/ProcessorEventListenerTest.java @@ -32,6 +32,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.stream.Stream; import jakarta.validation.ConstraintViolationException; @@ -44,6 +45,7 @@ import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.InjectMocks; import org.mockito.Mock; +import org.mockito.Mockito; import org.mockito.Spy; import org.springframework.context.ApplicationEventPublisher; @@ -53,6 +55,9 @@ import de.ozgcloud.command.CommandCreatedEvent; import de.ozgcloud.command.CommandFailedEvent; import de.ozgcloud.command.CommandTestFactory; import de.ozgcloud.command.VorgangCreatedEvent; +import de.ozgcloud.command.status.StatusChangedEvent; +import de.ozgcloud.processor.command.CommandService; +import de.ozgcloud.processor.event.EventService; import de.ozgcloud.processor.result.ProcessorTechnicalException; import de.ozgcloud.processor.result.ResultService; import de.ozgcloud.processor.vorgang.Vorgang; @@ -65,7 +70,7 @@ class ProcessorEventListenerTest { @Spy @InjectMocks - private ProcessorEventListener vorgangEventListener; + private ProcessorEventListener listener; @Mock private VorgangService vorgangService; @@ -76,6 +81,11 @@ class ProcessorEventListenerTest { @Mock private ApplicationEventPublisher publisher; + @Mock + private CommandService commandService; + @Mock + private EventService eventService; + @DisplayName("Trigger new vorgang processor") @Nested class TestTriggerNewVorgangProcessor { @@ -95,28 +105,28 @@ class ProcessorEventListenerTest { when(vorgangService.getVorgang(any())).thenReturn(vorgang); var result = ProcessorResultTestFactory.createBuilder().vorgangId(null).build(); - when(processorService.processVorgang(any())).thenReturn(Stream.of(Mono.just(result))); + when(processorService.processVorgang(any(), anyString())).thenReturn(Stream.of(Mono.just(result))); } @Test void shouldGetVorgang() { var expectedVorgangId = VorgangId.from(OzgCloudVorgangTestFactory.ID.toString()); - vorgangEventListener.triggerNewVorgangProcessors(EVENT); + listener.triggerNewVorgangProcessors(EVENT); verify(vorgangService).getVorgang(expectedVorgangId); } @Test void shouldCallProcessVorgang() { - vorgangEventListener.triggerNewVorgangProcessors(EVENT); + listener.triggerNewVorgangProcessors(EVENT); - verify(processorService).processVorgang(vorgang); + verify(processorService).processVorgang(vorgang, "VORGANG_CREATED"); } @Test void shouldSetVorgangId() { - vorgangEventListener.triggerNewVorgangProcessors(EVENT); + listener.triggerNewVorgangProcessors(EVENT); verify(resultService).processResult(resultCaptor.capture()); assertThat(resultCaptor.getValue().getVorgangId()).isEqualTo(VorgangTestFactory.ID); @@ -125,21 +135,21 @@ class ProcessorEventListenerTest { @Test void shouldCallConsumeException() { when(vorgangService.getVorgang(any())).thenReturn(VorgangTestFactory.create()); - when(processorService.processVorgang(any())).thenReturn(Stream.of(Mono.error(exception))); + when(processorService.processVorgang(any(), anyString())).thenReturn(Stream.of(Mono.error(exception))); - vorgangEventListener.triggerNewVorgangProcessors(EVENT); + listener.triggerNewVorgangProcessors(EVENT); - verify(resultService).processError(exception, VorgangTestFactory.ID.toString()); + verify(resultService).processError(exception, VorgangTestFactory.ID); } @Test void shouldCallConsumeUnexpectedExceptionType() { when(vorgangService.getVorgang(any())).thenReturn(VorgangTestFactory.create()); - when(processorService.processVorgang(any())).thenReturn(Stream.of(Mono.error(new Exception()))); + when(processorService.processVorgang(any(), anyString())).thenReturn(Stream.of(Mono.error(new Exception()))); - vorgangEventListener.triggerNewVorgangProcessors(EVENT); + listener.triggerNewVorgangProcessors(EVENT); - verify(resultService).processError(any(Exception.class), eq(VorgangTestFactory.ID.toString())); + verify(resultService).processError(any(Exception.class), eq(VorgangTestFactory.ID)); } } @@ -170,35 +180,35 @@ class ProcessorEventListenerTest { @BeforeEach void init() { when(vorgangService.getVorgang(any())).thenReturn(vorgang); - when(processorService.processVorgang(any(), any())).thenReturn(monoStream); + when(processorService.processVorgang(any(), Mockito.<Collection<String>>any())).thenReturn(monoStream); } @Test void shouldGetVorgang() { - vorgangEventListener.onCommandProcessVorgang(event); + listener.onCommandProcessVorgang(event); verify(vorgangService).getVorgang(VorgangId.from(CommandTestFactory.VORGANG_ID)); } @Test void shouldCallService() { - vorgangEventListener.onCommandProcessVorgang(event); + listener.onCommandProcessVorgang(event); verify(processorService).processVorgang(vorgang, processorNames); } @Test void shouldProcessResult() { - vorgangEventListener.onCommandProcessVorgang(event); + listener.onCommandProcessVorgang(event); - verify(vorgangEventListener).processResult(any(), eq(CommandTestFactory.VORGANG_ID)); + verify(listener).processResult(any(), eq(VorgangId.from(CommandTestFactory.VORGANG_ID))); } @Test void shouldPublishCommandProcessedEvent() { - vorgangEventListener.onCommandProcessVorgang(event); + listener.onCommandProcessVorgang(event); - verify(vorgangEventListener).publishCommandProcessedEvent(event.getSource()); + verify(listener).publishCommandProcessedEvent(event.getSource()); } } @@ -208,16 +218,16 @@ class ProcessorEventListenerTest { @Test void shouldReturnSingletonList() { - var processorNames = vorgangEventListener.getProcessorNames(createCommand("singleName")); + var result = listener.getProcessorNames(createCommand("singleName")); - assertThat(processorNames).isInstanceOf(Collection.class).containsExactly("singleName"); + assertThat(result).isInstanceOf(Collection.class).containsExactly("singleName"); } @Test void shouldReturnList() { - var processorNames = vorgangEventListener.getProcessorNames(createCommand(List.of("name", "otherName"))); + var result = listener.getProcessorNames(createCommand(List.of("name", "otherName"))); - assertThat(processorNames).isInstanceOf(Collection.class).containsExactly("name", "otherName"); + assertThat(result).isInstanceOf(Collection.class).containsExactly("name", "otherName"); } private Command createCommand(Object processorNames) { @@ -233,12 +243,12 @@ class ProcessorEventListenerTest { @BeforeEach void init() { - when(processorService.processVorgang(any(), any())).thenReturn(Stream.empty()); + when(processorService.processVorgang(any(), Mockito.<Collection<String>>any())).thenReturn(Stream.empty()); } @Test void shouldPublishEventBeClassOf() { - vorgangEventListener.onCommandProcessVorgang(event); + listener.onCommandProcessVorgang(event); verify(publisher).publishEvent(commandSuccessEventCaptor.capture()); assertThat(commandSuccessEventCaptor.getValue().getClass()).isEqualTo(VorgangProcessedEvent.class); @@ -246,7 +256,7 @@ class ProcessorEventListenerTest { @Test void shouldPublishEventHasCommanIdAsSource() { - vorgangEventListener.onCommandProcessVorgang(event); + listener.onCommandProcessVorgang(event); verify(publisher).publishEvent(commandSuccessEventCaptor.capture()); assertThat(commandSuccessEventCaptor.getValue().getSource()).isEqualTo(CommandTestFactory.ID); @@ -254,7 +264,7 @@ class ProcessorEventListenerTest { @Test void shouldPublishEventHasCommand() { - vorgangEventListener.onCommandProcessVorgang(event); + listener.onCommandProcessVorgang(event); verify(publisher).publishEvent(commandSuccessEventCaptor.capture()); assertThat(commandSuccessEventCaptor.getValue().getCommand()).isEqualTo(command); @@ -272,23 +282,23 @@ class ProcessorEventListenerTest { @BeforeEach void init() { when(vorgangService.getVorgang(any())).thenReturn(vorgang); - when(processorService.processVorgang(any(), any())).thenReturn(monoStream); - doThrow(exception).when(vorgangEventListener).processResult(any(), any()); - doNothing().when(vorgangEventListener).publishCommandFailedEvent(any(), any()); + when(processorService.processVorgang(any(), Mockito.<Collection<String>>any())).thenReturn(monoStream); + doThrow(exception).when(listener).processResult(any(), any()); + doNothing().when(listener).publishCommandFailedEvent(any(), any()); } @Test void shouldProcessError() { - vorgangEventListener.onCommandProcessVorgang(event); + listener.onCommandProcessVorgang(event); - verify(resultService).processError(any(), eq(CommandTestFactory.VORGANG_ID)); + verify(resultService).processError(any(), eq(VorgangId.from(CommandTestFactory.VORGANG_ID))); } @Test void shouldPublishEventOnConstraintException() { - vorgangEventListener.onCommandProcessVorgang(event); + listener.onCommandProcessVorgang(event); - verify(vorgangEventListener).publishCommandFailedEvent(any(), any()); + verify(listener).publishCommandFailedEvent(any(), any()); } } @@ -298,21 +308,21 @@ class ProcessorEventListenerTest { @BeforeEach void init() { - when(processorService.processVorgang(any(), any())).thenReturn(Stream.of(Mono.error(exception))); + when(processorService.processVorgang(any(), Mockito.<Collection<String>>any())).thenReturn(Stream.of(Mono.error(exception))); } @Test void shouldProcessError() { - vorgangEventListener.onCommandProcessVorgang(event); + listener.onCommandProcessVorgang(event); - verify(vorgangEventListener).publishCommandFailedEvent(any(), any()); + verify(listener).publishCommandFailedEvent(any(), any()); } @Test void shouldPublishCommandFailedEvent() { - vorgangEventListener.onCommandProcessVorgang(event); + listener.onCommandProcessVorgang(event); - verify(resultService).processError(any(), eq(CommandTestFactory.VORGANG_ID)); + verify(resultService).processError(any(), eq(VorgangId.from(CommandTestFactory.VORGANG_ID))); } } @@ -320,7 +330,7 @@ class ProcessorEventListenerTest { @Nested class TestPublishCommandFailedEvent { - private final static String ERROR_MSG = "ErrorMsg"; + private static final String ERROR_MSG = "ErrorMsg"; @BeforeEach void init() { @@ -329,7 +339,7 @@ class ProcessorEventListenerTest { @Test void shouldPublishEventBeClassOf() { - vorgangEventListener.publishCommandFailedEvent(exception, CommandTestFactory.ID); + listener.publishCommandFailedEvent(exception, CommandTestFactory.ID); verify(publisher).publishEvent(commandFailedEventCaptor.capture()); assertThat(commandFailedEventCaptor.getValue().getClass()).isEqualTo(CommandFailedEvent.class); @@ -337,7 +347,7 @@ class ProcessorEventListenerTest { @Test void shouldPublishEventHasCommanIdAsSource() { - vorgangEventListener.publishCommandFailedEvent(exception, CommandTestFactory.ID); + listener.publishCommandFailedEvent(exception, CommandTestFactory.ID); verify(publisher).publishEvent(commandFailedEventCaptor.capture()); assertThat(commandFailedEventCaptor.getValue().getSource()).isEqualTo(CommandTestFactory.ID); @@ -345,11 +355,46 @@ class ProcessorEventListenerTest { @Test void shouldPublishEventHasErrorMessage() { - vorgangEventListener.publishCommandFailedEvent(exception, CommandTestFactory.ID); + listener.publishCommandFailedEvent(exception, CommandTestFactory.ID); verify(publisher).publishEvent(commandFailedEventCaptor.capture()); assertThat(commandFailedEventCaptor.getValue().getErrorMessage()).isEqualTo(ERROR_MSG); } } } + + @Nested + class TestOnStatusChange { + + private StatusChangedEvent event = new StatusChangedEvent(CommandTestFactory.create()); + private de.ozgcloud.processor.command.Command command = de.ozgcloud.processor.command.CommandTestFactory.create(); + private static final String EVENT_NAME = "EVENT"; + + @BeforeEach + void init() { + when(commandService.getCommand(any())).thenReturn(command); + when(eventService.getEventNameFromOrder(any())).thenReturn(Optional.of(EVENT_NAME)); + } + + @Test + void shouldLoadCommand() { + listener.onStatusChange(event); + + verify(commandService).getCommand(CommandTestFactory.ID); + } + + @Test + void shouldGetEventName() { + listener.onStatusChange(event); + + verify(eventService).getEventNameFromOrder(command); + } + + @Test + void shouldProcessVorgang() { + listener.onStatusChange(event); + + verify(listener).processVorgang(VorgangTestFactory.ID, EVENT_NAME); + } + } } \ No newline at end of file diff --git a/src/test/java/de/ozgcloud/processor/processor/ProcessorServiceITCase.java b/src/test/java/de/ozgcloud/processor/processor/ProcessorServiceITCase.java index c05616259f4ad99759753c1ad796e7f358946027..e1c09dfbcc05c00109d5e096993aecaac0ab3cf4 100644 --- a/src/test/java/de/ozgcloud/processor/processor/ProcessorServiceITCase.java +++ b/src/test/java/de/ozgcloud/processor/processor/ProcessorServiceITCase.java @@ -40,9 +40,9 @@ import org.junit.jupiter.params.provider.NullAndEmptySource; import org.junit.jupiter.params.provider.ValueSource; import org.mockito.Mock; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.mock.mockito.SpyBean; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; +import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import org.springframework.test.util.ReflectionTestUtils; import de.ozgcloud.common.test.ITCase; @@ -62,7 +62,7 @@ class ProcessorServiceITCase { @Autowired private ProcessorService service; - @SpyBean + @MockitoSpyBean private ResultService resultService; private Processor processor; @@ -197,7 +197,7 @@ class ProcessorServiceITCase { MockResponse response = new MockResponse().setResponseCode(HttpStatus.BAD_REQUEST.value()); mockWebServer.enqueue(response); - var results = service.processVorgang(vorgang); + var results = service.processVorgang(vorgang, FormTestFactory.EVENT); assertThrows(ProcessorTechnicalException.class, () -> results.forEach(Mono::block)); } @@ -207,7 +207,7 @@ class ProcessorServiceITCase { MockResponse response = new MockResponse().setResponseCode(HttpStatus.BAD_GATEWAY.value()); mockWebServer.enqueue(response); - var results = service.processVorgang(vorgang); + var results = service.processVorgang(vorgang, FormTestFactory.EVENT); assertThrows(ProcessorTechnicalException.class, () -> results.forEach(Mono::block)); } @@ -216,7 +216,7 @@ class ProcessorServiceITCase { void shouldHandleRedirectStatus() { mockWebServer.enqueue(new MockResponse().setResponseCode(301)); - var results = service.processVorgang(vorgang); + var results = service.processVorgang(vorgang, FormTestFactory.EVENT); assertThrows(ProcessorTechnicalException.class, () -> results.forEach(Mono::block)); } @@ -226,7 +226,7 @@ class ProcessorServiceITCase { MockResponse response = new MockResponse().addHeader("content-type", MediaType.APPLICATION_JSON).setBody("test"); mockWebServer.enqueue(response); - var results = service.processVorgang(vorgang); + var results = service.processVorgang(vorgang, FormTestFactory.EVENT); assertThrows(ProcessorTechnicalException.class, () -> results.forEach(Mono::block)); } diff --git a/src/test/java/de/ozgcloud/processor/processor/ProcessorServiceTest.java b/src/test/java/de/ozgcloud/processor/processor/ProcessorServiceTest.java index c9a87204347c1039119adde275cd3508af8a3d8d..20f759718888aee6f19bd0cae69f23857f4ae30a 100644 --- a/src/test/java/de/ozgcloud/processor/processor/ProcessorServiceTest.java +++ b/src/test/java/de/ozgcloud/processor/processor/ProcessorServiceTest.java @@ -72,7 +72,7 @@ class ProcessorServiceTest { @Test void shouldReturnProcessor() { - var processor = service.getProcessors(VorgangTestFactory.create()); + var processor = service.getProcessors(VorgangTestFactory.create(), FormTestFactory.EVENT); assertThat(processor).contains(configuredProcessor); } @@ -82,7 +82,7 @@ class ProcessorServiceTest { void shouldReturnEmptyIfNoFormId() { var vorgang = VorgangTestFactory.createBuilder().formId("other").build(); - var processor = service.getProcessors(vorgang); + var processor = service.getProcessors(vorgang, FormTestFactory.EVENT); assertThat(processor).isEmpty(); } @@ -92,7 +92,14 @@ class ProcessorServiceTest { void shouldReturnEmptyIfNoFormEngineName() { var vorgang = VorgangTestFactory.createBuilder().formEngineName("other").build(); - var processor = service.getProcessors(vorgang); + var processor = service.getProcessors(vorgang, FormTestFactory.EVENT); + + assertThat(processor).isEmpty(); + } + + @Test + void shouldReturnEmptyForOtherEvent() { + var processor = service.getProcessors(VorgangTestFactory.create(), "other"); assertThat(processor).isEmpty(); } diff --git a/src/test/java/de/ozgcloud/processor/processor/ProxyPropertiesITCase.java b/src/test/java/de/ozgcloud/processor/processor/ProxyPropertiesITCase.java index 4a356c22ac0782ce0f7e6b3de8982dac05af1717..52cdb54791551012e1e6dae12e9bb9a8f0417628 100644 --- a/src/test/java/de/ozgcloud/processor/processor/ProxyPropertiesITCase.java +++ b/src/test/java/de/ozgcloud/processor/processor/ProxyPropertiesITCase.java @@ -29,7 +29,9 @@ import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; +@ActiveProfiles("itcase") public class ProxyPropertiesITCase { @Nested diff --git a/src/test/java/de/ozgcloud/processor/result/AktennotizFactoryTest.java b/src/test/java/de/ozgcloud/processor/result/AktennotizFactoryTest.java index 1b041a90146dd5a8395369cf5dc132009f37dd26..561ffe55d404bb22dc65c9a1e4ab7c7406d409ef 100644 --- a/src/test/java/de/ozgcloud/processor/result/AktennotizFactoryTest.java +++ b/src/test/java/de/ozgcloud/processor/result/AktennotizFactoryTest.java @@ -33,6 +33,7 @@ import org.mockito.Spy; import de.ozgcloud.processor.processor.ProcessorResult; import de.ozgcloud.processor.processor.ProcessorResultTestFactory; +import de.ozgcloud.processor.vorgang.VorgangId; import de.ozgcloud.processor.vorgang.VorgangTestFactory; class AktennotizFactoryTest { @@ -77,7 +78,7 @@ class AktennotizFactoryTest { @Nested class TestCreateErrorAktennotiz { - private static final String VORGANG_ID = VorgangTestFactory.ID.toString(); + private static final VorgangId VORGANG_ID = VorgangTestFactory.ID; private static final String PROCESSOR_NAME = "processorName"; diff --git a/src/test/java/de/ozgcloud/processor/result/ResultServiceTest.java b/src/test/java/de/ozgcloud/processor/result/ResultServiceTest.java index 4597e31aeb93cffb621204c2cdb49ec95f3e5c05..1de5efb5f9e81a6b3a98fa4ec51816f29c739fe2 100644 --- a/src/test/java/de/ozgcloud/processor/result/ResultServiceTest.java +++ b/src/test/java/de/ozgcloud/processor/result/ResultServiceTest.java @@ -100,14 +100,14 @@ class ResultServiceTest { when(exception.getProcessorName()).thenReturn(ProcessorTestFactory.PROCESSOR_NAME); when(exception.getExceptionId()).thenReturn(EXCEPTION_ID); - resultService.processError(exception, VorgangTestFactory.ID.toString()); + resultService.processError(exception, VorgangTestFactory.ID); - verify(aktennotizFactory).createErrorAktennotiz(VorgangTestFactory.ID.toString(), ProcessorTestFactory.PROCESSOR_NAME, EXCEPTION_ID); + verify(aktennotizFactory).createErrorAktennotiz(VorgangTestFactory.ID, ProcessorTestFactory.PROCESSOR_NAME, EXCEPTION_ID); } @Test void shouldCallAddAktenNotiz() { - resultService.processError(exception, VorgangTestFactory.ID.toString()); + resultService.processError(exception, VorgangTestFactory.ID); verify(resultService).addAktenNotiz(aktennotiz); } diff --git a/src/test/resources/application-itcase.yml b/src/test/resources/application-itcase.yml index 4e522a6a1ee94794d05902434e815c204688a8a6..abbc391103440f5116b29485b09f802774c7eeac 100644 --- a/src/test/resources/application-itcase.yml +++ b/src/test/resources/application-itcase.yml @@ -21,6 +21,12 @@ # Die sprachspezifischen Genehmigungen und Beschränkungen # unter der Lizenz sind dem Lizenztext zu entnehmen. # + +logging: + level: + root: WARN + config: classpath:log4j2-local.xml + ozgcloud: processors: - address: http://test1