Skip to content
Snippets Groups Projects
Commit 4ca9367a authored by OZGCloud's avatar OZGCloud
Browse files

OZG-165 map antragsteller and eingangHeader

parent 5514bdc7
Branches
Tags
No related merge requests found
Showing
with 271 additions and 67 deletions
......@@ -60,7 +60,6 @@ message SubForm {
string title = 1;
repeated Field field = 2;
repeated SubForm subForm = 3;
}
message Field {
......@@ -106,10 +105,5 @@ message PlutoVorgangMitEingang {
string status = 2;
string name = 3;
string createdAt = 4;
EingangInVorgang eingang = 5;
}
message EingangInVorgang {
string id = 1;
string name = 2;
GrpcEingang eingang = 5;
}
\ No newline at end of file
package de.itvsh.ozg.pluto.vorgang;
import org.mapstruct.Mapper;
@Mapper
interface AntragstellerMapper {
PlutoAntragsteller fromGrpc(Antragsteller grpcAntragsteller);
Antragsteller toGrpc(PlutoAntragsteller antragsteller);
}
\ No newline at end of file
......@@ -2,13 +2,13 @@ package de.itvsh.ozg.pluto.vorgang;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
@Builder
public class Eingang {
private String id;
private String name;
private PlutoEingangHeader header;
private PlutoAntragsteller antragsteller;
}
\ No newline at end of file
package de.itvsh.ozg.pluto.vorgang;
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import org.mapstruct.Mapper;
@Mapper
interface EingangHeaderMapper {
PlutoEingangHeader fromGrpc(EingangHeader grpcEingangHeader);
public static ZonedDateTime millisecondsToZonedDateTime(long milliseconds) {
ZonedDateTime zdt = ZonedDateTime.ofInstant(Instant.ofEpochMilli(milliseconds), ZoneId.of("UTC"));
return zdt;
}
EingangHeader toGrpc(PlutoEingangHeader eingangHeader);
public static long zonedDateTimeToMilliseconds(ZonedDateTime zdt) {
long milliseconds = zdt.toEpochSecond();
return milliseconds;
}
}
\ No newline at end of file
package de.itvsh.ozg.pluto.vorgang;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
@Mapper
@Mapper(uses = { AntragstellerMapper.class, EingangHeaderMapper.class })
interface EingangMapper {
@Mapping(target = "id", source = "id")
@Mapping(target = "name", source = "header.formName")
Eingang fromGrpc(GrpcEingang grpcEingang);
GrpcEingang toGrpc(Eingang eingang);
}
\ No newline at end of file
......@@ -62,15 +62,15 @@ class GrpcVorgangService extends VorgangServiceGrpc.VorgangServiceImplBase {
PlutoVorgangMitEingang convertToPlutoVorgangMitEingang(Vorgang vorgang) {
Eingang eingang = vorgang.getEingangs().get(0);
return PlutoVorgangMitEingang.newBuilder()
PlutoVorgangMitEingang vorgangMitEingang = PlutoVorgangMitEingang.newBuilder()
.setId(vorgang.getId())
.setStatus(vorgang.getStatus().toString())
.setName(vorgang.getName())
.setCreatedAt(DateTimeFormatter.ISO_OFFSET_DATE_TIME.format(vorgang.getCreatedAt()))
.setEingang(EingangInVorgang.newBuilder()
.setId(eingang.getId())
.setName(eingang.getName()))
.setEingang(eingangMapper.toGrpc(eingang))
.build();
return vorgangMitEingang;
}
private FindVorgangMitEingangReply buildFindVorgangMitEingangReply(PlutoVorgangMitEingang vorgangMitEingang) {
......
package de.itvsh.ozg.pluto.vorgang;
import lombok.Builder;
import lombok.Getter;
@Getter
@Builder
public class PlutoAntragsteller {
private String anrede;
private String nachname;
private String vorname;
private String geburtsdatum;
private String geburtsort;
private String geburtsname;
}
\ No newline at end of file
package de.itvsh.ozg.pluto.vorgang;
import java.time.ZonedDateTime;
import lombok.Builder;
import lombok.Getter;
@Getter
@Builder
public class PlutoEingangHeader {
private String requestId;
private ZonedDateTime timestamp;
private String formId;
private String formName;
private String sender;
private String customer;
private String customerId;
private String client;
private String clientId;
}
\ No newline at end of file
......@@ -13,8 +13,7 @@ class VorgangService {
public void createVorgang(Eingang eingang) {
repository.save(Vorgang.builder()
.id(eingang.getId())
.name(eingang.getName())
.name(eingang.getHeader().getFormName())
.eingang(eingang)
.build());
}
......
package de.itvsh.ozg.pluto.vorgang;
import static org.assertj.core.api.Assertions.*;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.mapstruct.factory.Mappers;
class AntragstellerMapperTest {
private final AntragstellerMapper mapper = Mappers.getMapper(AntragstellerMapper.class);
@Nested
class TestGrpcAntragstellerMapToPlutoAntragsteller {
@Test
void shouldMapGeburtsdatum() {
GrpcEingang grpcEingang = GrpcEingangTestFactory.create();
var antragsteller = mapper.fromGrpc(grpcEingang.getAntragsteller());
assertThat(antragsteller.getGeburtsdatum().toString()).isEqualTo(GrpcAntragstellerTestFactory.GEBURTSDATUM_STR);
}
@Test
void shouldMapNotSpezificedFields() {
GrpcEingang grpcEingang = GrpcEingangTestFactory.create();
var antragsteller = mapper.fromGrpc(grpcEingang.getAntragsteller());
assertThat(antragsteller.getAnrede()).isEqualTo(GrpcAntragstellerTestFactory.ANREDE);
assertThat(antragsteller.getNachname()).isEqualTo(GrpcAntragstellerTestFactory.NACHNAME);
assertThat(antragsteller.getVorname()).isEqualTo(GrpcAntragstellerTestFactory.VORNAME);
assertThat(antragsteller.getGeburtsname()).isEqualTo(GrpcAntragstellerTestFactory.GEBURTSNAME);
assertThat(antragsteller.getGeburtsort()).isEqualTo(GrpcAntragstellerTestFactory.GEBURTSORT);
}
}
}
\ No newline at end of file
package de.itvsh.ozg.pluto.vorgang;
import com.thedeanda.lorem.LoremIpsum;
public class EingangHeaderTestFactory {
public final static String FORM_NAME = LoremIpsum.getInstance().getName();
public static EingangHeader create() {
return createBuilder().build();
}
public static EingangHeader.Builder createBuilder() {
return EingangHeader.newBuilder()
.setFormName(FORM_NAME);
}
}
\ No newline at end of file
package de.itvsh.ozg.pluto.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.mapstruct.factory.Mappers;
import org.mockito.InjectMocks;
import org.mockito.Mock;
class EingangMapperTest {
@InjectMocks
private EingangMapper mapper = Mappers.getMapper(EingangMapper.class);
@Mock
private AntragstellerMapper antragstellerMapper;
@Mock
private EingangHeaderMapper eingangHeaderMapper;
// TODO: Create TestFactory!?
private final PlutoAntragsteller antragsteller = PlutoAntragsteller.builder().build();
private final PlutoEingangHeader eingangHeader = PlutoEingangHeader.builder().build();
@Nested
class TestGrpcEingangToEingang {
@BeforeEach
void mockMapperReturnValues() {
when(antragstellerMapper.fromGrpc(any())).thenReturn(antragsteller);
when(eingangHeaderMapper.fromGrpc(any())).thenReturn(eingangHeader);
}
@Test
void shouldMapIdToId() {
GrpcEingang grpcEingang = GrpcEingangTestFactory.create();
......@@ -23,12 +44,21 @@ class EingangMapperTest {
}
@Test
void shouldMapHeaderFormNameToName() {
void shouldHaveAntragsteller() {
GrpcEingang grpcEingang = GrpcEingangTestFactory.create();
var eingang = mapper.fromGrpc(grpcEingang);
assertThat(eingang.getAntragsteller()).isEqualTo(antragsteller);
}
@Test
void shouldHaveEingangHeader() {
GrpcEingang grpcEingang = GrpcEingangTestFactory.create();
var eingang = mapper.fromGrpc(grpcEingang);
assertThat(eingang.getName()).isEqualTo(EingangHeaderTestFactory.FORM_NAME);
assertThat(eingang.getHeader()).isEqualTo(eingangHeader);
}
}
}
\ No newline at end of file
package de.itvsh.ozg.pluto.vorgang;
import java.time.ZonedDateTime;
import java.util.UUID;
import com.thedeanda.lorem.LoremIpsum;
......@@ -8,6 +9,10 @@ public class EingangTestFactory {
public static final String ID = UUID.randomUUID().toString();
public static final String NAME = LoremIpsum.getInstance().getName();
public static final ZonedDateTime TIMESTAMP_AS_ZONED_DATE_TIME = ZonedDateTime.now();
public static final String FORM_NAME = LoremIpsum.getInstance().getWords(10);
public static final String GEBURTSDATUM = "1950-01-01";
public static Eingang create() {
return createBuilder().build();
......@@ -16,16 +21,12 @@ public class EingangTestFactory {
public static Eingang.EingangBuilder createBuilder() {
return Eingang.builder()
.id(ID)
.name(NAME);
}
public static EingangInVorgang createInVorgang() {
return createInVorgangBuilder().build();
}
public static EingangInVorgang.Builder createInVorgangBuilder() {
return EingangInVorgang.newBuilder()
.setId(ID)
.setName(NAME);
.header(PlutoEingangHeader.builder()
.timestamp(TIMESTAMP_AS_ZONED_DATE_TIME)
.formName(FORM_NAME)
.build())
.antragsteller(PlutoAntragsteller.builder()
.geburtsdatum(GEBURTSDATUM)
.build());
}
}
\ No newline at end of file
package de.itvsh.ozg.pluto.vorgang;
import java.util.Collections;
import java.util.List;
import com.thedeanda.lorem.LoremIpsum;
public class GrpcAntragstellerTestFactory {
public final static String ANREDE = "HERR/FRAU";
public final static String NACHNAME = LoremIpsum.getInstance().getLastName();
public final static String VORNAME = LoremIpsum.getInstance().getFirstName();
public final static String GEBURTSDATUM_STR = "1995-03-21";
public final static String GEBURTSORT = LoremIpsum.getInstance().getCountry();
public final static String GEBURTSNAME = LoremIpsum.getInstance().getFirstName();
public static final List<SubForm> SUB_FORM_LIST = Collections.singletonList(
SubForm.newBuilder().setTitle("TestTitle").build());
public static final List<Field> OTHER_FIELD_LIST = Collections.singletonList(
Field.newBuilder().setName("TestName").setValue("TestValue").build());
public static Antragsteller create() {
return createBuilder().build();
}
public static Antragsteller.Builder createBuilder() {
return Antragsteller.newBuilder()
.setAnrede(ANREDE)
.setGeburtsdatum(GEBURTSDATUM_STR)
.setNachname(NACHNAME)
.setVorname(VORNAME)
.setGeburtsname(GEBURTSNAME)
.setGeburtsort(GEBURTSORT)
.addAllSubForm(SUB_FORM_LIST)
.addAllOtherField(OTHER_FIELD_LIST);
}
}
\ No newline at end of file
package de.itvsh.ozg.pluto.vorgang;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.UUID;
import com.thedeanda.lorem.LoremIpsum;
public class GrpcEingangHeaderTestFactory {
private final static String REQUEST_ID = UUID.randomUUID().toString();
private final static long TIMESTAMP = LocalDateTime.now().toEpochSecond(ZoneOffset.UTC);
private final static String FORM_ID = UUID.randomUUID().toString();
public final static String FORM_NAME = LoremIpsum.getInstance().getWords(1);
private final static String SENDER = LoremIpsum.getInstance().getName();
private final static String CUSTOMER = LoremIpsum.getInstance().getName();
private final static String CUSTOMER_ID = UUID.randomUUID().toString();
private final static String CLIENT = LoremIpsum.getInstance().getName();
private final static String CLIENT_ID = UUID.randomUUID().toString();
public static EingangHeader create() {
return createBuilder().build();
}
public static EingangHeader.Builder createBuilder() {
return EingangHeader.newBuilder()
.setRequestId(REQUEST_ID)
.setTimestamp(TIMESTAMP)
.setFormId(FORM_ID)
.setFormName(FORM_NAME)
.setSender(SENDER)
.setCustomer(CUSTOMER)
.setCustomerId(CUSTOMER_ID)
.setClient(CLIENT)
.setClientId(CLIENT_ID);
}
}
\ No newline at end of file
package de.itvsh.ozg.pluto.vorgang;
import java.util.Collections;
import java.util.List;
import java.util.UUID;
public class GrpcEingangTestFactory {
public final static String ID = UUID.randomUUID().toString();
public static final String ID = UUID.randomUUID().toString();
public static final List<SubForm> FORM_LIST = Collections.singletonList(
SubForm.newBuilder().setTitle("TestTitle").build());
public static GrpcEingang create() {
return createBuilder().build();
......@@ -13,6 +17,8 @@ public class GrpcEingangTestFactory {
public static GrpcEingang.Builder createBuilder() {
return GrpcEingang.newBuilder()
.setId(ID)
.setHeader(EingangHeaderTestFactory.create());
.setHeader(GrpcEingangHeaderTestFactory.create())
.setAntragsteller(GrpcAntragstellerTestFactory.create())
.addAllForm(FORM_LIST);
}
}
\ No newline at end of file
......@@ -43,11 +43,17 @@ class GrpcVorgangServiceTest {
@Nested
class TestCreateVorgang {
private final CreateVorgangRequest request = CreateVorgangRequest.newBuilder().build();
private final CreateVorgangRequest request = CreateVorgangRequest.newBuilder().setEingang(GrpcEingangTestFactory.create()).build();
private final StreamRecorder<CreateVorgangReply> responseObserver = StreamRecorder.create();
private final Eingang eingang = EingangTestFactory.create();
@BeforeEach
void mockMapperReturnValues() {
when(eingangMapper.fromGrpc(any())).thenReturn(eingang);
}
@Test
void shouldCallMapper() throws Exception {
void shouldCallEingangMapper() throws Exception {
callCreateVorgang();
verify(eingangMapper).fromGrpc(request.getEingang());
......@@ -55,9 +61,6 @@ class GrpcVorgangServiceTest {
@Test
void shouldCallService() throws Exception {
Eingang eingang = EingangTestFactory.create();
when(eingangMapper.fromGrpc(any())).thenReturn(eingang);
callCreateVorgang();
verify(vorgangService).createVorgang(eingang);
......@@ -157,6 +160,7 @@ class GrpcVorgangServiceTest {
@BeforeEach
void initMockReturnValues() {
when(vorgangService.findById(anyString())).thenReturn(VorgangTestFactory.create());
when(eingangMapper.toGrpc(any())).thenReturn(GrpcEingangTestFactory.create());
}
@Test
......@@ -185,8 +189,9 @@ class GrpcVorgangServiceTest {
var reply = responseObserver.getValues();
assertThat(reply).hasSize(1);
assertThat(reply.get(0).getVorgangMitEingang().getEingang().getId()).isEqualTo(EingangTestFactory.ID);
assertThat(reply.get(0).getVorgangMitEingang().getEingang().getName()).isEqualTo(EingangTestFactory.NAME);
// TODO
// assertThat(reply.get(0).getVorgangMitEingang().getEingang().getId()).isEqualTo(VorgangTestFactory.ID);
assertThat(reply.get(0).getVorgangMitEingang().getEingang().getHeader().getFormName()).isEqualTo(GrpcEingangHeaderTestFactory.FORM_NAME);
}
private void callFindVorgangMitEingang() throws Exception {
......
......@@ -9,16 +9,13 @@ import java.util.Optional;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import de.itvsh.ozg.pluto.common.errorhandling.ResourceNotFoundException;
@ExtendWith(MockitoExtension.class)
class VorgangServiceTest {
@InjectMocks
......@@ -40,8 +37,7 @@ class VorgangServiceTest {
service.createVorgang(eingang);
verify(repository).save(vorgangCaptor.capture());
assertThat(vorgangCaptor.getValue().getId()).isEqualTo(EingangTestFactory.ID);
assertThat(vorgangCaptor.getValue().getName()).isEqualTo(EingangTestFactory.NAME);
assertThat(vorgangCaptor.getValue().getName()).isEqualTo(EingangTestFactory.FORM_NAME);
assertThat(vorgangCaptor.getValue().getStatus()).isEqualTo(Vorgang.Status.NEU);
}
......@@ -53,7 +49,8 @@ class VorgangServiceTest {
verify(repository).save(vorgangCaptor.capture());
assertThat(vorgangCaptor.getValue().getEingangs().get(0).getId()).isEqualTo(EingangTestFactory.ID);
assertThat(vorgangCaptor.getValue().getEingangs().get(0).getName()).isEqualTo(EingangTestFactory.NAME);
// TODO
// assertThat(vorgangCaptor.getValue().getEingangs().get(0).getHeader().getFormName()).isEqualTo(EingangTestFactory.NAME);
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment