['pseudocardpan' => 'PSEUDO123']]); expect($config->toArray())->toMatchArray([ 'clearingtype' => 'cc', 'wallettype' => '', 'onlinebanktransfertype' => '', 'request' => 'authorization', 'pseudocardpan' => 'PSEUDO123', ]); }); it('resolves vor with no context needed', function (): void { $config = PaymentMethodResolver::resolve('vor'); expect($config->toArray())->toMatchArray([ 'clearingtype' => 'vor', 'wallettype' => '', 'onlinebanktransfertype' => '', 'request' => 'authorization', ]); }); it('resolves elv with bank data from context', function (): void { $ctx = [ 'elv' => [ 'mandate_identification' => 'MAND001', 'iban' => 'DE89370400440532013000', 'bic' => 'COBADEFFXXX', 'bankaccountholder' => 'Max Mustermann', ], ]; $config = PaymentMethodResolver::resolve('elv', $ctx); expect($config->toArray())->toMatchArray([ 'clearingtype' => 'elv', 'request' => 'authorization', 'iban' => 'DE89370400440532013000', 'bic' => 'COBADEFFXXX', 'mandate_identification' => 'MAND001', 'bankaccountholder' => 'Max Mustermann', ]); }); // --- Compound methods --- it('resolves wlt#PPE for PayPal via PAYONE', function (): void { $config = PaymentMethodResolver::resolve('wlt#PPE'); expect($config->toArray())->toMatchArray([ 'clearingtype' => 'wlt', 'wallettype' => 'PPE', 'onlinebanktransfertype' => '', 'request' => 'authorization', ]); }); it('resolves wlt#PDT for paydirekt', function (): void { $config = PaymentMethodResolver::resolve('wlt#PDT'); expect($config->toArray()['wallettype'])->toBe('PDT'); }); it('resolves sb#PNT for Sofort', function (): void { $config = PaymentMethodResolver::resolve('sb#PNT'); expect($config->toArray())->toMatchArray([ 'clearingtype' => 'sb', 'wallettype' => '', 'onlinebanktransfertype' => 'PNT', 'bankcountry' => 'DE', 'request' => 'authorization', ]); }); it('resolves sb#GPY for giropay', function (): void { $config = PaymentMethodResolver::resolve('sb#GPY'); expect($config->toArray()['onlinebanktransfertype'])->toBe('GPY'); }); it('resolves fnc#MIV for MIVITA invoice', function (): void { $config = PaymentMethodResolver::resolve('fnc#MIV'); expect($config->toArray())->toMatchArray([ 'clearingtype' => 'fnc', 'wallettype' => '', 'onlinebanktransfertype' => 'MIV', 'request' => 'authorization', ]); }); // --- Error cases --- it('throws for unknown simple payment method', function (): void { PaymentMethodResolver::resolve('unknown'); })->throws(InvalidArgumentException::class, 'Unknown payment method: unknown'); it('throws for unknown compound type', function (): void { PaymentMethodResolver::resolve('xyz#FOO'); })->throws(InvalidArgumentException::class, 'Unknown compound payment method type: xyz'); it('throws for unknown fnc subtype', function (): void { PaymentMethodResolver::resolve('fnc#PYV'); })->throws(InvalidArgumentException::class, 'Unknown fnc subtype: PYV');