WIP
[demos/pact] / pwreset / src / test / java / de / juplo / demos / pwreset / adapters / out / UsersServiceGatewayContractTest.java
diff --git a/pwreset/src/test/java/de/juplo/demos/pwreset/adapters/out/UsersServiceGatewayContractTest.java b/pwreset/src/test/java/de/juplo/demos/pwreset/adapters/out/UsersServiceGatewayContractTest.java
new file mode 100644 (file)
index 0000000..4ab4c85
--- /dev/null
@@ -0,0 +1,67 @@
+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);
+    }
+  }
+}