package de.juplo.demos.pact;
import au.com.dius.pact.consumer.MockServer;
-import au.com.dius.pact.consumer.dsl.PactDslJsonBody;
-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;
@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)
{
- PactDslJsonBody body = new PactDslJsonBody()
- .stringType("name")
- .booleanType("happy")
- .hexValue("hexCode")
- .id()
- .ipAddress("localAddress")
- .numberValue("age", 100);
return builder
.uponReceiving("get all orders")
.path("/orders")
.willRespondWith()
.status(200)
.headers(Map.of("Content-Type", "application/vnd.siren+json"))
- .body(body)
+ .body(LambdaDsl.newJsonBody(body ->
+ {
+ 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 =
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);
+ }
+ }
}