--- /dev/null
+package de.juplo.demos.pwreset.adapters.out;
+
+import au.com.dius.pact.consumer.MockServer;
+import au.com.dius.pact.consumer.dsl.PactDslWithProvider;
+import au.com.dius.pact.consumer.junit5.PactConsumerTestExt;
+import au.com.dius.pact.consumer.junit5.PactTestFor;
+import au.com.dius.pact.core.model.RequestResponsePact;
+import au.com.dius.pact.core.model.annotations.Pact;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.boot.web.client.RestTemplateBuilder;
+import org.springframework.web.client.RestTemplate;
+
+import java.util.Map;
+import java.util.Optional;
+import java.util.UUID;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.fail;
+
+
+@ExtendWith(PactConsumerTestExt.class)
+@PactTestFor(providerName = "UsersProvider")
+public class UsersServiceGatewayContractTest
+{
+ @Pact(consumer="EmailServicesConsumer")
+ public RequestResponsePact getExistingUserByEmail(PactDslWithProvider builder)
+ {
+ return builder
+ .given("User with email pact@juplo.de exists")
+ .uponReceiving("Request for user with email pact@juplo.de")
+ .path("/get")
+ .query("email=pact@juplo.de")
+ .method("GET")
+ .willRespondWith()
+ .status(200)
+ .headers(Map.of("Content-Type", "application/json;charset=UTF-8"))
+ .body("{\"id\": \"123e4567-e89b-12d3-a456-426614174000\"}")
+ .toPact();
+ }
+
+ @Test
+ @PactTestFor(pactMethod = "getExistingUserByEmail")
+ public void testGetExistingUserByEmail(MockServer mockServer)
+ {
+ RestTemplate restTemplate =
+ new RestTemplateBuilder()
+ .rootUri(mockServer.getUrl())
+ .build();
+ UsersServiceGateway usersService =
+ new UsersServiceGateway(
+ "/get?email={email}",
+ restTemplate);
+ try
+ {
+ Optional<UUID> result =
+ usersService.getUserByEmail("pact@juplo.de");
+
+ assertThat(result.isPresent()).isTrue();
+ assertThat(result.get()).isEqualTo(UUID.fromString("123e4567-e89b-12d3-a456-426614174000"));
+ }
+ catch (Exception e)
+ {
+ fail("Unexpected exception", e);
+ }
+ }
+}