BankSimulatorContractTest.java
Bridget/payment_solutions/src/test/java/com/checkout/payment/gateway/client/BankSimulatorContractTest.java
package com.checkout.payment.gateway.client;
import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
import static com.github.tomakehurst.wiremock.client.WireMock.equalTo;
import static com.github.tomakehurst.wiremock.client.WireMock.matchingJsonPath;
import static com.github.tomakehurst.wiremock.client.WireMock.post;
import static com.github.tomakehurst.wiremock.client.WireMock.postRequestedFor;
import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
import static org.assertj.core.api.Assertions.assertThat;
import com.checkout.payment.gateway.model.BankRequest;
import com.checkout.payment.gateway.model.BankResponse;
import com.github.tomakehurst.wiremock.WireMockServer;
import com.github.tomakehurst.wiremock.core.WireMockConfiguration;
import java.time.Duration;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.web.client.RestTemplate;
class BankSimulatorContractTest {
private static WireMockServer wireMockServer;
@BeforeAll
static void startServer() {
wireMockServer = new WireMockServer(WireMockConfiguration.options().dynamicPort());
wireMockServer.start();
}
@AfterAll
static void stopServer() {
wireMockServer.stop();
}
@Test
void bankRequestMatchesSimulatorContract() {
wireMockServer.stubFor(post(urlEqualTo("/payments"))
.willReturn(aResponse()
.withStatus(200)
.withHeader("Content-Type", "application/json")
.withBody("{\"authorized\":true,\"authorization_code\":\"test-auth-code\"}")));
RestTemplate restTemplate = new RestTemplateBuilder()
.setConnectTimeout(Duration.ofSeconds(2))
.setReadTimeout(Duration.ofSeconds(2))
.build();
String baseUrl = "http://localhost:" + wireMockServer.port();
BankClient client = new BankClient(restTemplate, baseUrl);
BankRequest request = new BankRequest("2222405343248877", 4, 2030, "GBP", 100, "123");
BankResponse response = client.processPayment(request);
assertThat(response.isAuthorized()).isTrue();
assertThat(response.getAuthorizationCode()).isEqualTo("test-auth-code");
wireMockServer.verify(postRequestedFor(urlEqualTo("/payments"))
.withRequestBody(matchingJsonPath("$.card_number", equalTo("2222405343248877")))
.withRequestBody(matchingJsonPath("$.expiry_date", equalTo("04/2030")))
.withRequestBody(matchingJsonPath("$.currency", equalTo("GBP")))
.withRequestBody(matchingJsonPath("$.amount", equalTo("100")))
.withRequestBody(matchingJsonPath("$.cvv", equalTo("123"))));
}
}
Related articles
PaymentGatewayApplication.java
PaymentGatewayApplication.java — java source code from the Bridget learning materials (Bridget/payment-gateway-challenge-java/src/main/java/com/checkout/payment/gateway/PaymentGatewayApplication.java).
Read article →ApplicationConfiguration.java
ApplicationConfiguration.java — java source code from the Bridget learning materials (Bridget/payment-gateway-challenge-java/src/main/java/com/checkout/payment/gateway/configuration/ApplicationConfiguration.java).
Read article →RequestResponseLogger.java
RequestResponseLogger.java — java source code from the Bridget learning materials (Bridget/payment-gateway-challenge-java/src/main/java/com/checkout/payment/gateway/configuration/RequestResponseLogger.java).
Read article →PaymentGatewayController.java
PaymentGatewayController.java — java source code from the Bridget learning materials (Bridget/payment-gateway-challenge-java/src/main/java/com/checkout/payment/gateway/controller/PaymentGatewayController.java).
Read article →PaymentStatus.java
PaymentStatus.java — java source code from the Bridget learning materials (Bridget/payment-gateway-challenge-java/src/main/java/com/checkout/payment/gateway/enums/PaymentStatus.java).
Read article →BankErrorException.java
BankErrorException.java — java source code from the Bridget learning materials (Bridget/payment-gateway-challenge-java/src/main/java/com/checkout/payment/gateway/exception/BankErrorException.java).
Read article →