From 4b94c667b162dbd49845fb73bc395d82bd0594ba Mon Sep 17 00:00:00 2001 From: Tristan Chuine Date: Wed, 19 Jun 2024 12:31:34 +0200 Subject: [PATCH] Update test --- pom.xml | 16 +-- .../computation/ComputationConfig.java | 17 +++ .../computation/config/JacksonConfig.java | 14 -- .../service/ReportServiceTest.java | 132 +++++++----------- .../SpringBootApplicationForTest.java | 3 +- 5 files changed, 75 insertions(+), 107 deletions(-) create mode 100644 src/main/java/com/powsybl/ws/commons/computation/ComputationConfig.java delete mode 100644 src/main/java/com/powsybl/ws/commons/computation/config/JacksonConfig.java diff --git a/pom.xml b/pom.xml index e12a657..dd398be 100644 --- a/pom.xml +++ b/pom.xml @@ -132,22 +132,18 @@ org.springframework.boot spring-boot-starter-web test + + + ch.qos.logback + logback-classic + + org.springframework.boot spring-boot-starter-test test - - com.squareup.okhttp3 - okhttp - test - - - com.squareup.okhttp3 - mockwebserver - test - org.aspectj diff --git a/src/main/java/com/powsybl/ws/commons/computation/ComputationConfig.java b/src/main/java/com/powsybl/ws/commons/computation/ComputationConfig.java new file mode 100644 index 0000000..b2685f0 --- /dev/null +++ b/src/main/java/com/powsybl/ws/commons/computation/ComputationConfig.java @@ -0,0 +1,17 @@ +package com.powsybl.ws.commons.computation; + +import com.fasterxml.jackson.databind.InjectableValues; +import com.powsybl.commons.report.ReportNodeDeserializer; +import com.powsybl.commons.report.ReportNodeJsonModule; +import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class ComputationConfig { + @Bean + public Jackson2ObjectMapperBuilderCustomizer jsonCustomizer() { + return builder -> builder.modulesToInstall(new ReportNodeJsonModule()) + .postConfigurer(objMapper -> objMapper.setInjectableValues(new InjectableValues.Std().addValue(ReportNodeDeserializer.DICTIONARY_VALUE_ID, null))); + } +} diff --git a/src/main/java/com/powsybl/ws/commons/computation/config/JacksonConfig.java b/src/main/java/com/powsybl/ws/commons/computation/config/JacksonConfig.java deleted file mode 100644 index 6009c8d..0000000 --- a/src/main/java/com/powsybl/ws/commons/computation/config/JacksonConfig.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.powsybl.ws.commons.computation.config; - -import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import com.powsybl.commons.report.ReportNodeJsonModule; - -@Configuration -public class JacksonConfig { - @Bean - public Jackson2ObjectMapperBuilderCustomizer jsonCustomizer() { - return builder -> builder.build().registerModule(new ReportNodeJsonModule()); - } -} diff --git a/src/test/java/com/powsybl/ws/commons/computation/service/ReportServiceTest.java b/src/test/java/com/powsybl/ws/commons/computation/service/ReportServiceTest.java index c13f370..57c6556 100644 --- a/src/test/java/com/powsybl/ws/commons/computation/service/ReportServiceTest.java +++ b/src/test/java/com/powsybl/ws/commons/computation/service/ReportServiceTest.java @@ -7,113 +7,83 @@ package com.powsybl.ws.commons.computation.service; -import com.fasterxml.jackson.databind.InjectableValues; -import com.fasterxml.jackson.databind.SerializationFeature; import com.powsybl.commons.report.ReportNode; -import com.powsybl.commons.report.ReportNodeDeserializer; -import com.powsybl.commons.report.ReportNodeJsonModule; -import lombok.extern.slf4j.Slf4j; -import okhttp3.HttpUrl; -import okhttp3.mockwebserver.Dispatcher; -import okhttp3.mockwebserver.MockResponse; -import okhttp3.mockwebserver.MockWebServer; -import okhttp3.mockwebserver.RecordedRequest; -import org.jetbrains.annotations.NotNull; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.http.HttpStatus; -import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; -import org.springframework.test.context.junit4.SpringRunner; +import com.powsybl.ws.commons.computation.ComputationConfig; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.client.AutoConfigureWebClient; +import org.springframework.boot.test.autoconfigure.web.client.RestClientTest; +import org.springframework.http.HttpMethod; +import org.springframework.http.MediaType; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.web.client.MockRestServiceServer; +import org.springframework.test.web.client.match.MockRestRequestMatchers; +import org.springframework.test.web.client.response.MockRestResponseCreators; import org.springframework.web.client.RestClientException; -import org.springframework.web.client.RestTemplate; -import java.io.IOException; -import java.util.Objects; import java.util.UUID; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThrows; +import static org.assertj.core.api.Assertions.*; /** * @author Mathieu Deharbe reportService.sendReport(REPORT_UUID, reportNode)); } - private String initMockWebServer() throws IOException { - server = new MockWebServer(); - server.start(); - - final Dispatcher dispatcher = new Dispatcher() { - @NotNull - @Override - public MockResponse dispatch(RecordedRequest request) { - String requestPath = Objects.requireNonNull(request.getPath()); - if (requestPath.equals(String.format("/v1/reports/%s", REPORT_UUID))) { - assertEquals(REPORT_JSON, request.getBody().readUtf8()); - return new MockResponse().setResponseCode(HttpStatus.OK.value()); - } else if (requestPath.equals(String.format("/v1/reports/%s?reportTypeFilter=MockReportType&errorOnReportNotFound=false", REPORT_UUID))) { - assertEquals("", request.getBody().readUtf8()); - return new MockResponse().setResponseCode(HttpStatus.OK.value()); - } else if (requestPath.equals(String.format("/v1/reports/%s", REPORT_ERROR_UUID))) { - return new MockResponse().setResponseCode(HttpStatus.INTERNAL_SERVER_ERROR.value()); - } else { - return new MockResponse().setResponseCode(HttpStatus.NOT_FOUND.value()).setBody("Path not supported: " + request.getPath()); - } - } - }; - - server.setDispatcher(dispatcher); - - // Ask the server for its URL. You'll need this to make HTTP requests. - HttpUrl baseHttpUrl = server.url(""); - return baseHttpUrl.toString().substring(0, baseHttpUrl.toString().length() - 1); + @Test + void testSendReportFailed() { + final ReportNode reportNode = ReportNode.newRootReportNode().withMessageTemplate("test", "a test").build(); + server.expect(MockRestRequestMatchers.method(HttpMethod.PUT)) + .andExpect(MockRestRequestMatchers.requestTo("http://report-server/v1/reports/" + REPORT_ERROR_UUID)) + .andRespond(MockRestResponseCreators.withServerError()); + assertThatThrownBy(() -> reportService.sendReport(REPORT_ERROR_UUID, reportNode)).isInstanceOf(RestClientException.class); } @Test - public void testSendReport() { - ReportNode reportNode = ReportNode.newRootReportNode().withMessageTemplate("test", "a test").build(); - reportService.sendReport(REPORT_UUID, reportNode); - assertThrows(RestClientException.class, () -> reportService.sendReport(REPORT_ERROR_UUID, reportNode)); + void testDeleteReport() { + server.expect(MockRestRequestMatchers.method(HttpMethod.DELETE)) + .andExpect(MockRestRequestMatchers.requestTo("http://report-server/v1/reports/" + REPORT_UUID + "?reportTypeFilter=MockReportType&errorOnReportNotFound=false")) + .andExpect(MockRestRequestMatchers.content().bytes(new byte[0])) + .andRespond(MockRestResponseCreators.withSuccess()); + assertThatNoException().isThrownBy(() -> reportService.deleteReport(REPORT_UUID, "MockReportType")); } @Test - public void testDeleteReport() { - reportService.deleteReport(REPORT_UUID, "MockReportType"); - assertThrows(RestClientException.class, () -> reportService.deleteReport(REPORT_ERROR_UUID, "MockReportType")); + void testDeleteReportFailed() { + server.expect(MockRestRequestMatchers.method(HttpMethod.DELETE)) + .andExpect(MockRestRequestMatchers.requestTo("http://report-server/v1/reports/" + REPORT_ERROR_UUID + "?reportTypeFilter=MockReportType&errorOnReportNotFound=false")) + .andExpect(MockRestRequestMatchers.content().bytes(new byte[0])) + .andRespond(MockRestResponseCreators.withServerError()); + assertThatThrownBy(() -> reportService.deleteReport(REPORT_ERROR_UUID, "MockReportType")).isInstanceOf(RestClientException.class); } } diff --git a/src/test/java/com/powsybl/ws_common_spring_test/SpringBootApplicationForTest.java b/src/test/java/com/powsybl/ws_common_spring_test/SpringBootApplicationForTest.java index 7fbc5c6..6c880ca 100644 --- a/src/test/java/com/powsybl/ws_common_spring_test/SpringBootApplicationForTest.java +++ b/src/test/java/com/powsybl/ws_common_spring_test/SpringBootApplicationForTest.java @@ -1,6 +1,5 @@ package com.powsybl.ws_common_spring_test; -import com.powsybl.ws.commons.computation.config.JacksonConfig; import org.springframework.boot.autoconfigure.SpringBootApplication; /** @@ -10,6 +9,6 @@ @SuppressWarnings({ "java:S2187" //this isn't a class containing tests }) -@SpringBootApplication(scanBasePackageClasses = {JacksonConfig.class}) +@SpringBootApplication public class SpringBootApplicationForTest { }