Add test for IRI

This commit is contained in:
Francis Hilaire 2026-01-15 13:30:20 +01:00
parent 51731afba4
commit 562c7a69a0
No known key found for this signature in database
GPG key ID: 3392F830BF33D421

View file

@ -18,6 +18,7 @@ use PHPUnit\Framework\MockObject\MockObject;
use PHPUnit\Framework\TestCase;
use Sylius\Bundle\ApiBundle\Attribute\PaymentRequestActionAware;
use Sylius\Bundle\ApiBundle\Command\Payment\AddPaymentRequest;
use Sylius\Bundle\ApiBundle\Converter\IriToIdentifierConverterInterface;
use Sylius\Bundle\ApiBundle\Serializer\ContextBuilder\PaymentRequestActionAwareContextBuilder;
use Sylius\Bundle\PaymentBundle\Provider\DefaultActionProviderInterface;
use Sylius\Component\Payment\Model\PaymentRequestInterface;
@ -28,6 +29,8 @@ final class PaymentRequestActionAwareContextBuilderTest extends TestCase
{
private MockObject|SerializerContextBuilderInterface $decoratedContextBuilderMock;
private IriToIdentifierConverterInterface|MockObject $iriToIdentifierConverterMock;
private DefaultActionProviderInterface|MockObject $defaultActionProviderMock;
private PaymentRequestActionAwareContextBuilder $paymentRequestActionAwareContextBuilder;
@ -35,8 +38,15 @@ final class PaymentRequestActionAwareContextBuilderTest extends TestCase
protected function setUp(): void
{
$this->decoratedContextBuilderMock = $this->createMock(SerializerContextBuilderInterface::class);
$this->iriToIdentifierConverterMock = $this->createMock(IriToIdentifierConverterInterface::class);
$this->defaultActionProviderMock = $this->createMock(DefaultActionProviderInterface::class);
$this->paymentRequestActionAwareContextBuilder = new PaymentRequestActionAwareContextBuilder($this->decoratedContextBuilderMock, PaymentRequestActionAware::class, PaymentRequestActionAware::DEFAULT_ARGUMENT_NAME, $this->defaultActionProviderMock);
$this->paymentRequestActionAwareContextBuilder = new PaymentRequestActionAwareContextBuilder(
$this->iriToIdentifierConverterMock,
$this->decoratedContextBuilderMock,
PaymentRequestActionAware::class,
PaymentRequestActionAware::DEFAULT_ARGUMENT_NAME,
$this->defaultActionProviderMock,
);
}
public function test_it_sets_action_as_a_constructor_argument(): void
@ -56,6 +66,13 @@ final class PaymentRequestActionAwareContextBuilderTest extends TestCase
])
;
$this->iriToIdentifierConverterMock
->expects($this->once())
->method('isIdentifier')
->with('cash_on_delivery')
->willReturn(false)
;
$this->defaultActionProviderMock
->expects($this->once())
->method('getActionFromPaymentMethodCode')
@ -89,6 +106,59 @@ final class PaymentRequestActionAwareContextBuilderTest extends TestCase
])
;
$this->iriToIdentifierConverterMock
->expects($this->once())
->method('isIdentifier')
->with('cash_on_delivery')
->willReturn(false)
;
$this->defaultActionProviderMock
->expects($this->once())
->method('getActionFromPaymentMethodCode')
->with('cash_on_delivery')
->willReturn(PaymentRequestInterface::ACTION_CAPTURE)
;
$this->assertSame([
'input' => ['class' => AddPaymentRequest::class],
AbstractNormalizer::DEFAULT_CONSTRUCTOR_ARGUMENTS => [
AddPaymentRequest::class => ['action' => PaymentRequestInterface::ACTION_CAPTURE],
],
], $this->paymentRequestActionAwareContextBuilder->createFromRequest($requestMock, true, []));
}
public function test_it_sets_action_as_a_constructor_argument_when_payment_method_code_is_an_iri(): void
{
/** @var Request|MockObject $requestMock */
$requestMock = $this->createMock(Request::class);
$requestMock->expects($this->exactly(2))->method('toArray')->willReturn([
'paymentMethodCode' => '/api/v2/shop/payment-methods/cash_on_delivery',
]);
$this->decoratedContextBuilderMock
->expects($this->once())
->method('createFromRequest')
->with($requestMock, true, [])
->willReturn([
'input' => ['class' => AddPaymentRequest::class],
])
;
$this->iriToIdentifierConverterMock
->expects($this->once())
->method('isIdentifier')
->with('/api/v2/shop/payment-methods/cash_on_delivery')
->willReturn(true)
;
$this->iriToIdentifierConverterMock
->expects($this->once())
->method('getIdentifier')
->with('/api/v2/shop/payment-methods/cash_on_delivery')
->willReturn('cash_on_delivery')
;
$this->defaultActionProviderMock
->expects($this->once())
->method('getActionFromPaymentMethodCode')