8db0dbcfca686a31490fcb18b0ed413529fbb757
[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.LambdaDsl;
5 import au.com.dius.pact.consumer.dsl.PactDslJsonBody;
6 import au.com.dius.pact.consumer.dsl.PactDslJsonRootValue;
7 import au.com.dius.pact.consumer.dsl.PactDslWithProvider;
8 import au.com.dius.pact.consumer.junit5.PactConsumerTestExt;
9 import au.com.dius.pact.consumer.junit5.PactTestFor;
10 import au.com.dius.pact.core.model.RequestResponsePact;
11 import au.com.dius.pact.core.model.annotations.Pact;
12 import org.junit.jupiter.api.Test;
13 import org.junit.jupiter.api.extension.ExtendWith;
14 import org.springframework.boot.web.client.RestTemplateBuilder;
15 import org.springframework.web.client.RestTemplate;
16
17 import java.util.Map;
18
19 import static org.assertj.core.api.Assertions.fail;
20
21
22 @ExtendWith(PactConsumerTestExt.class)
23 @PactTestFor(providerName = "Siren Order Provider")
24 public class ContractTest
25 {
26   @Pact(consumer="SpringConsumer")
27   public RequestResponsePact getOrders(PactDslWithProvider builder)
28   {
29     return builder
30           .uponReceiving("get all orders")
31             .path("/orders")
32             .method("GET")
33           .willRespondWith()
34             .status(200)
35             .headers(Map.of("Content-Type", "application/vnd.siren+json"))
36             .body(LambdaDsl.newJsonBody(body ->
37             {
38               body.stringType("name");
39               body.booleanType("happy");
40               // body.hexValue("hexCode");
41               body.id();
42               body.ipV4Address("localAddress");
43               body.numberValue("age", 100);
44             }).build())
45         .toPact();
46   }
47
48   @Test
49   @PactTestFor(pactMethod = "getOrders")
50   public void testGetExistingUserByEmail(MockServer mockServer)
51   {
52     RestTemplate restTemplate =
53         new RestTemplateBuilder()
54             .rootUri(mockServer.getUrl())
55             .build();
56     try
57     {
58       restTemplate.getForEntity("/orders", String.class);
59     }
60     catch (Exception e)
61     {
62       fail("Unexpected exception", e);
63     }
64   }
65 }