Skip to content
Snippets Groups Projects
Commit 19f5a52d authored by Tobias Bruns's avatar Tobias Bruns
Browse files

OZG-7689 check parsing json

parent 31b61e41
No related tags found
1 merge request!3Ozg 7689 erweitern
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
<parent> <parent>
<groupId>de.ozgcloud.common</groupId> <groupId>de.ozgcloud.common</groupId>
<artifactId>ozgcloud-common-parent</artifactId> <artifactId>ozgcloud-common-parent</artifactId>
<version>4.9.0</version> <version>4.10.0</version>
</parent> </parent>
<groupId>de.ozgcloud.processor</groupId> <groupId>de.ozgcloud.processor</groupId>
...@@ -43,7 +43,7 @@ ...@@ -43,7 +43,7 @@
<description>OZG-Cloud Processor Manager</description> <description>OZG-Cloud Processor Manager</description>
<properties> <properties>
<vorgang-manager.version>2.23.0-SNAPSHOT</vorgang-manager.version> <vorgang-manager.version>2.25.0-SNAPSHOT</vorgang-manager.version>
<api-lib.version>0.13.0</api-lib.version> <api-lib.version>0.13.0</api-lib.version>
<tyrus-standalone-client.version>2.2.0</tyrus-standalone-client.version> <tyrus-standalone-client.version>2.2.0</tyrus-standalone-client.version>
<okio.version>3.9.1</okio.version> <okio.version>3.9.1</okio.version>
......
...@@ -37,7 +37,6 @@ import lombok.NoArgsConstructor; ...@@ -37,7 +37,6 @@ import lombok.NoArgsConstructor;
@Getter @Getter
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
//TODO default config of jackson should already ignore unkown properties
@JsonIgnoreProperties(ignoreUnknown = true) @JsonIgnoreProperties(ignoreUnknown = true)
public class Aktennotiz { public class Aktennotiz {
......
...@@ -29,6 +29,7 @@ import java.time.Duration; ...@@ -29,6 +29,7 @@ import java.time.Duration;
import java.util.Collections; import java.util.Collections;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import org.apache.commons.lang3.tuple.Pair;
import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.DisplayName;
...@@ -39,13 +40,20 @@ import org.junit.jupiter.params.provider.NullAndEmptySource; ...@@ -39,13 +40,20 @@ import org.junit.jupiter.params.provider.NullAndEmptySource;
import org.junit.jupiter.params.provider.ValueSource; import org.junit.jupiter.params.provider.ValueSource;
import org.mockito.Mock; import org.mockito.Mock;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import org.springframework.test.context.bean.override.mockito.MockitoSpyBean;
import org.springframework.test.util.ReflectionTestUtils; import org.springframework.test.util.ReflectionTestUtils;
import com.fasterxml.jackson.databind.DeserializationFeature;
import de.ozgcloud.common.test.ITCase; import de.ozgcloud.common.test.ITCase;
import de.ozgcloud.common.test.TestUtils;
import de.ozgcloud.processor.processor.ProcessorProperties.Processor; import de.ozgcloud.processor.processor.ProcessorProperties.Processor;
import de.ozgcloud.processor.result.AktennotizTestFactory;
import de.ozgcloud.processor.result.ResultService; import de.ozgcloud.processor.result.ResultService;
import de.ozgcloud.processor.result.Severity; import de.ozgcloud.processor.result.Severity;
import de.ozgcloud.processor.vorgang.Vorgang; import de.ozgcloud.processor.vorgang.Vorgang;
...@@ -76,13 +84,6 @@ class ProcessorServiceITCase { ...@@ -76,13 +84,6 @@ class ProcessorServiceITCase {
@BeforeEach @BeforeEach
void setup() { void setup() {
processor = ProcessorTestFactory.createBuilder().address(mockWebServer.url("/").toString()).build(); processor = ProcessorTestFactory.createBuilder().address(mockWebServer.url("/").toString()).build();
mockWebServer.enqueue(createMockResponse());
}
private MockResponse createMockResponse() {
return new MockResponse()
.addHeader("Content-Type", "application/json")
.setBody("{\"%s\": \"%s\"}".formatted(ProcessorResultTestFactory.KEY_RESULT_ACTION, ProcessorResultTestFactory.RESULT_ACTION));
} }
@AfterEach @AfterEach
...@@ -93,17 +94,48 @@ class ProcessorServiceITCase { ...@@ -93,17 +94,48 @@ class ProcessorServiceITCase {
@Test @Test
void shouldSendVorgangIdAsString() { void shouldSendVorgangIdAsString() {
mockWebServer.enqueue(createMockResponse(
"{\"%s\": \"%s\"}".formatted(ProcessorResultTestFactory.KEY_RESULT_ACTION, ProcessorResultTestFactory.RESULT_ACTION)));
var vorgang = VorgangTestFactory.create(); var vorgang = VorgangTestFactory.create();
var request = sendRequest(processor, vorgang); var request = sendRequest(processor, vorgang).getLeft();
assertThat(request.getBody().readUtf8()).contains("\"vorgangId\":\"" + vorgang.getId() + "\""); assertThat(request.getBody().readUtf8()).contains("\"vorgangId\":\"" + vorgang.getId() + "\"");
} }
@Test
void shouldReadResonse() {
mockWebServer.enqueue(createMockResponse(
TestUtils.loadTextFile("results/createAktennotiz.json", VorgangTestFactory.ID.toString(), VorgangTestFactory.ID.toString())));
var vorgang = VorgangTestFactory.create();
var response = sendRequest(processor, vorgang).getRight();
assertThat(response.getBody()).usingRecursiveComparison().ignoringFields("vorgangId").isEqualTo(AktennotizTestFactory.create());
}
@Test
void shouldReadWithUnkownField() {
mockWebServer.enqueue(createMockResponse(
TestUtils.loadTextFile("results/createAktennotiz_unkownField.json", VorgangTestFactory.ID.toString(),
VorgangTestFactory.ID.toString())));
assertThat(sendRequest(processor, VorgangTestFactory.create()).getValue().getBody()).usingRecursiveComparison()
.ignoringFields("vorgangId").isEqualTo(AktennotizTestFactory.create());
}
private MockResponse createMockResponse(String response) {
return new MockResponse()
.addHeader("Content-Type", "application/json")
.setBody(response);
}
@SneakyThrows @SneakyThrows
private RecordedRequest sendRequest(Processor processor, Vorgang vorgang) { private Pair<RecordedRequest, ProcessorResult> sendRequest(Processor processor, Vorgang vorgang) {
service.callProcessor(processor, vorgang).block(Duration.ofMillis(1000)); var result = service.callProcessor(processor, vorgang).block(Duration.ofMillis(1000));
return mockWebServer.takeRequest(100, TimeUnit.MILLISECONDS);
return Pair.of(mockWebServer.takeRequest(100, TimeUnit.MILLISECONDS), result);
} }
} }
...@@ -268,4 +300,13 @@ class ProcessorServiceITCase { ...@@ -268,4 +300,13 @@ class ProcessorServiceITCase {
assertThat(result).isEmpty(); assertThat(result).isEmpty();
} }
} }
}
@Configuration
class JacksonConfiguration {
@Bean
Jackson2ObjectMapperBuilderCustomizer jsonCustomizer() {
return builder -> builder.featuresToEnable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
}
} }
\ No newline at end of file
{
"vorgangId": "%s",
"action": "CREATE_AKTENNOTIZ",
"body": {
"vorgangId": "%s",
"severity": "INFO",
"headline": "Headline",
"text": "Text"
}
}
\ No newline at end of file
{
"vorgangId": "%s",
"action": "CREATE_AKTENNOTIZ",
"body": {
"vorgangId": "%s",
"severity": "INFO",
"headline": "Headline",
"text": "Text",
"new": "unkown"
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment