91b8f65885b76cff413029ceafce80cc175c074d
[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
16 import static org.assertj.core.api.Assertions.fail;
17
18
19 @ExtendWith(PactConsumerTestExt.class)
20 @PactTestFor(providerName = "Siren Order Provider")
21 public class ContractTest
22 {
23   @Pact(consumer="SpringConsumer")
24   public RequestResponsePact getOrders(PactDslWithProvider builder)
25   {
26     return builder
27           .uponReceiving("get all orders")
28             .path("/orders")
29             .method("GET")
30           .willRespondWith()
31             .status(200)
32             .headers(Map.of("Content-Type", "application/vnd.siren+json"))
33             .body(LambdaDsl.newJsonBody(body ->
34             {
35               body.array("entities", entities ->
36               {
37                 body.arrayContaining("actions", actions ->
38                 {
39                   actions.object(object ->
40                   {
41                     object.stringType("name","update");
42                     object.stringType("method", "PUT");
43                     object.matchUrl2("href", Matchers.regexp("\\d+", "1234").getValue());
44                   });
45                 });
46               });
47             }).build())
48         .toPact();
49   }
50
51   @Test
52   @PactTestFor(pactMethod = "getOrders")
53   public void testGetExistingUserByEmail(MockServer mockServer)
54   {
55     RestTemplate restTemplate =
56         new RestTemplateBuilder()
57             .rootUri(mockServer.getUrl())
58             .build();
59     try
60     {
61       restTemplate.getForEntity("/orders", String.class);
62     }
63     catch (Exception e)
64     {
65       fail("Unexpected exception", e);
66     }
67   }
68 }