Skip to content

Commit

Permalink
SUPESC-781 adjustments after refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
olhalivitchuk committed Mar 18, 2024
1 parent cac2334 commit c373edd
Show file tree
Hide file tree
Showing 5 changed files with 50 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,11 @@ protected function checkApiAuthorizationRedirectAndError(QuoteTransfer $quoteTra
$requestContainer = $this->payoneRequestProductDataMapper->mapProductData($quoteTransfer, $requestContainer);
}

$responseContainer = $this->baseAuthorizeSender->performAuthorizationRequest($paymentEntity, $requestContainer);
$rawResponse = $this->payoneRepository->getPreauthorizedPaymentByReference($requestContainer->getReference());

if ($rawResponse === []) {
$responseContainer = $this->baseAuthorizeSender->performAuthorizationRequest($paymentEntity, $requestContainer);
}

if ($responseContainer->getErrorcode()) {
$checkoutErrorTransfer = $this->createCheckoutErrorTransfer($responseContainer->getCustomermessage(), $responseContainer->getErrorcode());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
use SprykerEco\Zed\Payone\Business\Payment\DataMapper\StandartParameterMapperInterface;
use SprykerEco\Zed\Payone\Business\Payment\PaymentMapperReaderInterface;
use SprykerEco\Zed\Payone\Persistence\PayoneQueryContainerInterface;
use SprykerEco\Zed\Payone\Persistence\PayoneRepositoryInterface;

class PayoneBaseAuthorizeSender extends AbstractPayoneRequestSender implements PayoneBaseAuthorizeSenderInterface
{
Expand All @@ -36,32 +35,24 @@ class PayoneBaseAuthorizeSender extends AbstractPayoneRequestSender implements P
*/
protected $standartParameterMapper;

/**
* @var \SprykerEco\Zed\Payone\Persistence\PayoneRepositoryInterface
*/
protected PayoneRepositoryInterface $repository;

/**
* @param \SprykerEco\Zed\Payone\Business\Api\Adapter\AdapterInterface $executionAdapter
* @param \SprykerEco\Zed\Payone\Persistence\PayoneQueryContainerInterface $queryContainer
* @param \SprykerEco\Zed\Payone\Business\Payment\PaymentMapperReaderInterface $paymentMapperReader
* @param \Generated\Shared\Transfer\PayoneStandardParameterTransfer $standardParameter
* @param \SprykerEco\Zed\Payone\Business\Payment\DataMapper\StandartParameterMapperInterface $standartParameterMapper
* @param \SprykerEco\Zed\Payone\Persistence\PayoneRepositoryInterface $repository
*/
public function __construct(
AdapterInterface $executionAdapter,
PayoneQueryContainerInterface $queryContainer,
PaymentMapperReaderInterface $paymentMapperReader,
PayoneStandardParameterTransfer $standardParameter,
StandartParameterMapperInterface $standartParameterMapper,
PayoneRepositoryInterface $repository
StandartParameterMapperInterface $standartParameterMapper
) {
parent::__construct($queryContainer, $paymentMapperReader);
$this->executionAdapter = $executionAdapter;
$this->standardParameter = $standardParameter;
$this->standartParameterMapper = $standartParameterMapper;
$this->repository = $repository;
}

/**
Expand All @@ -77,12 +68,7 @@ public function performAuthorizationRequest(
$this->standartParameterMapper->setStandardParameter($requestContainer, $this->standardParameter);

$apiLogEntity = $this->initializeApiLog($paymentEntity, $requestContainer);
$rawResponse = $this->repository->getPreauthorizedPaymentByReference($requestContainer->getReference());

if ($rawResponse === []) {
$rawResponse = $this->executionAdapter->sendRequest($requestContainer);
}

$rawResponse = $this->executionAdapter->sendRequest($requestContainer);
$responseContainer = new AuthorizationResponseContainer($rawResponse);
$this->updatePaymentAfterAuthorization($paymentEntity, $responseContainer);
$this->updateApiLogAfterAuthorization($apiLogEntity, $responseContainer);
Expand Down
2 changes: 0 additions & 2 deletions src/SprykerEco/Zed/Payone/Business/PayoneBusinessFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,6 @@
use SprykerEco\Zed\Payone\Business\TransactionStatus\TransactionStatusUpdateManagerInterface;
use SprykerEco\Zed\Payone\Dependency\Facade\PayoneToGlossaryFacadeInterface;
use SprykerEco\Zed\Payone\Dependency\Facade\PayoneToStoreFacadeInterface;
use SprykerEco\Zed\Payone\Dependency\Service\PayoneToUtilEncodingServiceInterface;
use SprykerEco\Zed\Payone\PayoneDependencyProvider;
use Symfony\Component\HttpFoundation\RequestStack;

Expand Down Expand Up @@ -508,7 +507,6 @@ public function createPayoneBaseAuthorizeSender(): PayoneBaseAuthorizeSenderInte
$this->createPaymentMapperReader(),
$this->getStandardParameter(),
$this->createStandartParameterMapper(),
$this->getRepository(),
);
}

Expand Down
30 changes: 23 additions & 7 deletions src/SprykerEco/Zed/Payone/Persistence/PayoneRepository.php
Original file line number Diff line number Diff line change
Expand Up @@ -196,13 +196,7 @@ public function getPreauthorizedPaymentByReference(string $reference): array
return [];
}

$formattedPaymentData = array_merge(
$paymentData->toArray(),
$this->getFactory()->getServiceUtilEncoding()->decodeJson($paymentData->getVirtualColumn(static::RAW_RESPONSE_COLUMN_NAME), true),
);
unset($formattedPaymentData[static::RAW_RESPONSE_COLUMN_NAME]);

return $formattedPaymentData;
return $this->getFormattedPaymentData($paymentData);
}

/**
Expand Down Expand Up @@ -272,4 +266,26 @@ protected function createPaymentPayoneTransactionStatusLogQueryByOrderIds(ArrayO

return $query;
}

/**
* @param array<string, mixed> $paymentData
*
* @return array<string, mixed>
*/
protected function getFormattedPaymentData(array $paymentData): array
{
$paymentResponseData = $this->getFactory()->getServiceUtilEncoding()->decodeJson($paymentData[static::RAW_RESPONSE_COLUMN_NAME], true);

if ($paymentResponseData === null) {
return [];
}

$formattedPaymentData = array_merge(
$paymentData,
$paymentResponseData,
);
unset($formattedPaymentData[static::RAW_RESPONSE_COLUMN_NAME]);

return $formattedPaymentData;
}
}
20 changes: 20 additions & 0 deletions tests/SprykerEcoTest/Zed/Payone/Business/Order/HookTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
namespace SprykerEcoTest\Zed\Payone\Business\Order;

use Generated\Shared\Transfer\CheckoutResponseTransfer;
use Orm\Zed\Payone\Persistence\SpyPaymentPayoneApiLogQuery;
use SprykerEco\Shared\Payone\PayoneApiConstants;
use SprykerEcoTest\Zed\Payone\Business\AbstractPayoneTest;

Expand Down Expand Up @@ -40,4 +41,23 @@ public function testPostSaveHook()
$this->assertTrue($newCheckoutResponseTransfer->getIsExternalRedirect());
$this->assertEquals('redirect url', $newCheckoutResponseTransfer->getRedirectUrl());
}

/**
* @return void
*/
public function testPostSaveHookDoesNotSendPreauthorizeRequestTwice()
{
$this->createPayonePayment();
$paymentApiLog = $this->createPayoneApiLog(PayoneApiConstants::REQUEST_TYPE_PREAUTHORIZATION, PayoneApiConstants::RESPONSE_TYPE_APPROVED);

$checkoutResponseTransfer = new CheckoutResponseTransfer();
$this->quoteTransfer->getPayment()
->getPayone()
->setFkSalesOrder($this->orderEntity->getIdSalesOrder());
$newCheckoutResponseTransfer = $this->payoneFacade->postSaveHook($this->quoteTransfer, $checkoutResponseTransfer);

$preauthorizedRequestsCount = (new SpyPaymentPayoneApiLogQuery())->filterByTransactionId('213552995')->find()->count();
$this->assertTrue($newCheckoutResponseTransfer->getIsExternalRedirect());
$this->assertEquals(1, $preauthorizedRequestsCount);
}
}

0 comments on commit c373edd

Please sign in to comment.