Ответ
При тестировании платежной системы проверки строятся вокруг корректности, безопасности и записи данных. Вот ключевые сценарии с примерами.
1. Позитивный сценарий: Успешный платеж
@Test
void testSuccessfulCreditCardPayment() {
PaymentRequest request = new PaymentRequest("4111111111111111", "12/28", "123", 100.00, "USD");
PaymentResponse response = paymentGateway.process(request);
assertEquals("APPROVED", response.getStatus());
assertNotNull(response.getTransactionId());
assertEquals(100.00, response.getAmount());
// Проверка записи в БД
Payment dbRecord = paymentRepository.findById(response.getTransactionId());
assertNotNull(dbRecord);
assertEquals("COMPLETED", dbRecord.getStatus());
}
2. Негативные сценарии: Валидация данных
// Просроченная карта
@Test
void testPayment_WithExpiredCard_ShouldFail() {
PaymentRequest request = new PaymentRequest("4111111111111111", "01/22", "123", 50.00, "USD");
PaymentResponse response = paymentGateway.process(request);
assertEquals("DECLINED", response.getStatus());
assertTrue(response.getErrorMessage().contains("expired"));
}
// Неверный CVV
@Test
void testPayment_WithInvalidCvv_ShouldFail() {
PaymentRequest request = new PaymentRequest("4111111111111111", "12/28", "999", 50.00, "USD");
PaymentResponse response = paymentGateway.process(request);
assertEquals("DECLINED", response.getStatus());
}
3. Проверка безопасности и маскирования данных
@Test
void testCardNumberMasking_InLogsAndResponses() {
PaymentRequest request = new PaymentRequest("4111111111111111", "12/28", "123", 75.00, "USD");
PaymentResponse response = paymentGateway.process(request);
// В ответе клиенту номер карты должен быть замаскирован
assertTrue(response.getMaskedCardNumber().matches("^\*{12}1111$"));
// Проверка, что полный номер НЕ логируется в открытом виде
verify(loggingService, never()).log(contains("4111111111111111"));
}
4. Интеграционные проверки
@Test
void testPaymentFlow_EndToEnd() {
// 1. Списание с карты
PaymentResponse gatewayResponse = paymentGateway.process(request);
assertEquals("APPROVED", gatewayResponse.getStatus());
// 2. Обновление баланса заказа в нашей системе
Order order = orderService.getOrder(orderId);
assertEquals("PAID", order.getPaymentStatus());
// 3. Генерация чека
Receipt receipt = receiptService.getReceiptForTransaction(gatewayResponse.getTransactionId());
assertNotNull(receipt);
assertEquals(100.00, receipt.getAmount());
}