diff --git a/libraries-5/pom.xml b/libraries-5/pom.xml index 63d1924852..85b1f3b475 100644 --- a/libraries-5/pom.xml +++ b/libraries-5/pom.xml @@ -6,16 +6,16 @@ libraries-5 - parent-modules com.baeldung - 1.0.0-SNAPSHOT + parent-boot-2 + 0.0.1-SNAPSHOT + ../parent-boot-2 org.springframework spring-web - ${spring.version} org.jooq @@ -24,10 +24,19 @@ au.com.dius - pact-jvm-consumer-junit_2.11 + pact-jvm-provider-junit5_2.12 + ${pact.version} + + + au.com.dius + pact-jvm-consumer-junit5_2.12 ${pact.version} test + + org.springframework.boot + spring-boot-starter-web + com.typesafe.akka @@ -111,10 +120,10 @@ - 3.5.0 + 3.6.3 0.9.12 4.3.8.RELEASE - 2.11 + 2.12 2.5.11 0.6.5 3.0.14 diff --git a/libraries-5/src/main/java/com/baeldung/pact/config/MainApplication.java b/libraries-5/src/main/java/com/baeldung/pact/config/MainApplication.java new file mode 100644 index 0000000000..b8a92e4742 --- /dev/null +++ b/libraries-5/src/main/java/com/baeldung/pact/config/MainApplication.java @@ -0,0 +1,15 @@ +package com.baeldung.pact.config; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@EnableAutoConfiguration +@ComponentScan("com.baeldung.pact") +public class MainApplication implements WebMvcConfigurer { + + public static void main(final String[] args) { + SpringApplication.run(MainApplication.class, args); + } +} \ No newline at end of file diff --git a/spring-web-modules/spring-resttemplate/src/main/java/com/baeldung/sampleapp/web/controller/PactController.java b/libraries-5/src/main/java/com/baeldung/pact/web/controller/PactController.java similarity index 90% rename from spring-web-modules/spring-resttemplate/src/main/java/com/baeldung/sampleapp/web/controller/PactController.java rename to libraries-5/src/main/java/com/baeldung/pact/web/controller/PactController.java index 0f5d7f1acb..d38f4dceb2 100644 --- a/spring-web-modules/spring-resttemplate/src/main/java/com/baeldung/sampleapp/web/controller/PactController.java +++ b/libraries-5/src/main/java/com/baeldung/pact/web/controller/PactController.java @@ -1,4 +1,4 @@ -package com.baeldung.sampleapp.web.controller; +package com.baeldung.pact.web.controller; import java.util.ArrayList; import java.util.List; @@ -11,7 +11,7 @@ import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestController; -import com.baeldung.sampleapp.web.dto.PactDto; +import com.baeldung.pact.web.dto.PactDto; @RestController public class PactController { diff --git a/spring-web-modules/spring-resttemplate/src/main/java/com/baeldung/sampleapp/web/dto/PactDto.java b/libraries-5/src/main/java/com/baeldung/pact/web/dto/PactDto.java similarity index 93% rename from spring-web-modules/spring-resttemplate/src/main/java/com/baeldung/sampleapp/web/dto/PactDto.java rename to libraries-5/src/main/java/com/baeldung/pact/web/dto/PactDto.java index e184119611..1525f23478 100644 --- a/spring-web-modules/spring-resttemplate/src/main/java/com/baeldung/sampleapp/web/dto/PactDto.java +++ b/libraries-5/src/main/java/com/baeldung/pact/web/dto/PactDto.java @@ -1,4 +1,4 @@ -package com.baeldung.sampleapp.web.dto; +package com.baeldung.pact.web.dto; public class PactDto { diff --git a/libraries-5/src/main/resources/application.properties b/libraries-5/src/main/resources/application.properties new file mode 100644 index 0000000000..1a26e3ad99 --- /dev/null +++ b/libraries-5/src/main/resources/application.properties @@ -0,0 +1,2 @@ +server.port=8082 +server.servlet.context-path=/spring-rest \ No newline at end of file diff --git a/libraries-5/src/test/java/com/baeldung/pact/PactConsumerDrivenContractUnitTest.java b/libraries-5/src/test/java/com/baeldung/pact/PactConsumerDrivenContractUnitTest.java index 8d4918a3e7..6e8703be0d 100644 --- a/libraries-5/src/test/java/com/baeldung/pact/PactConsumerDrivenContractUnitTest.java +++ b/libraries-5/src/test/java/com/baeldung/pact/PactConsumerDrivenContractUnitTest.java @@ -1,46 +1,31 @@ package com.baeldung.pact; -import au.com.dius.pact.consumer.Pact; -import au.com.dius.pact.consumer.PactProviderRuleMk2; -import au.com.dius.pact.consumer.PactVerification; -import au.com.dius.pact.consumer.dsl.PactDslWithProvider; -import au.com.dius.pact.model.RequestResponsePact; -import org.junit.Rule; -import org.junit.Test; -import org.springframework.http.*; -import org.springframework.web.client.RestTemplate; - -import java.io.IOException; -import java.net.ServerSocket; -import java.util.HashMap; -import java.util.Map; -import java.util.Random; - import static org.assertj.core.api.Assertions.assertThat; +import java.util.HashMap; +import java.util.Map; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.client.RestTemplate; + +import au.com.dius.pact.consumer.MockServer; +import au.com.dius.pact.consumer.Pact; +import au.com.dius.pact.consumer.dsl.PactDslWithProvider; +import au.com.dius.pact.consumer.junit5.PactConsumerTestExt; +import au.com.dius.pact.consumer.junit5.PactTestFor; +import au.com.dius.pact.model.RequestResponsePact; + +@ExtendWith(PactConsumerTestExt.class) +@PactTestFor(providerName = "test_provider", hostInterface="localhost") public class PactConsumerDrivenContractUnitTest { - private static int getAvailablePort() { - return new Random() - .ints(6000, 9000) - .filter(PactConsumerDrivenContractUnitTest::isFree) - .findFirst() - .orElse(8080); - } - - private static boolean isFree(int port) { - try { - new ServerSocket(port).close(); - return true; - } catch (IOException e) { - return false; - } - } - - @Rule - public PactProviderRuleMk2 mockProvider = new PactProviderRuleMk2("test_provider", "localhost", getAvailablePort(), this); - - @Pact(consumer = "test_consumer") + @Pact(provider="test_provider", consumer = "test_consumer") public RequestResponsePact createPact(PactDslWithProvider builder) { Map headers = new HashMap<>(); headers.put("Content-Type", "application/json"); @@ -66,10 +51,10 @@ public class PactConsumerDrivenContractUnitTest { } @Test - @PactVerification() - public void givenGet_whenSendRequest_shouldReturn200WithProperHeaderAndBody() { + @PactTestFor + void givenGet_whenSendRequest_shouldReturn200WithProperHeaderAndBody(MockServer mockServer) { // when - ResponseEntity response = new RestTemplate().getForEntity(mockProvider.getUrl() + "/pact", String.class); + ResponseEntity response = new RestTemplate().getForEntity(mockServer.getUrl() + "/pact", String.class); // then assertThat(response.getStatusCode().value()).isEqualTo(200); @@ -82,7 +67,7 @@ public class PactConsumerDrivenContractUnitTest { String jsonBody = "{\"name\": \"Michael\"}"; // when - ResponseEntity postResponse = new RestTemplate().exchange(mockProvider.getUrl() + "/pact", HttpMethod.POST, new HttpEntity<>(jsonBody, httpHeaders), String.class); + ResponseEntity postResponse = new RestTemplate().exchange(mockServer.getUrl() + "/pact", HttpMethod.POST, new HttpEntity<>(jsonBody, httpHeaders), String.class); // then assertThat(postResponse.getStatusCode().value()).isEqualTo(201); diff --git a/spring-web-modules/spring-resttemplate/src/test/java/com/baeldung/pact/PactProviderLiveTest.java b/libraries-5/src/test/java/com/baeldung/pact/PactProviderLiveTest.java similarity index 96% rename from spring-web-modules/spring-resttemplate/src/test/java/com/baeldung/pact/PactProviderLiveTest.java rename to libraries-5/src/test/java/com/baeldung/pact/PactProviderLiveTest.java index c59a4ea59f..7b72dec852 100644 --- a/spring-web-modules/spring-resttemplate/src/test/java/com/baeldung/pact/PactProviderLiveTest.java +++ b/libraries-5/src/test/java/com/baeldung/pact/PactProviderLiveTest.java @@ -7,7 +7,7 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.boot.SpringApplication; import org.springframework.web.context.ConfigurableWebApplicationContext; -import com.baeldung.sampleapp.config.MainApplication; +import com.baeldung.pact.config.MainApplication; import au.com.dius.pact.provider.junit.Provider; import au.com.dius.pact.provider.junit.State; diff --git a/spring-web-modules/spring-resttemplate/src/test/java/com/baeldung/pact/PactConsumerDrivenContractUnitTest.java b/spring-web-modules/spring-resttemplate/src/test/java/com/baeldung/pact/PactConsumerDrivenContractUnitTest.java deleted file mode 100644 index 6e8703be0d..0000000000 --- a/spring-web-modules/spring-resttemplate/src/test/java/com/baeldung/pact/PactConsumerDrivenContractUnitTest.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.baeldung.pact; - -import static org.assertj.core.api.Assertions.assertThat; - -import java.util.HashMap; -import java.util.Map; - -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpMethod; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; -import org.springframework.web.client.RestTemplate; - -import au.com.dius.pact.consumer.MockServer; -import au.com.dius.pact.consumer.Pact; -import au.com.dius.pact.consumer.dsl.PactDslWithProvider; -import au.com.dius.pact.consumer.junit5.PactConsumerTestExt; -import au.com.dius.pact.consumer.junit5.PactTestFor; -import au.com.dius.pact.model.RequestResponsePact; - -@ExtendWith(PactConsumerTestExt.class) -@PactTestFor(providerName = "test_provider", hostInterface="localhost") -public class PactConsumerDrivenContractUnitTest { - - @Pact(provider="test_provider", consumer = "test_consumer") - public RequestResponsePact createPact(PactDslWithProvider builder) { - Map headers = new HashMap<>(); - headers.put("Content-Type", "application/json"); - - return builder - .given("test GET") - .uponReceiving("GET REQUEST") - .path("/pact") - .method("GET") - .willRespondWith() - .status(200) - .headers(headers) - .body("{\"condition\": true, \"name\": \"tom\"}") - .given("test POST") - .uponReceiving("POST REQUEST") - .method("POST") - .headers(headers) - .body("{\"name\": \"Michael\"}") - .path("/pact") - .willRespondWith() - .status(201) - .toPact(); - } - - @Test - @PactTestFor - void givenGet_whenSendRequest_shouldReturn200WithProperHeaderAndBody(MockServer mockServer) { - // when - ResponseEntity response = new RestTemplate().getForEntity(mockServer.getUrl() + "/pact", String.class); - - // then - assertThat(response.getStatusCode().value()).isEqualTo(200); - assertThat(response.getHeaders().get("Content-Type").contains("application/json")).isTrue(); - assertThat(response.getBody()).contains("condition", "true", "name", "tom"); - - // and - HttpHeaders httpHeaders = new HttpHeaders(); - httpHeaders.setContentType(MediaType.APPLICATION_JSON); - String jsonBody = "{\"name\": \"Michael\"}"; - - // when - ResponseEntity postResponse = new RestTemplate().exchange(mockServer.getUrl() + "/pact", HttpMethod.POST, new HttpEntity<>(jsonBody, httpHeaders), String.class); - - // then - assertThat(postResponse.getStatusCode().value()).isEqualTo(201); - } - -}