diff --git a/src/Spryker/Zed/Payment/Business/Method/PaymentMethodUpdater.php b/src/Spryker/Zed/Payment/Business/Method/PaymentMethodUpdater.php index db01613..3a2281a 100644 --- a/src/Spryker/Zed/Payment/Business/Method/PaymentMethodUpdater.php +++ b/src/Spryker/Zed/Payment/Business/Method/PaymentMethodUpdater.php @@ -177,6 +177,8 @@ public function addPaymentMethod(AddPaymentMethodTransfer $addPaymentMethodTrans new PaymentMethodTransfer(), ); + $paymentMethodTransfer->setPaymentMethodKey($this->getPaymentMethodKey($paymentMethodTransfer)); + $messageAttributes = $addPaymentMethodTransfer->getMessageAttributesOrFail(); $existingPaymentMethodTransfer = $this->findExistentPaymentMethod($paymentMethodTransfer); @@ -352,12 +354,12 @@ protected function preparePaymentMethodToSave( $paymentMethodTransfer ->setName($paymentMethodTransfer->getLabelName()) ->setIdPaymentProvider($paymentProviderTransfer->getIdPaymentProvider()) - ->setPaymentMethodKey($paymentMethodKey); + ->setPaymentMethodKey($paymentMethodKey) + ->setIsActive(false) + ->setIsForeign(true); } $paymentMethodTransfer - ->setIsActive(false) - ->setIsForeign(true) ->setLastMessageTimestamp($messageTimestamp); return $paymentMethodTransfer; diff --git a/tests/SprykerTest/Shared/Payment/_support/Helper/PaymentDataHelper.php b/tests/SprykerTest/Shared/Payment/_support/Helper/PaymentDataHelper.php index 0d38f4b..ffa17ae 100644 --- a/tests/SprykerTest/Shared/Payment/_support/Helper/PaymentDataHelper.php +++ b/tests/SprykerTest/Shared/Payment/_support/Helper/PaymentDataHelper.php @@ -90,6 +90,9 @@ public function havePaymentMethod(array $override = []): PaymentMethodTransfer } $paymentMethodEntity->setFkPaymentProvider($paymentMethodTransfer->getIdPaymentProvider()); + if ($paymentMethodTransfer->getPaymentProvider()) { + $paymentMethodEntity->setGroupName($paymentMethodTransfer->getPaymentProvider()->getName()); + } $paymentMethodEntity->fromArray($modifiedPaymentMethodData); $paymentMethodEntity->save(); diff --git a/tests/SprykerTest/Zed/Payment/Business/Facade/PaymentFacadeTest.php b/tests/SprykerTest/Zed/Payment/Business/Facade/PaymentFacadeTest.php index 44b27d7..c583613 100644 --- a/tests/SprykerTest/Zed/Payment/Business/Facade/PaymentFacadeTest.php +++ b/tests/SprykerTest/Zed/Payment/Business/Facade/PaymentFacadeTest.php @@ -35,8 +35,10 @@ use Spryker\Zed\Kernel\Container; use Spryker\Zed\Payment\Business\Method\PaymentMethodReader; use Spryker\Zed\Payment\Business\PaymentBusinessFactory; +use Spryker\Zed\Payment\Business\PaymentFacade; use Spryker\Zed\Payment\PaymentConfig; use Spryker\Zed\Payment\PaymentDependencyProvider; +use SprykerTest\Zed\Payment\PaymentBusinessTester; /** * Auto-generated group annotations @@ -80,7 +82,7 @@ class PaymentFacadeTest extends Unit /** * @var \SprykerTest\Zed\Payment\PaymentBusinessTester */ - protected $tester; + protected PaymentBusinessTester $tester; /** * @var \Spryker\Zed\Payment\Business\PaymentFacadeInterface|\Spryker\Zed\Kernel\Business\AbstractFacade @@ -821,6 +823,86 @@ public function testAddPaymentMethodReturnsSavedPaymentMethodTransferWithCorrect $this->assertSame($addPaymentMethodTransfer->getPaymentAuthorizationEndpoint(), $createdAddPaymentMethodTransfer->getPaymentAuthorizationEndpoint()); } + /** + * Reflecting an Update of a PaymentMethod. + * + * @return void + */ + public function testGivenThePaymentMethodAlreadyExistsAndIsActiveWhenTheAddPaymentMethodMessageIsHandledThenThePaymentMethodIsUpdatedAndIsStillActive(): void + { + // Arrange + $paymentMethodName = 'MethodName' . Uuid::uuid4()->toString(); + $paymentProviderKey = 'ProviderKey' . Uuid::uuid4()->toString(); + + $paymentProviderTransfer = $this->tester->havePaymentProvider([PaymentProviderTransfer::PAYMENT_PROVIDER_KEY => $paymentProviderKey]); + + $this->tester->havePaymentMethod([ + PaymentMethodTransfer::IS_ACTIVE => true, + PaymentMethodTransfer::PAYMENT_METHOD_KEY => (new PaymentFacade())->generatePaymentMethodKey($paymentProviderKey, $paymentMethodName), + PaymentMethodTransfer::NAME => $paymentMethodName, + PaymentMethodTransfer::PAYMENT_PROVIDER => $paymentProviderTransfer, + PaymentMethodTransfer::ID_PAYMENT_PROVIDER => $paymentProviderTransfer->getIdPaymentProvider(), + PaymentMethodTransfer::IS_FOREIGN => true, + ]); + + $addPaymentMethodTransfer = $this->tester->haveAddPaymentMethodTransfer( + [ + AddPaymentMethodTransfer::NAME => $paymentMethodName, + AddPaymentMethodTransfer::PROVIDER_NAME => $paymentProviderKey, + AddPaymentMethodTransfer::PAYMENT_AUTHORIZATION_ENDPOINT => 'redirect-url', + ], + ); + + // Act + $createdPaymentMethodTransfer = $this->tester->getFacade()->addPaymentMethod($addPaymentMethodTransfer); + + // Assert + $this->assertNotNull($createdPaymentMethodTransfer->getIdPaymentMethod()); + $this->assertNotNull($createdPaymentMethodTransfer->getIdPaymentProvider()); + $this->assertFalse($createdPaymentMethodTransfer->getIsHidden(), 'Expected that the payment method is visible but it is hidden'); + $this->assertTrue($createdPaymentMethodTransfer->getIsActive(), 'Expected that the payment method is active but it is inactive'); + } + + /** + * Reflecting an Update of a PaymentMethod. + * + * @return void + */ + public function testGivenThePaymentMethodAlreadyExistsAndIsInactiveWhenTheAddPaymentMethodMessageIsHandledThenThePaymentMethodIsUpdatedAndIsStillInctive(): void + { + // Arrange + $paymentMethodName = 'MethodName' . Uuid::uuid4()->toString(); + $paymentProviderKey = 'ProviderKey' . Uuid::uuid4()->toString(); + + $paymentProviderTransfer = $this->tester->havePaymentProvider([PaymentProviderTransfer::PAYMENT_PROVIDER_KEY => $paymentProviderKey]); + + $this->tester->havePaymentMethod([ + PaymentMethodTransfer::IS_ACTIVE => false, + PaymentMethodTransfer::PAYMENT_METHOD_KEY => (new PaymentFacade())->generatePaymentMethodKey($paymentProviderKey, $paymentMethodName), + PaymentMethodTransfer::NAME => $paymentMethodName, + PaymentMethodTransfer::PAYMENT_PROVIDER => $paymentProviderTransfer, + PaymentMethodTransfer::ID_PAYMENT_PROVIDER => $paymentProviderTransfer->getIdPaymentProvider(), + PaymentMethodTransfer::IS_FOREIGN => true, + ]); + + $addPaymentMethodTransfer = $this->tester->haveAddPaymentMethodTransfer( + [ + AddPaymentMethodTransfer::NAME => $paymentMethodName, + AddPaymentMethodTransfer::PROVIDER_NAME => $paymentProviderKey, + AddPaymentMethodTransfer::PAYMENT_AUTHORIZATION_ENDPOINT => 'redirect-url', + ], + ); + + // Act + $createdPaymentMethodTransfer = $this->tester->getFacade()->addPaymentMethod($addPaymentMethodTransfer); + + // Assert + $this->assertNotNull($createdPaymentMethodTransfer->getIdPaymentMethod()); + $this->assertNotNull($createdPaymentMethodTransfer->getIdPaymentProvider()); + $this->assertFalse($createdPaymentMethodTransfer->getIsHidden(), 'Expected that the payment method is visible but it is hidden'); + $this->assertFalse($createdPaymentMethodTransfer->getIsActive(), 'Expected that the payment method is inactive but it is active'); + } + /** * @return void */ diff --git a/tests/SprykerTest/Zed/Payment/_support/PaymentBusinessTester.php b/tests/SprykerTest/Zed/Payment/_support/PaymentBusinessTester.php index 06c44e4..f807425 100644 --- a/tests/SprykerTest/Zed/Payment/_support/PaymentBusinessTester.php +++ b/tests/SprykerTest/Zed/Payment/_support/PaymentBusinessTester.php @@ -33,6 +33,8 @@ * @method \Codeception\Lib\Friend haveFriend($name, $actorClass = null) * * @SuppressWarnings(\SprykerTest\Zed\Payment\PHPMD) + * + * @method \Spryker\Zed\Payment\Business\PaymentFacadeInterface getFacade(?string $moduleName = NULL) */ class PaymentBusinessTester extends Actor {