diff --git a/bescheid-manager/pom.xml b/bescheid-manager/pom.xml index fa1466b7ef0d476c42fbef9ce64e2cf96e00ad05..c1d3c249f2ab9f56d1cf882a731ad625656ebf9d 100644 --- a/bescheid-manager/pom.xml +++ b/bescheid-manager/pom.xml @@ -28,7 +28,23 @@ <artifactId>pluto-command</artifactId> <version>${pluto.version}</version> </dependency> + <dependency> + <groupId>de.itvsh.ozg.pluto</groupId> + <artifactId>pluto-interface</artifactId> + <version>${pluto.version}</version> + </dependency> + + <dependency> + <groupId>net.devh</groupId> + <artifactId>grpc-client-spring-boot-starter</artifactId> + </dependency> + + <dependency> + <groupId>org.mapstruct</groupId> + <artifactId>mapstruct</artifactId> + </dependency> + <!--TEST--> <dependency> <groupId>de.itvsh.ozg.pluto</groupId> <artifactId>pluto-command</artifactId> diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/Bescheid.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/Bescheid.java new file mode 100644 index 0000000000000000000000000000000000000000..698da21850bbc1e7761bbeb88f89b45e4857c7a3 --- /dev/null +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/Bescheid.java @@ -0,0 +1,5 @@ +package de.ozgcloud.bescheid; + +public class Bescheid { + +} diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidEventListener.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidEventListener.java index 9b05e714cdf1a1b1bffaeb21aa819040f7df1959..6d6ad23a5b8b64764919f243f15e0c80f689e2af 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidEventListener.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidEventListener.java @@ -11,6 +11,7 @@ import org.springframework.stereotype.Component; import de.itvsh.ozg.pluto.command.Command; import de.itvsh.ozg.pluto.command.CommandCreatedEvent; +import de.ozgcloud.bescheid.vorgang.VorgangId; @Component class BescheidEventListener { @@ -21,6 +22,7 @@ class BescheidEventListener { public static final Predicate<Command> IS_CREATE_BESCHEID_COMMAND = command -> command.getOrder().equals(ORDER); + static final String VORGANG_ID_BODYKEY = "vorgangId"; static final String BESCHEID_VOM_BODYKEY = "bescheidVom"; static final String GENEHMIGT_BODYKEY = "genehmigt"; @@ -35,6 +37,7 @@ class BescheidEventListener { private BescheidRequest createRequest(Map<String, Object> eventBody) { var builder = BescheidRequest.builder(); + Optional.ofNullable(eventBody.get(VORGANG_ID_BODYKEY)).map(String.class::cast).map(VorgangId::from).ifPresent(builder::vorgangId); Optional.ofNullable(eventBody.get(BESCHEID_VOM_BODYKEY)).map(LocalDate.class::cast).ifPresent(builder::bescheidVom); Optional.ofNullable(eventBody.get(GENEHMIGT_BODYKEY)).map(Boolean.class::cast).ifPresent(builder::genehmigt); diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidRemoteService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidRemoteService.java new file mode 100644 index 0000000000000000000000000000000000000000..61d871a9202649eb02dc1208b9e2a08127cdebc1 --- /dev/null +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidRemoteService.java @@ -0,0 +1,8 @@ +package de.ozgcloud.bescheid; + +import de.ozgcloud.bescheid.vorgang.Vorgang; + +public interface BescheidRemoteService { + + Bescheid create(BescheidRequest request, Vorgang vorgang); +} diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidRequest.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidRequest.java index d5aa5798e6a60d6c0cd9252ddb00805c32e699c4..584ab431f885a54133b11c9379104b942bd95071 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidRequest.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidRequest.java @@ -2,6 +2,7 @@ package de.ozgcloud.bescheid; import java.time.LocalDate; +import de.ozgcloud.bescheid.vorgang.VorgangId; import lombok.Builder; import lombok.Getter; @@ -9,6 +10,8 @@ import lombok.Getter; @Getter public class BescheidRequest { + private VorgangId vorgangId; + private LocalDate bescheidVom; private boolean genehmigt; } diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidService.java index ae4f6ca50ae5c77d989b05274e064f0330e265d3..43cf025cf7f69e4467723ac25d873ae05c4dc616 100644 --- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidService.java +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidService.java @@ -1,11 +1,18 @@ package de.ozgcloud.bescheid; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import de.ozgcloud.bescheid.vorgang.VorgangService; + @Service class BescheidService { + @Autowired + private VorgangService vorgangService; + public void createBescheid(BescheidRequest request) { + var vorgang = vorgangService.getById(request.getVorgangId()); // TODO Auto-generated method stub } diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/vorgang/FormDataEntry.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/vorgang/FormDataEntry.java new file mode 100644 index 0000000000000000000000000000000000000000..326c007d02dacfc11d117fef3a3cad48dc8505d0 --- /dev/null +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/vorgang/FormDataEntry.java @@ -0,0 +1,52 @@ +package de.ozgcloud.bescheid.vorgang; + +import java.util.List; + +import lombok.Builder; +import lombok.Getter; +import lombok.Singular; + +public interface FormDataEntry { + + String getName(); + String getLabel(); + + default boolean isSubForm() { + return false; + } + + default boolean isFormEntry() { + return false; + } + + @Builder + @Getter + static class SubForm implements FormDataEntry { + + private String name; + private String label; + + @Singular + private List<FormDataEntry> entries; + + @Override + public boolean isSubForm() { + return true; + } + } + + @Builder + @Getter + static class FormField implements FormDataEntry { + + private String name; + private String label; + + private Object value; + + @Override + public boolean isFormEntry() { + return true; + } + } +} diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/vorgang/FormDataEntryMapper.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/vorgang/FormDataEntryMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..debcd9c8887e1abf0d5fa491e8b1e753612ad53a --- /dev/null +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/vorgang/FormDataEntryMapper.java @@ -0,0 +1,21 @@ +package de.ozgcloud.bescheid.vorgang; + +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.ReportingPolicy; + +import de.itvsh.ozg.pluto.vorgang.GrpcFormField; +import de.itvsh.ozg.pluto.vorgang.GrpcSubForm; +import de.ozgcloud.bescheid.vorgang.FormDataEntry.FormField; +import de.ozgcloud.bescheid.vorgang.FormDataEntry.SubForm; + +@Mapper(unmappedTargetPolicy = ReportingPolicy.ERROR) +public interface FormDataEntryMapper { + + @Mapping(target = "entries", source = "fieldList") + @Mapping(target = "entry", ignore = true) + @Mapping(target = "name", source = "title") + SubForm fromGrpc(GrpcSubForm subForm); + + FormField fromGrpc(GrpcFormField field); +} diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/vorgang/Vorgang.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/vorgang/Vorgang.java new file mode 100644 index 0000000000000000000000000000000000000000..00a35140b61e9249e25b79b669a17b0a7ba6d6ef --- /dev/null +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/vorgang/Vorgang.java @@ -0,0 +1,56 @@ +package de.ozgcloud.bescheid.vorgang; + +import java.util.List; + +import lombok.Builder; +import lombok.Getter; +import lombok.Singular; + +@Builder +@Getter +public class Vorgang { + + private VorgangId id; + + private String name; + + private String vorgangNummer; + private String aktenzeichen; + + private Eingang eingang; + + @Builder + @Getter + static class Eingang { + private Antragsteller antragsteller; + private ZustaendigeStelle zustaendigeStelle; + + @Singular + private List<FormDataEntry> formEntries; + } + + @Builder + @Getter + static class Antragsteller { + private String anrede; + private String nachname; + private String vorname; + private String geburtsdatum; + private String geburtsort; + private String geburtsname; + private String email; + private String telefon; + private String strasse; + private String hausnummer; + private String plz; + private String ort; + } + + @Builder + @Getter + static class ZustaendigeStelle { + private String organisationseinheitenId; + private String email; + } + +} diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/vorgang/VorgangId.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/vorgang/VorgangId.java new file mode 100644 index 0000000000000000000000000000000000000000..368cdff21a37f29ae4237f4a71722d3f762ff386 --- /dev/null +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/vorgang/VorgangId.java @@ -0,0 +1,15 @@ +package de.ozgcloud.bescheid.vorgang; + +import de.itvsh.kop.common.datatype.StringBasedValue; + +public class VorgangId extends StringBasedValue { + + VorgangId(String vorgangId) { + super(vorgangId); + } + + public static VorgangId from(String vorgangId) { + return new VorgangId(vorgangId); + } + +} diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/vorgang/VorgangMapper.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/vorgang/VorgangMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..27c14d88bf0ef92d01823338b460a567f180f150 --- /dev/null +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/vorgang/VorgangMapper.java @@ -0,0 +1,38 @@ +package de.ozgcloud.bescheid.vorgang; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; + +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.ReportingPolicy; +import org.mapstruct.factory.Mappers; + +import de.itvsh.ozg.pluto.vorgang.GrpcEingang; +import de.itvsh.ozg.pluto.vorgang.GrpcFormData; +import de.itvsh.ozg.pluto.vorgang.GrpcVorgangWithEingang; + +@Mapper(unmappedTargetPolicy = ReportingPolicy.ERROR, // + uses = FormDataEntryMapper.class) +interface VorgangMapper { + + @Mapping(target = "vorgangNummer", source = "nummer") + Vorgang mapVorgang(GrpcVorgangWithEingang vorgang); + + VorgangId mapVorgangId(String vorgangId); + + @Mapping(target = "formEntries", source = "formData") + @Mapping(target = "formEntry", ignore = true) + Vorgang.Eingang mapEingang(GrpcEingang eingang); + + default Collection<FormDataEntry> mapFormData(GrpcFormData value) { + var result = new ArrayList<FormDataEntry>(); + var entryMapper = Mappers.getMapper(FormDataEntryMapper.class); + + result.addAll(value.getFieldList().stream().map(entryMapper::fromGrpc).toList()); + result.addAll(value.getFormList().stream().map(entryMapper::fromGrpc).toList()); + + return Collections.unmodifiableList(result); + } +} diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/vorgang/VorgangRemoteService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/vorgang/VorgangRemoteService.java new file mode 100644 index 0000000000000000000000000000000000000000..7a861345664f23f14bf21c42f5ee4cacefccb27a --- /dev/null +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/vorgang/VorgangRemoteService.java @@ -0,0 +1,25 @@ +package de.ozgcloud.bescheid.vorgang; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import de.itvsh.ozg.pluto.vorgang.GrpcFindVorgangWithEingangRequest; +import de.itvsh.ozg.pluto.vorgang.VorgangServiceGrpc.VorgangServiceBlockingStub; +import lombok.NonNull; +import net.devh.boot.grpc.client.inject.GrpcClient; + +@Service +class VorgangRemoteService { + + @GrpcClient("pluto") + private VorgangServiceBlockingStub vorgangServiceStub; + @Autowired + private VorgangMapper mapper; + + public Vorgang getById(@NonNull VorgangId vorgangId) { + var request = GrpcFindVorgangWithEingangRequest.newBuilder().setId(vorgangId.toString()).build(); + + var response = vorgangServiceStub.findVorgangWithEingang(request); + return mapper.mapVorgang(response.getVorgangWithEingang()); + } +} diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/vorgang/VorgangService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/vorgang/VorgangService.java new file mode 100644 index 0000000000000000000000000000000000000000..0138aaa7b8cd438281a9ed627f70c04207a43f74 --- /dev/null +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/vorgang/VorgangService.java @@ -0,0 +1,15 @@ +package de.ozgcloud.bescheid.vorgang; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class VorgangService { + + @Autowired + public VorgangRemoteService remoteService; + + public Vorgang getById(VorgangId id) { + return remoteService.getById(id); + } +} diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerTest.java index fbe026513714e7e4ff751aa441c050a797432997..8b7f285b868b9084826821be9daab2eb7bc20215 100644 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerTest.java +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerTest.java @@ -32,7 +32,10 @@ class BescheidEventListenerTest { @Captor private ArgumentCaptor<BescheidRequest> requestCaptor; private Command command = CommandTestFactory.createBuilder() - .bodyObject(Map.of(BESCHEID_VOM_BODYKEY, BESCHEID_VOM, GENEHMIGT_BODYKEY, GENEHMIGT)) + .bodyObject( + Map.of(VORGANG_ID_BODYKEY, VORGANG_ID.toString(), + BESCHEID_VOM_BODYKEY, BESCHEID_VOM, + GENEHMIGT_BODYKEY, GENEHMIGT)) .build(); @Test diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidRequestTestFactory.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidRequestTestFactory.java index 09b4686cedaf3d7713e555b9185d4af8a3056221..192ce4bc4a8569976ad5b094ec82581154302e6c 100644 --- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidRequestTestFactory.java +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidRequestTestFactory.java @@ -2,8 +2,12 @@ package de.ozgcloud.bescheid; import java.time.LocalDate; +import de.ozgcloud.bescheid.vorgang.VorgangId; +import de.ozgcloud.bescheid.vorgang.VorgangTestFactory; + public class BescheidRequestTestFactory { + static final VorgangId VORGANG_ID = VorgangTestFactory.ID; static final String BESCHEID_VOM_STRING = "2023-01-04"; static final LocalDate BESCHEID_VOM = LocalDate.parse(BESCHEID_VOM_STRING); static final boolean GENEHMIGT = true; @@ -14,6 +18,7 @@ public class BescheidRequestTestFactory { static BescheidRequest.BescheidRequestBuilder createBuilder() { return BescheidRequest.builder() + .vorgangId(VORGANG_ID) .bescheidVom(BESCHEID_VOM) .genehmigt(GENEHMIGT); diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidServiceTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidServiceTest.java new file mode 100644 index 0000000000000000000000000000000000000000..f9df3743af6aa63d49db308e095b9a8ee15e3dcb --- /dev/null +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidServiceTest.java @@ -0,0 +1,32 @@ +package de.ozgcloud.bescheid; + +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; + +import de.ozgcloud.bescheid.vorgang.VorgangService; +import de.ozgcloud.bescheid.vorgang.VorgangTestFactory; + +class BescheidServiceTest { + + @InjectMocks + private BescheidService service; + + @Mock + private VorgangService vorgangService; + + @Nested + class TestCreateBescheid { + + @Test + void shouldLoadVorgang() { + service.createBescheid(BescheidRequestTestFactory.create()); + + verify(vorgangService).getById(VorgangTestFactory.ID); + } + } + +} diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/vorgang/GrpcEingangTestFactory.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/vorgang/GrpcEingangTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..ca01142e4240b0b73ea065e9b39d23f2304bb24f --- /dev/null +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/vorgang/GrpcEingangTestFactory.java @@ -0,0 +1,14 @@ +package de.ozgcloud.bescheid.vorgang; + +import de.itvsh.ozg.pluto.vorgang.GrpcEingang; + +public class GrpcEingangTestFactory { + + static GrpcEingang create() { + return createBuilder().build(); + } + + static GrpcEingang.Builder createBuilder() { + return GrpcEingang.newBuilder(); + } +} diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/vorgang/GrpcVorgangWithEingangTestFactory.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/vorgang/GrpcVorgangWithEingangTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..59021e95724ee6c1783069375c7fe1b0eab57a51 --- /dev/null +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/vorgang/GrpcVorgangWithEingangTestFactory.java @@ -0,0 +1,26 @@ +package de.ozgcloud.bescheid.vorgang; + +import static de.ozgcloud.bescheid.vorgang.VorgangTestFactory.*; + +import de.itvsh.ozg.pluto.vorgang.GrpcFindVorgangWithEingangResponse; +import de.itvsh.ozg.pluto.vorgang.GrpcVorgangWithEingang; + +class GrpcVorgangWithEingangTestFactory { + + static GrpcVorgangWithEingang create() { + return createBuilder().build(); + } + + static GrpcVorgangWithEingang.Builder createBuilder() { + return GrpcVorgangWithEingang.newBuilder() + .setId(ID.toString()) + .setEingang(GrpcEingangTestFactory.create()); + } + + static GrpcFindVorgangWithEingangResponse createResponse() { + return GrpcFindVorgangWithEingangResponse.newBuilder() + .setVorgangWithEingang(create()) + .build(); + } + +} diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/vorgang/VorgangMapperTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/vorgang/VorgangMapperTest.java new file mode 100644 index 0000000000000000000000000000000000000000..69ee79e2b5fdf79296f15f1ef8214f422105d864 --- /dev/null +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/vorgang/VorgangMapperTest.java @@ -0,0 +1,31 @@ +package de.ozgcloud.bescheid.vorgang; + +import static org.assertj.core.api.Assertions.*; + +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; + +class VorgangMapperTest { + + @InjectMocks + private VorgangMapperImpl mapper; + + @Nested + class TestMapVorgang { + + @Test + void shouldMapEingang() { + var result = mapper.mapVorgang(GrpcVorgangWithEingangTestFactory.create()); + + assertThat(result.getEingang()).isNotNull(); + } + + @Test + void shouldMapVorgangId() { + var result = mapper.mapVorgang(GrpcVorgangWithEingangTestFactory.create()); + + assertThat(result.getId()).isEqualTo(VorgangTestFactory.ID); + } + } +} diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/vorgang/VorgangRemoteServiceTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/vorgang/VorgangRemoteServiceTest.java new file mode 100644 index 0000000000000000000000000000000000000000..99a7dadc627dcc8da12e1f7948ba50f09217fa22 --- /dev/null +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/vorgang/VorgangRemoteServiceTest.java @@ -0,0 +1,65 @@ +package de.ozgcloud.bescheid.vorgang; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import org.junit.jupiter.api.BeforeEach; +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 org.mockito.Spy; + +import de.itvsh.ozg.pluto.vorgang.GrpcFindVorgangWithEingangRequest; +import de.itvsh.ozg.pluto.vorgang.VorgangServiceGrpc.VorgangServiceBlockingStub; + +class VorgangRemoteServiceTest { + + @Spy + @InjectMocks + private VorgangRemoteService service; + + @Mock + private VorgangServiceBlockingStub serviceStub; + @Mock + private VorgangMapper mapper; + + @Nested + class TestGetById { + @Captor + private ArgumentCaptor<GrpcFindVorgangWithEingangRequest> requestCaptor; + + @BeforeEach + void init() { + when(mapper.mapVorgang(any())).thenReturn(VorgangTestFactory.create()); + when(serviceStub.findVorgangWithEingang(any())).thenReturn(GrpcVorgangWithEingangTestFactory.createResponse()); + } + + @Test + void shouldCallStubWithId() { + service.getById(VorgangTestFactory.ID); + + verify(serviceStub).findVorgangWithEingang(requestCaptor.capture()); + assertThat(requestCaptor.getValue()).extracting(GrpcFindVorgangWithEingangRequest::getId).isEqualTo(VorgangTestFactory.ID.toString()); + } + + @Test + void shouldCallMapper() { + service.getById(VorgangTestFactory.ID); + + verify(mapper).mapVorgang(any()); + } + + @Test + void shouldReturnVorgang() { + var vorgang = service.getById(VorgangTestFactory.ID); + + assertThat(vorgang).usingRecursiveComparison().isEqualTo(VorgangTestFactory.create()); + } + + } + +} diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/vorgang/VorgangServiceTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/vorgang/VorgangServiceTest.java new file mode 100644 index 0000000000000000000000000000000000000000..375bd58887096ea7f101b9d07a0c1e1579ce75b1 --- /dev/null +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/vorgang/VorgangServiceTest.java @@ -0,0 +1,46 @@ +package de.ozgcloud.bescheid.vorgang; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; + +class VorgangServiceTest { + + @InjectMocks + private VorgangService service; + + @Mock + private VorgangRemoteService remoteService; + + @Nested + class TestGetById { + + private Vorgang vorgang = VorgangTestFactory.create(); + + @BeforeEach + void init() { + when(remoteService.getById(any())).thenReturn(vorgang); + } + + @Test + void shouldCallRemoteService() { + service.getById(VorgangTestFactory.ID); + + verify(remoteService).getById(VorgangTestFactory.ID); + } + + @Test + void shouldReturnResult() { + var result = service.getById(VorgangTestFactory.ID); + + assertThat(result).isEqualTo(vorgang); + } + } + +} diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/vorgang/VorgangTestFactory.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/vorgang/VorgangTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..2393a6be6404e986943afc4725d0071cfe2ef9bd --- /dev/null +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/vorgang/VorgangTestFactory.java @@ -0,0 +1,18 @@ +package de.ozgcloud.bescheid.vorgang; + +import java.util.UUID; + +public class VorgangTestFactory { + + public static final VorgangId ID = VorgangId.from(UUID.randomUUID().toString()); + + public static Vorgang create() { + return createBuilder().build(); + } + + public static Vorgang.VorgangBuilder createBuilder() { + return Vorgang.builder() + .id(ID); + } + +} diff --git a/bescheid-manager/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/bescheid-manager/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker new file mode 100644 index 0000000000000000000000000000000000000000..ca6ee9cea8ec189a088d50559325d4e84ff8ad09 --- /dev/null +++ b/bescheid-manager/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker @@ -0,0 +1 @@ +mock-maker-inline \ No newline at end of file