use of uk.gov.pay.products.persistence.entity.PaymentEntity in project pay-products by alphagov.
the class PaymentCreatorTest method shouldCreateAMotoPaymentWithCardAgentInitiatedMotoSource_whenProductIsAgentInitiatedMoto.
@Test
public void shouldCreateAMotoPaymentWithCardAgentInitiatedMotoSource_whenProductIsAgentInitiatedMoto() {
PowerMockito.mockStatic(RandomIdGenerator.class);
int productId = 1;
String productExternalId = "product-external-id";
long productPrice = 100L;
String productName = "name";
String productReturnUrl = "https://return.url";
String productApiToken = "api-token";
String userDefinedReference = "user-defined-reference";
Integer gatewayAccountId = 1;
String paymentId = "payment-id";
String paymentExternalId = "random-external-id";
String paymentNextUrl = "http://next.url";
SupportedLanguage language = SupportedLanguage.ENGLISH;
Long priceOverride = 500L;
ProductEntity productEntity = createProductEntity(productId, ProductType.AGENT_INITIATED_MOTO, productPrice, productExternalId, productName, "", productApiToken, gatewayAccountId, true, language);
PaymentRequest expectedPaymentRequest = createPaymentRequest(priceOverride, userDefinedReference, productName, productReturnUrl + "/" + paymentExternalId, language, true, Map.of(), CARD_AGENT_INITIATED_MOTO);
PaymentResponse paymentResponse = createPaymentResponse(paymentId, priceOverride, paymentNextUrl, productReturnUrl);
when(productDao.findByExternalId(productExternalId)).thenReturn(Optional.of(productEntity));
when(randomUuid()).thenReturn(paymentExternalId);
when(productsConfiguration.getProductsUiConfirmUrl()).thenReturn(productReturnUrl);
when(publicApiRestClient.createPayment(argThat(is(productApiToken)), argThat(PaymentRequestMatcher.isSame(expectedPaymentRequest)))).thenReturn(paymentResponse);
Payment payment = paymentCreator.doCreate(productExternalId, priceOverride, userDefinedReference);
assertNotNull(payment);
assertNotNull(payment.getExternalId());
assertThat(payment.getGovukPaymentId(), is(paymentResponse.getPaymentId()));
assertThat(payment.getAmount(), is(500L));
assertThat(payment.getReferenceNumber(), is(userDefinedReference));
PaymentEntity expectedPaymentEntity = createPaymentEntity(paymentId, userDefinedReference, paymentNextUrl, productEntity, SUBMITTED, priceOverride);
verify(paymentDao).merge(argThat(PaymentEntityMatcher.isSame(expectedPaymentEntity)));
}
use of uk.gov.pay.products.persistence.entity.PaymentEntity in project pay-products by alphagov.
the class PaymentCreatorTest method shouldCreateASuccessfulPayment_whenReturnUrlIsPresent.
@Test
public void shouldCreateASuccessfulPayment_whenReturnUrlIsPresent() {
PowerMockito.mockStatic(RandomIdGenerator.class);
int productId = 1;
String productExternalId = "product-external-id";
String paymentExernalId = "payment-external-id";
long productPrice = 100L;
String productName = "name";
String productReturnUrl = "https://return.url";
String productApiToken = "api-token";
String referenceNumber = createRandomReferenceNumber();
Integer gatewayAccountId = 1;
String paymentId = "payment-id";
Long paymentAmount = 50L;
String paymentNextUrl = "http://next.url";
String productsUIConfirmUri = "https://products-ui/payment-complete";
String paymentReturnUrl = format("%s/%s", productsUIConfirmUri, paymentExernalId);
SupportedLanguage language = SupportedLanguage.WELSH;
ProductEntity productEntity = createProductEntity(productId, productPrice, productExternalId, productName, productReturnUrl, productApiToken, gatewayAccountId, false, language);
PaymentRequest expectedPaymentRequest = createPaymentRequest(productPrice, referenceNumber, productName, paymentReturnUrl, language, false, Map.of(), CARD_PAYMENT_LINK);
PaymentResponse paymentResponse = createPaymentResponse(paymentId, paymentAmount, paymentNextUrl, productReturnUrl);
when(randomUuid()).thenReturn(paymentExernalId);
when(randomUserFriendlyReference()).thenReturn(referenceNumber);
when(productDao.findByExternalId(productExternalId)).thenReturn(Optional.of(productEntity));
when(publicApiRestClient.createPayment(argThat(is(productApiToken)), argThat(PaymentRequestMatcher.isSame(expectedPaymentRequest)))).thenReturn(paymentResponse);
when(productsConfiguration.getProductsUiConfirmUrl()).thenReturn(productsUIConfirmUri);
Payment payment = paymentCreator.doCreate(productExternalId, null, null);
assertNotNull(payment);
assertNotNull(payment.getExternalId());
assertThat(payment.getGovukPaymentId(), is(paymentResponse.getPaymentId()));
assertThat(payment.getNextUrl(), is(paymentResponse.getLinks().getNextUrl().getHref()));
assertThat(payment.getAmount(), is(paymentResponse.getAmount()));
assertNotNull(payment.getLinks());
assertThat(payment.getLinks().size(), is(2));
assertThat(payment.getLinks().get(0).getMethod(), is("GET"));
assertThat(payment.getLinks().get(0).getHref(), is(PRODUCT_URL + "/v1/api/payments/" + payment.getExternalId()));
assertThat(payment.getLinks().get(1).getMethod(), is("GET"));
assertThat(payment.getLinks().get(1).getHref(), is(paymentResponse.getLinks().getNextUrl().getHref()));
assertThat(payment.getProductId(), is(productEntity.getId()));
assertThat(payment.getProductExternalId(), is(productEntity.getExternalId()));
assertThat(payment.getStatus(), is(SUBMITTED));
PaymentEntity expectedPaymentEntity = createPaymentEntity(paymentId, paymentNextUrl, productEntity, SUBMITTED, paymentAmount);
verify(paymentDao).merge(argThat(PaymentEntityMatcher.isSame(expectedPaymentEntity)));
}
use of uk.gov.pay.products.persistence.entity.PaymentEntity in project pay-products by alphagov.
the class PaymentCreatorTest method shouldCreateAnErrorPayment_whenPublicApiCallFails.
@Test
public void shouldCreateAnErrorPayment_whenPublicApiCallFails() {
PowerMockito.mockStatic(RandomIdGenerator.class);
int productId = 1;
String productExternalId = "product-external-id";
long productPrice = 100L;
String productName = "name";
String productReturnUrl = "https://return.url";
String productApiToken = "api-token";
Integer gatewayAccountId = 1;
String paymentExternalId = "random-external-id";
String referenceNumber = createRandomReferenceNumber();
String productsUIConfirmUri = "https://products-ui/payment-complete";
String paymentReturnUrl = format("%s/%s", productsUIConfirmUri, paymentExternalId);
SupportedLanguage language = SupportedLanguage.WELSH;
ProductEntity productEntity = createProductEntity(productId, productPrice, productExternalId, productName, productReturnUrl, productApiToken, gatewayAccountId, false, language);
PaymentRequest expectedPaymentRequest = createPaymentRequest(productPrice, referenceNumber, productName, paymentReturnUrl, language, false, Map.of(), CARD_PAYMENT_LINK);
when(productDao.findByExternalId(productExternalId)).thenReturn(Optional.of(productEntity));
when(randomUuid()).thenReturn(paymentExternalId);
when(randomUserFriendlyReference()).thenReturn(referenceNumber);
when(productsConfiguration.getProductsUiConfirmUrl()).thenReturn(productsUIConfirmUri);
when(publicApiRestClient.createPayment(argThat(is(productApiToken)), argThat(PaymentRequestMatcher.isSame(expectedPaymentRequest)))).thenThrow(PublicApiResponseErrorException.class);
try {
paymentCreator.doCreate(productExternalId, null, null);
fail("Expected an PaymentCreationException to be thrown");
} catch (PaymentCreationException e) {
assertThat(e.getProductExternalId(), is(productExternalId));
PaymentEntity expectedPaymentEntity = createPaymentEntity(null, null, productEntity, ERROR, null);
verify(paymentDao).merge(argThat(PaymentEntityMatcher.isSame(expectedPaymentEntity)));
}
}
use of uk.gov.pay.products.persistence.entity.PaymentEntity in project pay-products by alphagov.
the class PaymentCreatorTest method shouldCreateASuccessfulPayment_withOverridePrice_whenPriceOverridePresent.
@Test
public void shouldCreateASuccessfulPayment_withOverridePrice_whenPriceOverridePresent() {
PowerMockito.mockStatic(RandomIdGenerator.class);
int productId = 1;
String productExternalId = "product-external-id";
long productPrice = 100L;
String productName = "name";
String productReturnUrl = "https://return.url";
String productApiToken = "api-token";
Integer gatewayAccountId = 1;
String paymentId = "payment-id";
String paymentExternalId = "random-external-id";
String paymentNextUrl = "http://next.url";
String referenceNumber = createRandomReferenceNumber();
SupportedLanguage language = SupportedLanguage.WELSH;
Long priceOverride = 500L;
ProductEntity productEntity = createProductEntity(productId, productPrice, productExternalId, productName, "", productApiToken, gatewayAccountId, false, language);
PaymentRequest expectedPaymentRequest = createPaymentRequest(priceOverride, referenceNumber, productName, productReturnUrl + "/" + paymentExternalId, language, false, Map.of(), CARD_PAYMENT_LINK);
PaymentResponse paymentResponse = createPaymentResponse(paymentId, priceOverride, paymentNextUrl, productReturnUrl);
when(productDao.findByExternalId(productExternalId)).thenReturn(Optional.of(productEntity));
when(randomUuid()).thenReturn(paymentExternalId);
when(randomUserFriendlyReference()).thenReturn(referenceNumber);
when(productsConfiguration.getProductsUiConfirmUrl()).thenReturn(productReturnUrl);
when(publicApiRestClient.createPayment(argThat(is(productApiToken)), argThat(PaymentRequestMatcher.isSame(expectedPaymentRequest)))).thenReturn(paymentResponse);
Payment payment = paymentCreator.doCreate(productExternalId, priceOverride, null);
assertNotNull(payment);
assertNotNull(payment.getExternalId());
assertThat(payment.getGovukPaymentId(), is(paymentResponse.getPaymentId()));
assertThat(payment.getAmount(), is(500L));
PaymentEntity expectedPaymentEntity = createPaymentEntity(paymentId, paymentNextUrl, productEntity, SUBMITTED, priceOverride);
verify(paymentDao).merge(argThat(PaymentEntityMatcher.isSame(expectedPaymentEntity)));
}
use of uk.gov.pay.products.persistence.entity.PaymentEntity in project pay-products by alphagov.
the class PaymentCreator method paymentCreation.
private NonTransactionalOperation<TransactionContext, PaymentEntity> paymentCreation(Long priceOverride) {
return context -> {
PaymentEntity paymentEntity = context.get(PaymentEntity.class);
ProductEntity productEntity = paymentEntity.getProductEntity();
String returnUrl = format("%s/%s", productsConfiguration.getProductsUiConfirmUrl(), paymentEntity.getExternalId());
Long paymentPrice = priceOverride != null ? priceOverride : productEntity.getPrice();
boolean isMoto = productEntity.getType() == ProductType.AGENT_INITIATED_MOTO;
Source source = productEntity.getType() == ProductType.AGENT_INITIATED_MOTO ? Source.CARD_AGENT_INITIATED_MOTO : Source.CARD_PAYMENT_LINK;
PaymentRequest paymentRequest = new PaymentRequest(paymentPrice, paymentEntity.getReferenceNumber(), productEntity.getName(), returnUrl, productEntity.getLanguage(), isMoto, productEntity.toProductMetadataMap(), source);
try {
PaymentResponse paymentResponse = publicApiRestClient.createPayment(productEntity.getPayApiToken(), paymentRequest);
paymentEntity.setGovukPaymentId(paymentResponse.getPaymentId());
paymentEntity.setNextUrl(getNextUrl(paymentResponse));
paymentEntity.setStatus(PaymentStatus.SUBMITTED);
paymentEntity.setAmount(paymentResponse.getAmount());
logger.info("Payment creation for product external id {} successful", paymentEntity.getProductEntity().getExternalId(), kv(PAYMENT_EXTERNAL_ID, paymentEntity.getGovukPaymentId()), kv("product_external_id", paymentEntity.getProductEntity().getExternalId()));
if (PanDetector.isSuspectedPan(paymentEntity.getReferenceNumber())) {
logger.warn("Suspected PAN entered by user in reference field", kv(PAYMENT_EXTERNAL_ID, paymentEntity.getGovukPaymentId()), kv(GATEWAY_ACCOUNT_ID, paymentEntity.getGatewayAccountId()), kv("number_of_digits", PanDetector.cleanedReference(paymentEntity.getReferenceNumber()).length()));
}
} catch (PublicApiResponseErrorException e) {
logger.error("Payment creation for product external id {} failed {}", paymentEntity.getProductEntity().getExternalId(), e);
paymentEntity.setStatus(PaymentStatus.ERROR);
}
return paymentEntity;
};
}
Aggregations