WIP
[demos/pact] / pwreset / src / test / java / de / juplo / demos / pwreset / adapters / out / RemoteUsersServiceConsumerIT.java
1 package de.juplo.demos.pwreset.adapters.out;
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 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.Optional;
16 import java.util.UUID;
17
18 import static org.assertj.core.api.Assertions.assertThat;
19 import static org.assertj.core.api.Assertions.fail;
20
21
22 @ExtendWith(PactConsumerTestExt.class)
23 @PactTestFor(providerName = "UsersProvider")
24 public class RemoteUsersServiceConsumerIT
25 {
26   @Pact(consumer="EmailServicesConsumer")
27   public RequestResponsePact getExistingUserByEmail(PactDslWithProvider builder)
28   {
29     return builder
30         .given("User with email pact@juplo.de exists")
31           .uponReceiving("Request for user with email pact@juplo.de")
32             .path("/get")
33             .query("email=pact@juplo.de")
34             .method("GET")
35           .willRespondWith()
36             .status(200)
37             .headers(Map.of("Content-Type", "application/json;charset=UTF-8"))
38             .body("{\"id\": \"123e4567-e89b-12d3-a456-426614174000\"}")
39         .toPact();
40   }
41
42   @Test
43   @PactTestFor(pactMethod = "getExistingUserByEmail")
44   public void testGetExistingUserByEmail(MockServer mockServer)
45   {
46     RestTemplate restTemplate =
47         new RestTemplateBuilder()
48             .rootUri(mockServer.getUrl())
49             .build();
50     RemoteUsersServiceConsumer usersService =
51         new RemoteUsersServiceConsumer(
52             "/get?email={email}",
53             restTemplate);
54     try
55     {
56       Optional<UUID> result =
57           usersService.getUserByEmail("pact@juplo.de");
58
59       assertThat(result.isPresent()).isTrue();
60       assertThat(result.get()).isEqualTo(UUID.fromString("123e4567-e89b-12d3-a456-426614174000"));
61     }
62     catch (Exception e)
63     {
64       fail("Unexpected exception", e);
65     }
66   }
67 }