X-Git-Url: https://juplo.de/gitweb/?a=blobdiff_plain;f=spring-consumer%2Fsrc%2Ftest%2Fjava%2Fde%2Fjuplo%2Fdemos%2Fpact%2FContractTest.java;h=b863b233fb1c6940cbf49048ec72c606b1442df5;hb=969dd5ded4aa8c4938f533c84118e1cad606667a;hp=8db0dbcfca686a31490fcb18b0ed413529fbb757;hpb=e492dc86a132c3a56b6cbb0dd4c40f60258aaa7a;p=demos%2Fexample-siren diff --git a/spring-consumer/src/test/java/de/juplo/demos/pact/ContractTest.java b/spring-consumer/src/test/java/de/juplo/demos/pact/ContractTest.java index 8db0dbc..b863b23 100644 --- a/spring-consumer/src/test/java/de/juplo/demos/pact/ContractTest.java +++ b/spring-consumer/src/test/java/de/juplo/demos/pact/ContractTest.java @@ -1,10 +1,7 @@ package de.juplo.demos.pact; import au.com.dius.pact.consumer.MockServer; -import au.com.dius.pact.consumer.dsl.LambdaDsl; -import au.com.dius.pact.consumer.dsl.PactDslJsonBody; -import au.com.dius.pact.consumer.dsl.PactDslJsonRootValue; -import au.com.dius.pact.consumer.dsl.PactDslWithProvider; +import au.com.dius.pact.consumer.dsl.*; import au.com.dius.pact.consumer.junit5.PactConsumerTestExt; import au.com.dius.pact.consumer.junit5.PactTestFor; import au.com.dius.pact.core.model.RequestResponsePact; @@ -20,11 +17,60 @@ import static org.assertj.core.api.Assertions.fail; @ExtendWith(PactConsumerTestExt.class) -@PactTestFor(providerName = "Siren Order Provider") +@PactTestFor(providerName = "SirenOrderProvider") public class ContractTest { @Pact(consumer="SpringConsumer") - public RequestResponsePact getOrders(PactDslWithProvider builder) + public RequestResponsePact getRoot(PactDslWithProvider builder) + { + return builder + .uponReceiving("get root") + .path("/") + .method("GET") + .willRespondWith() + .status(200) + .headers(Map.of("Content-Type", "application/vnd.siren+json")) + .body(LambdaDsl.newJsonBody(body -> + { + body.array("class", classArray -> + { + classArray.stringValue("representation"); + }); + body.array("links", linksArray -> + { + linksArray.object(object-> + { + object.matchUrl2("href", "orders"); + object.array("rel", relArray -> + { + relArray.stringValue("orders"); + }); + }); + }); + }).build()) + .toPact(); + } + + @Test + @PactTestFor(pactMethod = "getRoot") + public void testGetRoot(MockServer mockServer) + { + RestTemplate restTemplate = + new RestTemplateBuilder() + .rootUri(mockServer.getUrl()) + .build(); + try + { + restTemplate.getForEntity("/", String.class); + } + catch (Exception e) + { + fail("Unexpected exception", e); + } + } + + @Pact(consumer="SpringConsumer") + public RequestResponsePact getAllOrders(PactDslWithProvider builder) { return builder .uponReceiving("get all orders") @@ -35,18 +81,68 @@ public class ContractTest .headers(Map.of("Content-Type", "application/vnd.siren+json")) .body(LambdaDsl.newJsonBody(body -> { - body.stringType("name"); - body.booleanType("happy"); - // body.hexValue("hexCode"); - body.id(); - body.ipV4Address("localAddress"); - body.numberValue("age", 100); + body.array("class", classArray -> + { + classArray.stringValue("entity"); + }); + body.eachLike("entities", entities -> + { + entities.arrayContaining("actions", actionsArray-> + { + actionsArray.object(object -> + { + object.stringType("name","update"); + object.stringType("method", "PUT"); + object.matchUrl2("href", "orders", Matchers.regexp("\\d+", "1234").getValue()); + }); + actionsArray.object(object -> + { + object.stringType("name","delete"); + object.stringType("method", "DELETE"); + object.matchUrl2("href", "orders", Matchers.regexp("\\d+", "1234").getValue()); + }); + }); + entities.array("class", classArray -> + { + classArray.stringValue("entity"); + }); + entities.array("links", linksArray -> + { + linksArray.object(object-> + { + object.matchUrl2("href", "orders", Matchers.regexp("\\d+", "1234").getMatcher()); + object.array("rel", relArray -> + { + relArray.stringValue("self"); + }); + }); + }); + entities.object("properties", object-> + { + object.integerType("id", 1234); + }); + entities.array("rel", relArray -> + { + relArray.stringValue("item"); + }); + }); + body.array("links", linksArray -> + { + linksArray.object(object-> + { + object.matchUrl2("href", "orders"); + object.array("rel", relArray -> + { + relArray.stringValue("self"); + }); + }); + }); }).build()) .toPact(); } @Test - @PactTestFor(pactMethod = "getOrders") + @PactTestFor(pactMethod = "getAllOrders") public void testGetExistingUserByEmail(MockServer mockServer) { RestTemplate restTemplate = @@ -62,4 +158,34 @@ public class ContractTest fail("Unexpected exception", e); } } + + @Pact(consumer="SpringConsumer") + public RequestResponsePact deleteOrder(PactDslWithProvider builder) + { + return builder + .uponReceiving("delete order") + .matchPath("/orders/\\d+", "/orders/1234") + .method("DELETE") + .willRespondWith() + .status(200) + .toPact(); + } + + @Test + @PactTestFor(pactMethod = "deleteOrder") + public void testDeleteOrder(MockServer mockServer) + { + RestTemplate restTemplate = + new RestTemplateBuilder() + .rootUri(mockServer.getUrl()) + .build(); + try + { + restTemplate.delete("/orders/1234"); + } + catch (Exception e) + { + fail("Unexpected exception", e); + } + } }