import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import java.util.Optional;
-import java.util.UUID;
+@Service
@RequiredArgsConstructor
public class RemoteUsersServiceConsumer implements UsersService
{
@Override
- public Optional<User> getUser(UUID id) {
+ public Optional<User> getUserByEmail(String email) {
ResponseEntity<UserDTO> response =
- restTemplate.getForEntity(uriTemplate, UserDTO.class, id);
+ restTemplate.getForEntity(uriTemplate, UserDTO.class, email);
HttpStatus status = response.getStatusCode();
UserDTO dto = response.getBody();
switch (response.getStatusCode()) {
package de.juplo.demos.consumer.adapter;
+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 de.juplo.demos.consumer.domain.User;
+import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+import java.io.IOException;
+import java.util.Map;
+import java.util.Optional;
-@ExtendWith(PactConsumerTestExt.class)
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.fail;
+
+
+@ExtendWith({ SpringExtension.class, PactConsumerTestExt.class })
@PactTestFor(providerName = "UsersProvider")
public class RemoteUsersServiceConsumerIT
{
- @Pact(provider="UsersProvider", consumer="EmailServicesConsumer")
- public RequestResponsePact createPact(PactDslWithProvider builder) {
+ @Autowired
+ RemoteUsersServiceConsumer usersService;
+
+
+ @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")
- .matchQuery(
- "email",
- // See: https://stackoverflow.com/a/201378/247276
- "(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])",
- "pact@juplo.de")
+ .query("email=pact@juplo.de")
.method("GET")
- .matchHeader("", "", "")
+ .headers("Accept", "application/json")
.willRespondWith()
.status(200)
- .body("{\"responsetest\": true}")
+ .headers(Map.of("Content-Type", "application/json;charset=UTF-8"))
+ .body("{\"id\": \"123e4567-e89b-12d3-a456-426614174000\", \"email\": \"pact@juplo.de\"}")
.toPact();
}
+
+ @Test
+ @PactTestFor(pactMethod = "getExistingUserByEmail")
+ public void testGetExistingUserByEmail(MockServer mockServer) {
+ try {
+ Optional<User> result = usersService.getUserByEmail("pact@juplo.de");
+
+ assertThat(result.isPresent()).isTrue();
+ User user = result.get();
+ assertThat(user.getId()).isEqualTo("123e4567-e89b-12d3-a456-426614174000");
+ assertThat(user.getEmail()).isEqualTo("pact@juplo.de");
+ }
+ catch (Exception e) {
+ fail("Unexpected exception", e);
+ }
+ }
}