151 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			151 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
<?php
 | 
						|
/**
 | 
						|
 * Copyright © Magento, Inc. All rights reserved.
 | 
						|
 * See COPYING.txt for license details.
 | 
						|
 */
 | 
						|
namespace Magento\Payment\Observer;
 | 
						|
 | 
						|
use Magento\Framework\App\Config\ScopeConfigInterface;
 | 
						|
 | 
						|
/**
 | 
						|
 * @magentoAppArea adminhtml
 | 
						|
 * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
 | 
						|
 */
 | 
						|
class UpdateOrderStatusForPaymentMethodsObserverTest extends \PHPUnit\Framework\TestCase
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * @var \Magento\Framework\Event\Observer
 | 
						|
     */
 | 
						|
    protected $_eventObserver;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var \Magento\TestFramework\ObjectManager
 | 
						|
     */
 | 
						|
    protected $_objectManager;
 | 
						|
 | 
						|
    protected function setUp(): void
 | 
						|
    {
 | 
						|
        $this->_objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
 | 
						|
        $this->_eventObserver = $this->_createEventObserver();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Check that \Magento\Payment\Observer\UpdateOrderStatusForPaymentMethodsObserver::execute()
 | 
						|
     * is called as event and it can change status
 | 
						|
     *
 | 
						|
     * @magentoDbIsolation enabled
 | 
						|
     * @magentoAppIsolation enabled
 | 
						|
     * @magentoDataFixture Magento/Payment/_files/order_status.php
 | 
						|
     */
 | 
						|
    public function testUpdateOrderStatusForPaymentMethodsEvent()
 | 
						|
    {
 | 
						|
        $statusCode = 'custom_new_status';
 | 
						|
        $data = [
 | 
						|
            'section' => 'payment',
 | 
						|
            'website' => 1,
 | 
						|
            'store' => 1,
 | 
						|
            'groups' => ['checkmo' => ['fields' => ['order_status' => ['value' => $statusCode]]]],
 | 
						|
        ];
 | 
						|
        $this->_objectManager->create(
 | 
						|
            \Magento\Config\Model\Config::class
 | 
						|
        )->setSection(
 | 
						|
            'payment'
 | 
						|
        )->setWebsite(
 | 
						|
            'base'
 | 
						|
        )->setGroups(
 | 
						|
            ['groups' => $data['groups']]
 | 
						|
        )->save();
 | 
						|
 | 
						|
        /** @var \Magento\Sales\Model\Order\Status $status */
 | 
						|
        $status = $this->_objectManager->get(\Magento\Sales\Model\Order\Status::class)->load($statusCode);
 | 
						|
 | 
						|
        /** @var $scopeConfig \Magento\Framework\App\Config\ScopeConfigInterface */
 | 
						|
        $scopeConfig = $this->_objectManager->get(\Magento\Framework\App\Config\ScopeConfigInterface::class);
 | 
						|
        $defaultStatus = (string)$scopeConfig->getValue(
 | 
						|
            'payment/checkmo/order_status',
 | 
						|
            \Magento\Store\Model\ScopeInterface::SCOPE_STORE
 | 
						|
        );
 | 
						|
 | 
						|
        /** @var \Magento\Config\Model\ResourceModel\Config $config */
 | 
						|
        $config = $this->_objectManager->get(\Magento\Config\Model\ResourceModel\Config::class);
 | 
						|
        $config->saveConfig(
 | 
						|
            'payment/checkmo/order_status',
 | 
						|
            $statusCode,
 | 
						|
            ScopeConfigInterface::SCOPE_TYPE_DEFAULT,
 | 
						|
            0
 | 
						|
        );
 | 
						|
 | 
						|
        $this->_resetConfig();
 | 
						|
 | 
						|
        $newStatus = (string)$scopeConfig->getValue(
 | 
						|
            'payment/checkmo/order_status',
 | 
						|
            \Magento\Store\Model\ScopeInterface::SCOPE_STORE
 | 
						|
        );
 | 
						|
 | 
						|
        $status->unassignState(\Magento\Sales\Model\Order::STATE_NEW);
 | 
						|
 | 
						|
        $this->_resetConfig();
 | 
						|
 | 
						|
        $unassignedStatus = $scopeConfig->getValue(
 | 
						|
            'payment/checkmo/order_status',
 | 
						|
            \Magento\Store\Model\ScopeInterface::SCOPE_STORE
 | 
						|
        );
 | 
						|
 | 
						|
        $this->assertEquals('pending', $defaultStatus);
 | 
						|
        $this->assertEquals($statusCode, $newStatus);
 | 
						|
        $this->assertEquals('pending', $unassignedStatus);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @magentoDbIsolation enabled
 | 
						|
     * @magentoAppIsolation enabled
 | 
						|
     */
 | 
						|
    public function testUpdateOrderStatusForPaymentMethods()
 | 
						|
    {
 | 
						|
        $statusCode = 'custom_new_status';
 | 
						|
 | 
						|
        /** @var \Magento\Config\Model\ResourceModel\Config $config */
 | 
						|
        $config = $this->_objectManager->get(\Magento\Config\Model\ResourceModel\Config::class);
 | 
						|
        $config->saveConfig('payment/checkmo/order_status', $statusCode, 'default', 0);
 | 
						|
 | 
						|
        $this->_resetConfig();
 | 
						|
 | 
						|
        $observer = $this->_objectManager->create(
 | 
						|
            \Magento\Payment\Observer\UpdateOrderStatusForPaymentMethodsObserver::class
 | 
						|
        );
 | 
						|
        $observer->execute($this->_eventObserver);
 | 
						|
 | 
						|
        $this->_resetConfig();
 | 
						|
 | 
						|
        /** @var $scopeConfig \Magento\Framework\App\Config\ScopeConfigInterface */
 | 
						|
        $scopeConfig = $this->_objectManager->get(\Magento\Framework\App\Config\ScopeConfigInterface::class);
 | 
						|
        $unassignedStatus = (string)$scopeConfig->getValue(
 | 
						|
            'payment/checkmo/order_status',
 | 
						|
            \Magento\Store\Model\ScopeInterface::SCOPE_STORE
 | 
						|
        );
 | 
						|
        $this->assertEquals('pending', $unassignedStatus);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Create event observer
 | 
						|
     *
 | 
						|
     * @return \Magento\Framework\Event\Observer
 | 
						|
     */
 | 
						|
    protected function _createEventObserver()
 | 
						|
    {
 | 
						|
        $data = ['status' => 'custom_new_status', 'state' => \Magento\Sales\Model\Order::STATE_NEW];
 | 
						|
        $event = $this->_objectManager->create(\Magento\Framework\Event::class, ['data' => $data]);
 | 
						|
        return $this->_objectManager
 | 
						|
            ->create(\Magento\Framework\Event\Observer::class, ['data' => ['event' => $event]]);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Clear config cache
 | 
						|
     */
 | 
						|
    protected function _resetConfig()
 | 
						|
    {
 | 
						|
        $this->_objectManager->get(\Magento\Framework\App\Config\ReinitableConfigInterface::class)->reinit();
 | 
						|
        $this->_objectManager->create(\Magento\Store\Model\StoreManagerInterface::class)->reinitStores();
 | 
						|
    }
 | 
						|
}
 |