diff --git a/pom.xml b/pom.xml index 7ed47721fde52888abd872c85ff7e5349a8cb88e..311eeb0e987b4edb5166acf41eb8af1723ad4b44 100644 --- a/pom.xml +++ b/pom.xml @@ -85,6 +85,10 @@ <groupId>org.springframework</groupId> <artifactId>spring-webflux</artifactId> </dependency> + <dependency> + <groupId>com.fasterxml.jackson.datatype</groupId> + <artifactId>jackson-datatype-jsr310</artifactId> + </dependency> <!-- test --> <dependency> diff --git a/src/main/java/de/ozgcloud/processor/processor/ProcessorEventListener.java b/src/main/java/de/ozgcloud/processor/processor/ProcessorEventListener.java index a5e4dd0d7859ca578aacfc8e87b0ac140dd04809..936a17a4cb42e82814e66128a15e68dd7ebaea3c 100644 --- a/src/main/java/de/ozgcloud/processor/processor/ProcessorEventListener.java +++ b/src/main/java/de/ozgcloud/processor/processor/ProcessorEventListener.java @@ -99,7 +99,7 @@ class ProcessorEventListener { } void processVorgang(@NonNull VorgangId vorgangId, String eventName) { - var vorgang = getVorgang(vorgangId); + var vorgang = getVorgang(vorgangId).withEvent(eventName); processorService.processVorgang(vorgang, eventName) .forEach(processorResultMono -> processorResultMono.doOnError(cause -> handleError(cause, vorgangId)) diff --git a/src/main/java/de/ozgcloud/processor/vorgang/ProcessorVorgangMapper.java b/src/main/java/de/ozgcloud/processor/vorgang/ProcessorVorgangMapper.java index 2774aed34bce917b8407cf19389408061491b4d7..851d098d5d283844e4dabc360bf2b51d28dea768 100644 --- a/src/main/java/de/ozgcloud/processor/vorgang/ProcessorVorgangMapper.java +++ b/src/main/java/de/ozgcloud/processor/vorgang/ProcessorVorgangMapper.java @@ -24,6 +24,7 @@ package de.ozgcloud.processor.vorgang; import java.util.List; +import java.util.Objects; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -43,6 +44,7 @@ import de.ozgcloud.apilib.vorgang.OzgCloudFormField; import de.ozgcloud.apilib.vorgang.OzgCloudSubForm; import de.ozgcloud.apilib.vorgang.OzgCloudVorgang; import de.ozgcloud.apilib.vorgang.OzgCloudVorgangId; +import de.ozgcloud.apilib.vorgang.OzgCloudVorgangStatus; import de.ozgcloud.common.binaryfile.FileId; import de.ozgcloud.processor.ProcessorManagerConfiguration; @@ -53,6 +55,7 @@ public interface ProcessorVorgangMapper { @Mapping(target = "eingang", qualifiedByName = "mapEingang", source = "eingangs") @Mapping(target = "formId", qualifiedByName = "getFormId", source = "eingangs") @Mapping(target = "formEngineName", qualifiedByName = "mapFormEngineName", source = "eingangs") + @Mapping(target = "header.event", ignore = true) Vorgang mapVorgang(OzgCloudVorgang ozgCloudVorgang); default VorgangId mapId(OzgCloudVorgangId id) { @@ -109,4 +112,9 @@ public interface ProcessorVorgangMapper { default FileId fromOzgCloudId(OzgCloudFileId ozgCloudFileId) { return FileId.from(ozgCloudFileId.toString()); } + + default String map(OzgCloudVorgangStatus value) { + return Objects.nonNull(value) ? value.toString() : null; + } + } diff --git a/src/main/java/de/ozgcloud/processor/vorgang/Vorgang.java b/src/main/java/de/ozgcloud/processor/vorgang/Vorgang.java index 5634470d8e0879f822d392c07c65bcd0b913ba86..b89e766fe37a08d2c973c0f078811dadf1dba57f 100644 --- a/src/main/java/de/ozgcloud/processor/vorgang/Vorgang.java +++ b/src/main/java/de/ozgcloud/processor/vorgang/Vorgang.java @@ -23,11 +23,14 @@ */ package de.ozgcloud.processor.vorgang; +import java.time.ZonedDateTime; + import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty.Access; import lombok.Builder; import lombok.Getter; +import lombok.With; @Builder @Getter @@ -43,9 +46,25 @@ public class Vorgang { private String formId; private Eingang eingang; + @With + @Builder.Default + private VorgangHeader header = VorgangHeader.builder().build(); @JsonProperty(access = Access.READ_ONLY, value = "vorgangId") public String getId() { return id.toString(); } + + @Builder + @Getter + static class VorgangHeader { + @With + private String event; + private String status; + private ZonedDateTime createdAt; + } + + public Vorgang withEvent(String event) { + return this.withHeader(header.withEvent(event)); + } } diff --git a/src/test/java/de/ozgcloud/processor/processor/FormTestFactory.java b/src/test/java/de/ozgcloud/processor/processor/FormTestFactory.java index 0210a3b3d5d6959e783e408978e41d0aae605fa0..51bcf9bfef0f8b4418ce5e2e9c137f76bfde3492 100644 --- a/src/test/java/de/ozgcloud/processor/processor/FormTestFactory.java +++ b/src/test/java/de/ozgcloud/processor/processor/FormTestFactory.java @@ -31,7 +31,7 @@ import de.ozgcloud.processor.processor.ProcessorProperties.Form.FormBuilder; public class FormTestFactory { - public static String EVENT = "VORGANG_CREATED"; + public static final String EVENT = "VORGANG_CREATED"; public static Form create() { return createBuilder().build(); diff --git a/src/test/java/de/ozgcloud/processor/processor/ProcessorEventListenerTest.java b/src/test/java/de/ozgcloud/processor/processor/ProcessorEventListenerTest.java index 29273a7e3b02be522c7674c73f50ff9a5e9d32dc..bbbd693bc3fb8711f207dc2111a33ba9909157bb 100644 --- a/src/test/java/de/ozgcloud/processor/processor/ProcessorEventListenerTest.java +++ b/src/test/java/de/ozgcloud/processor/processor/ProcessorEventListenerTest.java @@ -61,6 +61,7 @@ import de.ozgcloud.processor.event.EventService; import de.ozgcloud.processor.result.ProcessorTechnicalException; import de.ozgcloud.processor.result.ResultService; import de.ozgcloud.processor.vorgang.Vorgang; +import de.ozgcloud.processor.vorgang.VorgangHeaderTestFactory; import de.ozgcloud.processor.vorgang.VorgangId; import de.ozgcloud.processor.vorgang.VorgangService; import de.ozgcloud.processor.vorgang.VorgangTestFactory; @@ -95,6 +96,8 @@ class ProcessorEventListenerTest { @Captor private ArgumentCaptor<ProcessorResult> resultCaptor; + @Captor + private ArgumentCaptor<Vorgang> vorgangCaptor; private static final VorgangCreatedEvent EVENT = new VorgangCreatedEvent(OzgCloudVorgangTestFactory.ID.toString()); @@ -121,7 +124,9 @@ class ProcessorEventListenerTest { void shouldCallProcessVorgang() { listener.triggerNewVorgangProcessors(EVENT); - verify(processorService).processVorgang(vorgang, "VORGANG_CREATED"); + verify(processorService).processVorgang(vorgangCaptor.capture(), eq("VORGANG_CREATED")); + assertThat(vorgangCaptor.getValue()).usingRecursiveComparison() + .isEqualTo(VorgangTestFactory.createWithHeader(VorgangHeaderTestFactory.createBuilder().event("VORGANG_CREATED").build())); } @Test @@ -374,6 +379,7 @@ class ProcessorEventListenerTest { void init() { when(commandService.getCommand(any())).thenReturn(command); when(eventService.getEventNameFromOrder(any())).thenReturn(Optional.of(EVENT_NAME)); + when(vorgangService.getVorgang(any())).thenReturn(VorgangTestFactory.create()); } @Test diff --git a/src/test/java/de/ozgcloud/processor/vorgang/ProcessorVorgangMapperTest.java b/src/test/java/de/ozgcloud/processor/vorgang/ProcessorVorgangMapperTest.java index 42be8a3c0d5c3551c2ea4efd99949b214a11b826..3240749de60c7c81b9af051854393707358b0461 100644 --- a/src/test/java/de/ozgcloud/processor/vorgang/ProcessorVorgangMapperTest.java +++ b/src/test/java/de/ozgcloud/processor/vorgang/ProcessorVorgangMapperTest.java @@ -42,7 +42,8 @@ class ProcessorVorgangMapperTest { void shouldMapAllField() { var mapped = mapper.mapVorgang(OzgCloudVorgangTestFactory.create()); - assertThat(mapped).usingRecursiveComparison().isEqualTo(VorgangTestFactory.create()); + assertThat(mapped).usingRecursiveComparison() + .isEqualTo(VorgangTestFactory.createWithHeader(VorgangHeaderTestFactory.createBuilder().event(null).build())); } @Test diff --git a/src/test/java/de/ozgcloud/processor/vorgang/VorgangHeaderTestFactory.java b/src/test/java/de/ozgcloud/processor/vorgang/VorgangHeaderTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..72d225c37949b3e86af570c3d5c5897afa1963c3 --- /dev/null +++ b/src/test/java/de/ozgcloud/processor/vorgang/VorgangHeaderTestFactory.java @@ -0,0 +1,24 @@ +package de.ozgcloud.processor.vorgang; + +import java.time.ZonedDateTime; + +import de.ozgcloud.apilib.vorgang.OzgCloudVorgangHeaderTestFactory; +import de.ozgcloud.processor.vorgang.Vorgang.VorgangHeader; + +public class VorgangHeaderTestFactory { + + static final ZonedDateTime CREATED_AT = OzgCloudVorgangHeaderTestFactory.CREATED_AT; + static final String STATUS = OzgCloudVorgangHeaderTestFactory.STATUS_STR; + static final String EVENT = "ABGESCHLOSSEN"; + + public static VorgangHeader create() { + return createBuilder().build(); + } + + public static VorgangHeader.VorgangHeaderBuilder createBuilder() { + return VorgangHeader.builder() + .createdAt(CREATED_AT) + .status(STATUS) + .event(EVENT); + } +} diff --git a/src/test/java/de/ozgcloud/processor/vorgang/VorgangTestFactory.java b/src/test/java/de/ozgcloud/processor/vorgang/VorgangTestFactory.java index ef2b5ca9c1414176abf5b24c695379a95a6e60bc..5d9aca7812e5275f86e8c9910c35b65493eb3ba2 100644 --- a/src/test/java/de/ozgcloud/processor/vorgang/VorgangTestFactory.java +++ b/src/test/java/de/ozgcloud/processor/vorgang/VorgangTestFactory.java @@ -27,6 +27,7 @@ import static de.ozgcloud.apilib.vorgang.OzgCloudVorgangTestFactory.*; import de.ozgcloud.apilib.vorgang.OzgCloudEingangHeaderTestFactory; import de.ozgcloud.apilib.vorgang.OzgCloudVorgangTestFactory; +import de.ozgcloud.processor.vorgang.Vorgang.VorgangHeader; public class VorgangTestFactory { @@ -44,6 +45,11 @@ public class VorgangTestFactory { .vorgangNummer(VORGANG_NUMMER) .formId(OzgCloudEingangHeaderTestFactory.FORM_ID) .formEngineName(OzgCloudEingangHeaderTestFactory.FORM_ENGINE_NAME) + .header(VorgangHeaderTestFactory.create()) .eingang(EingangTestFactory.create()); } + + public static Vorgang createWithHeader(VorgangHeader header) { + return createBuilder().header(header).build(); + } }