package com.bookshop.creational.simplefactory;
import static org.junit.jupiter.api.Assertions.assertEquals;
import java.math.BigDecimal;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
@DisplayName("Simple Factory -- checkout never touches a concrete processor class")
class PaymentProcessorsTest {
@ParameterizedTest(name = "{0} -> handled by the {1} provider")
@CsvSource({
"CARD, card",
"PAYPAL, paypal",
"GIFT_CARD, gift-card"
})
@DisplayName("the factory maps each payment method to the right implementation")
void factoryChoosesImplementation(PaymentMethod method, String expectedProvider) {
PaymentProcessor processor = PaymentProcessors.forMethod(method);
PaymentReceipt receipt = processor.process(new BigDecimal("19.99"));
assertEquals(expectedProvider, receipt.provider());
assertEquals(new BigDecimal("19.99"), receipt.amount());
}
}