diff --git a/Setup/Patch/Data/CreateStatusAuthorized.php b/Setup/Patch/Data/CreateStatusAuthorized.php index a30495f719..1b51ccc820 100644 --- a/Setup/Patch/Data/CreateStatusAuthorized.php +++ b/Setup/Patch/Data/CreateStatusAuthorized.php @@ -12,15 +12,11 @@ namespace Adyen\Payment\Setup\Patch\Data; use Adyen\Payment\Helper\DataPatch; -use Magento\Framework\Exception\AlreadyExistsException; use Magento\Framework\Setup\ModuleDataSetupInterface; use Magento\Framework\Setup\Patch\DataPatchInterface; use Magento\Framework\App\Config\ReinitableConfigInterface; use Magento\Framework\App\Config\Storage\WriterInterface; use Magento\Sales\Model\Order; -use Magento\Sales\Model\Order\StatusFactory; -use Magento\Sales\Model\ResourceModel\Order\StatusFactory as StatusResourceFactory; -use Magento\Sales\Model\ResourceModel\Order\Status as StatusResource; class CreateStatusAuthorized implements DataPatchInterface { @@ -28,8 +24,6 @@ class CreateStatusAuthorized implements DataPatchInterface private WriterInterface $configWriter; private ReinitableConfigInterface $reinitableConfig; private DataPatch $dataPatchHelper; - private StatusFactory $statusFactory; - private StatusResourceFactory $statusResourceFactory; const ADYEN_AUTHORIZED_STATUS = 'adyen_authorized'; const ADYEN_AUTHORIZED_STATUS_LABEL = 'Authorized'; @@ -38,38 +32,53 @@ public function __construct( ModuleDataSetupInterface $moduleDataSetup, WriterInterface $configWriter, ReinitableConfigInterface $reinitableConfig, - DataPatch $dataPatchHelper, - StatusFactory $statusFactory, - StatusResourceFactory $statusResourceFactory + DataPatch $dataPatchHelper ) { $this->moduleDataSetup = $moduleDataSetup; $this->configWriter = $configWriter; $this->reinitableConfig = $reinitableConfig; $this->dataPatchHelper = $dataPatchHelper; - $this->statusFactory = $statusFactory; - $this->statusResourceFactory = $statusResourceFactory; } public function apply() { - /** @var StatusResource $statusResource */ - $statusResource = $this->statusResourceFactory->create(); + $setup = $this->moduleDataSetup; + $setup->getConnection()->startSetup(); - $status = $this->statusFactory->create(); - $status->setData([ - 'status' => self::ADYEN_AUTHORIZED_STATUS, - 'label' => self::ADYEN_AUTHORIZED_STATUS_LABEL, - ]); + $salesOrderStatusTable = $setup->getTable('sales_order_status'); + $selectStatus = $setup->getConnection()->select() + ->from($salesOrderStatusTable) + ->where( + 'status = ?', + self::ADYEN_AUTHORIZED_STATUS + ); - try { - $statusResource->save($status); - } catch (AlreadyExistsException $exception) { - return; + $salesOrderStatusRows = $setup->getConnection()->fetchRow($selectStatus); + if (empty($salesOrderStatusRows)) { + $setup->getConnection()->insert($salesOrderStatusTable, [ + 'status' => self::ADYEN_AUTHORIZED_STATUS, + 'label' => self::ADYEN_AUTHORIZED_STATUS_LABEL + ]); } - $status->assignState(self::ADYEN_AUTHORIZED_STATUS, true, true); + $salesOrderStatusStateTable = $setup->getTable('sales_order_status_state'); + $selectState = $setup->getConnection()->select() + ->from($salesOrderStatusStateTable) + ->where( + 'status = ?', + self::ADYEN_AUTHORIZED_STATUS + ); + + $salesOrderStatusStateRows = $setup->getConnection()->fetchRow($selectState); + if (empty($salesOrderStatusStateRows)) { + $setup->getConnection()->insert($salesOrderStatusStateTable, [ + 'status' => self::ADYEN_AUTHORIZED_STATUS, + 'state' => self::ADYEN_AUTHORIZED_STATUS, + 'is_default' => 1, + 'visible_on_front' => 1 + ]); + } - $setup = $this->moduleDataSetup; $path = 'payment/adyen_abstract/payment_pre_authorized'; // Processing status was assigned mistakenly. It shouldn't be used on payment_pre_authorized. @@ -85,6 +94,7 @@ public function apply() // re-initialize otherwise it will cause errors $this->reinitableConfig->reinit(); + $setup->getConnection()->endSetup(); } /** diff --git a/Test/Unit/Setup/Patch/Data/CreateStatusAuthorizedTest.php b/Test/Unit/Setup/Patch/Data/CreateStatusAuthorizedTest.php index cf11e0e7d5..102ae15273 100644 --- a/Test/Unit/Setup/Patch/Data/CreateStatusAuthorizedTest.php +++ b/Test/Unit/Setup/Patch/Data/CreateStatusAuthorizedTest.php @@ -17,6 +17,7 @@ use Magento\Framework\App\Config\ReinitableConfigInterface; use Magento\Framework\App\Config\Storage\WriterInterface; use Magento\Framework\DB\Adapter\AdapterInterface; +use Magento\Framework\DB\Select; use Magento\Framework\Setup\ModuleDataSetupInterface; use Magento\Sales\Model\Order\Status; use Magento\Sales\Model\Order\StatusFactory; @@ -62,8 +63,16 @@ public function getVersion() */ public function getCreateStatusAuthorized(): CreateStatusAuthorized { + $selectMock = $this->createMock(Select::class); + $selectMock->method('from')->willReturnSelf(); + $selectMock->method('where')->willReturnSelf(); + + $connectionMock = $this->createMock(AdapterInterface::class); + $connectionMock->method('select')->willReturn($selectMock); + $connectionMock->method('fetchRow')->willReturn([]); + $moduleDataSetupMock = $this->createConfiguredMock(ModuleDataSetupInterface::class, [ - 'getConnection' => $this->createMock(AdapterInterface::class) + 'getConnection' => $connectionMock ]); $configWriteMock = $this->createMock(WriterInterface::class); $reinitableConfigMock = $this->createMock(ReinitableConfigInterface::class);