WIP
[demos/example-siren] / spring-consumer / src / test / java / de / juplo / demos / pact / ContractTest.java
1 package de.juplo.demos.pact;
2
3 import au.com.dius.pact.consumer.MockServer;
4 import au.com.dius.pact.consumer.dsl.*;
5 import au.com.dius.pact.consumer.junit5.PactConsumerTestExt;
6 import au.com.dius.pact.consumer.junit5.PactTestFor;
7 import au.com.dius.pact.core.model.RequestResponsePact;
8 import au.com.dius.pact.core.model.annotations.Pact;
9 import org.junit.jupiter.api.Test;
10 import org.junit.jupiter.api.extension.ExtendWith;
11 import org.springframework.boot.web.client.RestTemplateBuilder;
12 import org.springframework.web.client.RestTemplate;
13
14 import java.util.Map;
15 import java.util.regex.Pattern;
16
17 import static org.assertj.core.api.Assertions.fail;
18
19
20 @ExtendWith(PactConsumerTestExt.class)
21 @PactTestFor(providerName = "Siren Order Provider")
22 public class ContractTest
23 {
24   @Pact(consumer="SpringConsumer")
25   public RequestResponsePact getOrders(PactDslWithProvider builder)
26   {
27     return builder
28           .uponReceiving("get all orders")
29             .path("/orders")
30             .method("GET")
31           .willRespondWith()
32             .status(200)
33             .headers(Map.of("Content-Type", "application/vnd.siren+json"))
34             .body(LambdaDsl.newJsonBody(body ->
35             {
36               body.array("entities", entities ->
37               {
38                 body.arrayContaining("actions", actions ->
39                 {
40                   actions.object(object ->
41                   {
42                     object.stringType("name","update");
43                     object.stringType("method", "PUT");
44                     object.matchUrl2("href", Matchers.regexp("\\d+", "1234"));
45                   });
46                 });
47               });
48             }).build())
49         .toPact();
50   }
51
52   @Test
53   @PactTestFor(pactMethod = "getOrders")
54   public void testGetExistingUserByEmail(MockServer mockServer)
55   {
56     RestTemplate restTemplate =
57         new RestTemplateBuilder()
58             .rootUri(mockServer.getUrl())
59             .build();
60     try
61     {
62       restTemplate.getForEntity("/orders", String.class);
63     }
64     catch (Exception e)
65     {
66       fail("Unexpected exception", e);
67     }
68   }
69 }