Приведи примеры проверок платежа по кредитной карте в тестировании

«Приведи примеры проверок платежа по кредитной карте в тестировании» — вопрос из категории Основы тестирования, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

При тестировании платежной системы проверки строятся вокруг корректности, безопасности и записи данных. Вот ключевые сценарии с примерами.

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());
}