WIP
[demos/pact] / consumer / src / test / java / de / juplo / demos / consumer / adapter / RemoteUsersServiceConsumerIT.java
1 package de.juplo.demos.consumer.adapter;
2
3 import au.com.dius.pact.consumer.MockServer;
4 import au.com.dius.pact.consumer.dsl.PactDslWithProvider;
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 de.juplo.demos.consumer.domain.User;
10 import org.junit.jupiter.api.BeforeEach;
11 import org.junit.jupiter.api.Test;
12 import org.junit.jupiter.api.extension.ExtendWith;
13 import org.springframework.beans.factory.annotation.Autowired;
14 import org.springframework.boot.test.context.SpringBootTest;
15 import org.springframework.test.context.junit.jupiter.SpringExtension;
16
17 import java.io.IOException;
18 import java.util.Map;
19 import java.util.Optional;
20
21 import static org.assertj.core.api.Assertions.assertThat;
22 import static org.assertj.core.api.Assertions.fail;
23
24
25 @SpringBootTest
26 @ExtendWith(PactConsumerTestExt.class)
27 @PactTestFor(providerName = "UsersProvider")
28 public class RemoteUsersServiceConsumerIT
29 {
30   @Autowired
31   RemoteUsersServiceConsumer usersService;
32
33
34   @Pact(consumer="EmailServicesConsumer")
35   public RequestResponsePact getExistingUserByEmail(PactDslWithProvider builder) {
36     return builder
37         .given("User with email pact@juplo.de exists")
38           .uponReceiving("Request for user with email pact@juplo.de")
39             .path("/get")
40             .query("email=pact@juplo.de")
41             .method("GET")
42             .headers("Accept", "application/json")
43           .willRespondWith()
44             .status(200)
45             .headers(Map.of("Content-Type", "application/json;charset=UTF-8"))
46             .body("{\"id\": \"123e4567-e89b-12d3-a456-426614174000\", \"email\": \"pact@juplo.de\"}")
47         .toPact();
48   }
49
50   @Test
51   @PactTestFor(pactMethod = "getExistingUserByEmail")
52   public void testGetExistingUserByEmail(MockServer mockServer) {
53     try {
54       Optional<User> result = usersService.getUserByEmail("pact@juplo.de");
55
56       assertThat(result.isPresent()).isTrue();
57       User user = result.get();
58       assertThat(user.getId()).isEqualTo("123e4567-e89b-12d3-a456-426614174000");
59       assertThat(user.getEmail()).isEqualTo("pact@juplo.de");
60     }
61     catch (Exception e) {
62       fail("Unexpected exception", e);
63     }
64   }
65 }