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

OZG-3284 Map data and call semantik adapter

parent 0f24a9e2
No related branches found
No related tags found
No related merge requests found
Showing
with 274 additions and 23 deletions
...@@ -41,6 +41,23 @@ ...@@ -41,6 +41,23 @@
</properties> </properties>
<dependencies> <dependencies>
<!--own project-->
<dependency>
<groupId>de.itvsh.ozg.pluto</groupId>
<artifactId>pluto-utils</artifactId>
</dependency>
<dependency>
<groupId>de.itvsh.ozg.pluto</groupId>
<artifactId>pluto-utils</artifactId>
<type>test-jar</type>
</dependency>
<dependency>
<groupId>de.itvsh.kop.eingangsadapter</groupId>
<artifactId>common</artifactId>
<type>test-jar</type>
</dependency>
<!--spring-->
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId> <artifactId>spring-boot-starter-web</artifactId>
...@@ -51,6 +68,10 @@ ...@@ -51,6 +68,10 @@
<artifactId>formcycle-adapter-interface</artifactId> <artifactId>formcycle-adapter-interface</artifactId>
<version>${formcycle-interface.version}</version> <version>${formcycle-interface.version}</version>
</dependency> </dependency>
<dependency>
<groupId>de.itvsh.kop.eingangsadapter</groupId>
<artifactId>semantik-adapter</artifactId>
</dependency>
</dependencies> </dependencies>
<build> <build>
......
package de.itvsh.kop.eingang.formcycle;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import de.itvsh.kop.eingangsadapter.common.formdata.FormData;
import de.itvsh.kop.eingangsadapter.formcycle.FormCycleFormData;
import de.itvsh.kop.pluto.common.grpc.GrpcFormDataMapper;
@Mapper(uses = GrpcFormDataMapper.class)
public interface FormCycleFormDataMapper {
@Mapping(target = "antragsteller", ignore = true)
@Mapping(target = "attachment", ignore = true)
@Mapping(target = "attachments", ignore = true)
@Mapping(target = "id", ignore = true)
@Mapping(target = "numberOfAttachments", ignore = true)
@Mapping(target = "numberOfRepresentations", ignore = true)
@Mapping(target = "representation", ignore = true)
@Mapping(target = "representations", ignore = true)
@Mapping(target = "zustaendigeStelle", ignore = true)
@Mapping(target = "header.formEngineName", constant = "FormCycle")
@Mapping(target = "header.createdAt", source = "header.receivedAt")
FormData toFormData(FormCycleFormData fcFormData);
}
...@@ -7,15 +7,23 @@ import org.springframework.web.bind.annotation.RequestMapping; ...@@ -7,15 +7,23 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseBody;
import de.itvsh.kop.eingangsadapter.formcycle.ConfirmationResponse; import de.itvsh.kop.eingangsadapter.formcycle.ConfirmationResponse;
import de.itvsh.kop.eingangsadapter.formcycle.ProtobufFormData; import de.itvsh.kop.eingangsadapter.formcycle.FormCycleFormData;
import de.itvsh.kop.eingangsadapter.semantik.SemantikAdapter;
import lombok.RequiredArgsConstructor;
@Controller @Controller
@ResponseBody @ResponseBody
@RequestMapping("formData") @RequestMapping("formData")
@RequiredArgsConstructor
class FormDataController { class FormDataController {
private final FormCycleFormDataMapper mapper;
private final SemantikAdapter semantikAdapter;
@PostMapping(consumes = "application/protobuf", produces = "application/protobuf") @PostMapping(consumes = "application/protobuf", produces = "application/protobuf")
public ConfirmationResponse receiveFormData(@RequestBody ProtobufFormData formData) { public ConfirmationResponse receiveFormData(@RequestBody FormCycleFormData formData) {
return ConfirmationResponse.newBuilder().setVorgangNummer("abc").build(); semantikAdapter.processFormData(mapper.toFormData(formData));
return ConfirmationResponse.newBuilder().setVorgangNummer("TODO FILL ME").build();
} }
} }
...@@ -4,12 +4,21 @@ import java.util.TimeZone; ...@@ -4,12 +4,21 @@ import java.util.TimeZone;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
@SpringBootApplication import de.itvsh.kop.eingangsadapter.semantik.enginebased.EngineBasedSemantikAdapter;
import de.itvsh.kop.eingangsadapter.semantik.enginebased.formcycle.FormCycleEngineBasedAdapter;
@SpringBootApplication(scanBasePackages = "de.itvsh.kop")
public class FormcycleAdapterApplication { public class FormcycleAdapterApplication {
public static void main(String[] args) { public static void main(String[] args) {
TimeZone.setDefault(TimeZone.getTimeZone("UTC")); TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
SpringApplication.run(FormcycleAdapterApplication.class, args); SpringApplication.run(FormcycleAdapterApplication.class, args);
} }
@Bean
public EngineBasedSemantikAdapter engineBasedAdapter() {
return new FormCycleEngineBasedAdapter();
}
} }
logging:
config: classpath:log4j2-local.xml
server: server:
error: error:
include-stacktrace: always include-stacktrace: always
kop:
adapter:
targetPlutoName: local
fallbackStrategy: DENY
\ No newline at end of file
...@@ -3,6 +3,10 @@ logging: ...@@ -3,6 +3,10 @@ logging:
ROOT: WARN ROOT: WARN
'[de.itvsh]': INFO '[de.itvsh]': INFO
spring:
profiles:
include: formcycle
server: server:
http2: http2:
enabled: true enabled: true
...@@ -31,3 +35,7 @@ management: ...@@ -31,3 +35,7 @@ management:
web: web:
exposure: exposure:
include: health,prometheus include: health,prometheus
kop:
adapter:
routingStrategy: SINGLE
\ No newline at end of file
package de.itvsh.kop.eingang.formcycle;
import static org.assertj.core.api.Assertions.*;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.mapstruct.factory.Mappers;
import org.mockito.InjectMocks;
import org.mockito.Spy;
import de.itvsh.kop.pluto.common.grpc.GrpcFormDataMapper;
class FormCycleFormDataMapperTest {
@InjectMocks
private FormCycleFormDataMapper mapper = Mappers.getMapper(FormCycleFormDataMapper.class);
@Spy
private GrpcFormDataMapper formDataMapper = Mappers.getMapper(GrpcFormDataMapper.class);
@Nested
class TestToFormData {
@Test
void shouldMapHeader() {
var mapped = mapper.toFormData(FormCycleFormDataTestFactory.create());
assertThat(mapped.getHeader()).isNotNull();
}
}
}
package de.itvsh.kop.eingang.formcycle;
import de.itvsh.kop.eingangsadapter.formcycle.FormCycleFormData;
import de.itvsh.kop.eingangsadapter.formcycle.FormCycleFormData.Builder;
import de.itvsh.kop.pluto.common.grpc.GrpcFormDataTestFactory;
class FormCycleFormDataTestFactory {
static FormCycleFormData create() {
return createBuilder().build();
}
static Builder createBuilder() {
return FormCycleFormData.newBuilder()
.setHeader(FormCycleFormHeaderTestFactory.create())
.setServiceKonto(FormCycleServiceKontoTestFactory.create())
.setFormData(GrpcFormDataTestFactory.create());
}
}
package de.itvsh.kop.eingang.formcycle;
import de.itvsh.kop.eingangsadapter.formcycle.FormCycleFormHeader;
import de.itvsh.kop.eingangsadapter.formcycle.FormCycleFormHeader.Builder;
public class FormCycleFormHeaderTestFactory {
static final String RECEIVED_AT = "2022-12-24T18:00:00Z";
static final String FORM_NAME = "test form 1";
static FormCycleFormHeader create() {
return createBuilder().build();
}
static Builder createBuilder() {
return FormCycleFormHeader.newBuilder()
.setFormName(FORM_NAME)
.setReceivedAt(RECEIVED_AT);
}
}
package de.itvsh.kop.eingang.formcycle;
import de.itvsh.kop.eingangsadapter.formcycle.FormCycleServiceKonto;
import de.itvsh.kop.eingangsadapter.formcycle.FormCycleServiceKonto.Builder;
public class FormCycleServiceKontoTestFactory {
static FormCycleServiceKonto create() {
return createBuilder().build();
}
static Builder createBuilder() {
return FormCycleServiceKonto.newBuilder();
}
}
package de.itvsh.kop.eingang.formcycle; package de.itvsh.kop.eingang.formcycle;
import static org.assertj.core.api.Assertions.*; import static org.assertj.core.api.Assertions.*;
import static org.mockito.ArgumentMatchers.*;
import static org.mockito.Mockito.*;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
...@@ -10,14 +12,16 @@ import org.junit.jupiter.api.BeforeEach; ...@@ -10,14 +12,16 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks; import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.ResultActions; import org.springframework.test.web.servlet.ResultActions;
import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import de.itvsh.kop.eingang.formcycle.common.protobuf.ProtobufMessageConverter; import de.itvsh.kop.eingang.formcycle.common.protobuf.ProtobufMessageConverter;
import de.itvsh.kop.eingangsadapter.common.formdata.FormData;
import de.itvsh.kop.eingangsadapter.common.formdata.FormDataTestFactory;
import de.itvsh.kop.eingangsadapter.formcycle.ConfirmationResponse; import de.itvsh.kop.eingangsadapter.formcycle.ConfirmationResponse;
import de.itvsh.kop.eingangsadapter.formcycle.ProtobufFormData; import de.itvsh.kop.eingangsadapter.semantik.SemantikAdapter;
import de.itvsh.kop.eingangsadapter.formcycle.ProtobufFormHeader;
import lombok.SneakyThrows; import lombok.SneakyThrows;
class FormDataControllerTest { class FormDataControllerTest {
...@@ -25,6 +29,11 @@ class FormDataControllerTest { ...@@ -25,6 +29,11 @@ class FormDataControllerTest {
@InjectMocks @InjectMocks
private FormDataController controller; private FormDataController controller;
@Mock
private FormCycleFormDataMapper mapper;
@Mock
private SemantikAdapter semantikAdapter;
private MockMvc mockMvc; private MockMvc mockMvc;
@BeforeEach @BeforeEach
...@@ -36,6 +45,14 @@ class FormDataControllerTest { ...@@ -36,6 +45,14 @@ class FormDataControllerTest {
@Nested @Nested
class ReceiveFormData { class ReceiveFormData {
private FormData mappedFormData = FormDataTestFactory.create();
@BeforeEach
void init() {
when(mapper.toFormData(any())).thenReturn(mappedFormData);
}
@Test @Test
void shouldReturnSuccess() throws Exception { void shouldReturnSuccess() throws Exception {
doPostRequest().andExpect(status().is2xxSuccessful()); doPostRequest().andExpect(status().is2xxSuccessful());
...@@ -47,7 +64,21 @@ class FormDataControllerTest { ...@@ -47,7 +64,21 @@ class FormDataControllerTest {
var confirmation = ConfirmationResponse.parseFrom( var confirmation = ConfirmationResponse.parseFrom(
doPostRequest().andReturn().getResponse().getContentAsByteArray()); doPostRequest().andReturn().getResponse().getContentAsByteArray());
assertThat(confirmation.getVorgangNummer()).isEqualTo("abc"); assertThat(confirmation.getVorgangNummer()).isEqualTo("TODO FILL ME");
}
@Test
void shouldCallMapper() {
doPostRequest();
verify(mapper).toFormData(notNull());
}
@Test
void shouldCallSemantikAdapter() {
doPostRequest();
verify(semantikAdapter).processFormData(mappedFormData);
} }
@SneakyThrows @SneakyThrows
...@@ -60,10 +91,8 @@ class FormDataControllerTest { ...@@ -60,10 +91,8 @@ class FormDataControllerTest {
@SneakyThrows @SneakyThrows
static byte[] buildTestFormData() { static byte[] buildTestFormData() {
var header = ProtobufFormHeader.newBuilder().setFormName("test form 1").build();
var formData = ProtobufFormData.newBuilder().setHeader(header).build();
var out = new ByteArrayOutputStream(); var out = new ByteArrayOutputStream();
formData.writeTo(out); FormCycleFormDataTestFactory.create().writeTo(out);
return out.toByteArray(); return out.toByteArray();
} }
......
...@@ -25,7 +25,8 @@ syntax = "proto3"; ...@@ -25,7 +25,8 @@ syntax = "proto3";
package de.itvsh.kop.eingangsadapter.formcycle; package de.itvsh.kop.eingangsadapter.formcycle;
import "common.model.proto"; /*import "common.model.proto";*/
import "vorgangmodel.proto";
option java_multiple_files = true; option java_multiple_files = true;
option java_package = "de.itvsh.kop.eingangsadapter.formcycle"; option java_package = "de.itvsh.kop.eingangsadapter.formcycle";
...@@ -35,24 +36,24 @@ message ConfirmationResponse { ...@@ -35,24 +36,24 @@ message ConfirmationResponse {
string vorgangNummer = 1; string vorgangNummer = 1;
} }
message ProtobufFormData { message FormCycleFormData {
ProtobufFormHeader header = 1; FormCycleFormHeader header = 1;
ProtobufServiceKonto serviceKonto = 2; FormCycleServiceKonto serviceKonto = 2;
de.itvsh.ozg.pluto.common.GrpcObject formData = 3; de.itvsh.ozg.pluto.vorgang.GrpcFormData formData = 3;
} }
message ProtobufFormHeader { message FormCycleFormHeader {
string receivedAt = 1; string receivedAt = 1;
string formName = 2; string formName = 2;
string organisationsEinheitId = 3; string organisationsEinheitId = 3;
} }
message ProtobufServiceKonto { message FormCycleServiceKonto {
string type = 1; string type = 1;
ProtobufPostfachAddress address = 2; FormCyclePostfachAddress address = 2;
} }
message ProtobufPostfachAddress { message FormCyclePostfachAddress {
string version = 1; string version = 1;
string identifier = 2; string identifier = 2;
} }
\ No newline at end of file
...@@ -45,6 +45,24 @@ ...@@ -45,6 +45,24 @@
<properties> <properties>
<spring-boot.build-image.imageName>docker.ozg-sh.de/formcycle-adapter:build-latest</spring-boot.build-image.imageName> <spring-boot.build-image.imageName>docker.ozg-sh.de/formcycle-adapter:build-latest</spring-boot.build-image.imageName>
<pluto.version>1.3.0-SNAPSHOT</pluto.version>
</properties> </properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>de.itvsh.ozg.pluto</groupId>
<artifactId>pluto-utils</artifactId>
<version>${pluto.version}</version>
</dependency>
<dependency>
<groupId>de.itvsh.ozg.pluto</groupId>
<artifactId>pluto-utils</artifactId>
<version>${pluto.version}</version>
<type>test-jar</type>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project> </project>
\ No newline at end of file
package de.itvsh.kop.eingangsadapter.semantik.enginebased.formcycle;
import de.itvsh.kop.eingangsadapter.common.formdata.FormData;
import de.itvsh.kop.eingangsadapter.semantik.enginebased.EngineBasedSemantikAdapter;
public class FormCycleEngineBasedAdapter implements EngineBasedSemantikAdapter {
@Override
public FormData parseFormData(FormData formData) {
return formData;
}
}
package de.itvsh.kop.eingangsadapter.semantik.enginebased.formcycle;
import static org.assertj.core.api.Assertions.*;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import de.itvsh.kop.eingangsadapter.common.formdata.FormDataTestFactory;
class FormCycleEngineBasedAdapterTest {
@InjectMocks
private FormCycleEngineBasedAdapter adapter;
@Test
void shouldUnprocessedData() {
var formData = FormDataTestFactory.create();
var result = adapter.parseFormData(formData);
assertThat(result).isSameAs(formData);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment