GitHub
08/22/2024, 10:08 AM@BeforeEach
public void setUp() {
System.setProperty("pact.writer.overwrite", "true");
System.setProperty("pact.expressions.start", "{");
}
@Pact(consumer = "bank-account-service")
public V4Pact getDocumentList(PactDslWithProvider builder) {
return builder
.given("document codes exist")
.uponReceiving("Request to get document details internally")
.path("/internal/v1/documents")
.queryParameterFromProviderState("codes", "codes", DOCUMENT_CODE.toString())
.method("GET")
.willRespondWith()
.status(200)
.headers(RES_HEADERS)
.body(new PactDslJsonArray()
.object()
.uuid("code", DOCUMENT_CODE)
.stringType("documentUrl", DOCUMENT_URL)
.closeObject()
)
.given("document codes not exist")
.uponReceiving("Request to get document details internally")
.path("/internal/v1/documents")
.queryParameterFromProviderState("codes", "codes", DOCUMENT_CODE_NOT_EXISTS.toString())
.method("GET")
.willRespondWith()
.status(200)
.headers(RES_HEADERS)
.body(new PactDslJsonArray())
.given("document codes missing")
.uponReceiving("Request to get document details internally")
.path("/internal/v1/documents")
.queryParameterFromProviderState("codes", "codes", EMPTY_DOCUMENT_CODE.toString())
.method("GET")
.willRespondWith()
.status(422)
.body(new PactDslJsonBody()
.stringType("code")
.stringType("message")
.stringMatcher("raisedAt", "\\d{13}", "1714983789660")
)
.toPact(V4Pact.class);
}
@Test
@PactTestFor(pactMethod = "getDocumentList")
void shouldGetDocumentList(MockServer mockServer) throws JsonProcessingException {
var baseURL = mockServer.getUrl();
ResponseEntity<String> responseEntityPresent = REST_TEMPLATE.getForEntity(
baseURL + "/internal/v1/documents?codes=" + DOCUMENT_CODE,
String.class);
assertThat(responseEntityPresent.getStatusCode()).isEqualTo(HttpStatus.OK);
var body = responseEntityPresent.getBody();
var documents = OBJECT_MAPPER.readValue(body, new TypeReference<List<DocumentInfoDTO>>() {
});
assertThat(documents).hasSize(1);
assertThat(documents.get(0).getCode()).isEqualTo(DOCUMENT_CODE);
assertThat(documents.get(0).getDocumentUrl()).isEqualTo(DOCUMENT_URL);
try {
REST_TEMPLATE.getForEntity(
baseURL + "/internal/v1/documents?codes=" + EMPTY_DOCUMENT_CODE,
String.class);
fail("should have thrown exception");
} catch (HttpClientErrorException ex) {
assertThat(ex.getStatusCode()).isEqualTo(HttpStatus.UNPROCESSABLE_ENTITY);
}
ResponseEntity<String> responseEntityEmpty = REST_TEMPLATE.getForEntity(
baseURL + "/internal/v1/documents?codes=" + DOCUMENT_CODE_NOT_EXISTS,
String.class);
assertThat(responseEntityEmpty.getStatusCode()).isEqualTo(HttpStatus.OK);
var emptyBody = responseEntityEmpty.getBody();
var documentsList = OBJECT_MAPPER.readValue(emptyBody, new TypeReference<List<DocumentInfoDTO>>() {
});
assertThat(documentsList).isEmpty();
}
}`
`package com.statrys.bankaccount.api.contract;
import au.com.dius.pact.provider.junit5.PactVerificationContext;
import au.com.dius.pact.provider.junitsupport.Provider;
import au.com.dius.pact.provider.junitsupport.State;
import au.com.dius.pact.provider.junitsupport.loader.PactBroker;
import au.com.dius.pact.provider.junitsupport.loader.PactBrokerAuth;
import au.com.dius.pact.provider.junitsupport.loader.PactBrokerConsumerVersionSelectors;
import au.com.dius.pact.provider.junitsupport.loader.SelectorBuilder;
import au.com.dius.pact.provider.spring.spring6.PactVerificationSpring6Provider;
import au.com.dius.pact.provider.spring.spring6.Spring6MockMvcTestTarget;
import com.statrys.bankaccount.api.contract.mocks.BeneficiaryMocks;
import com.statrys.bankaccount.api.controller.BeneficiaryApiController;
import com.statrys.bankaccount.configuration.ContractConfig;
import com.statrys.bankaccount.service.BeneficiaryService;
import com.statrys.bankaccount.type.BankServiceMessage;
import com.statrys.common.exception.ServiceException;
import com.statrys.common.web.handler.CustomResponseEntityExceptionHandler;
import com.st…
pact-foundation/pact-js