UpdateOrderStatusForPaymentMethodsObserverTest.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Payment\Observer;
  7. use Magento\Framework\App\Config\ScopeConfigInterface;
  8. /**
  9. * @magentoAppArea adminhtml
  10. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  11. */
  12. class UpdateOrderStatusForPaymentMethodsObserverTest extends \PHPUnit\Framework\TestCase
  13. {
  14. /**
  15. * @var \Magento\Framework\Event\Observer
  16. */
  17. protected $_eventObserver;
  18. /**
  19. * @var \Magento\TestFramework\ObjectManager
  20. */
  21. protected $_objectManager;
  22. protected function setUp()
  23. {
  24. $this->_objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
  25. $this->_eventObserver = $this->_createEventObserver();
  26. }
  27. /**
  28. * Check that \Magento\Payment\Observer\UpdateOrderStatusForPaymentMethodsObserver::execute()
  29. * is called as event and it can change status
  30. *
  31. * @magentoDbIsolation enabled
  32. * @magentoAppIsolation enabled
  33. * @magentoDataFixture Magento/Payment/_files/order_status.php
  34. */
  35. public function testUpdateOrderStatusForPaymentMethodsEvent()
  36. {
  37. $statusCode = 'custom_new_status';
  38. $data = [
  39. 'section' => 'payment',
  40. 'website' => 1,
  41. 'store' => 1,
  42. 'groups' => ['checkmo' => ['fields' => ['order_status' => ['value' => $statusCode]]]],
  43. ];
  44. $this->_objectManager->create(
  45. \Magento\Config\Model\Config::class
  46. )->setSection(
  47. 'payment'
  48. )->setWebsite(
  49. 'base'
  50. )->setGroups(
  51. ['groups' => $data['groups']]
  52. )->save();
  53. /** @var \Magento\Sales\Model\Order\Status $status */
  54. $status = $this->_objectManager->get(\Magento\Sales\Model\Order\Status::class)->load($statusCode);
  55. /** @var $scopeConfig \Magento\Framework\App\Config\ScopeConfigInterface */
  56. $scopeConfig = $this->_objectManager->get(\Magento\Framework\App\Config\ScopeConfigInterface::class);
  57. $defaultStatus = (string)$scopeConfig->getValue(
  58. 'payment/checkmo/order_status',
  59. \Magento\Store\Model\ScopeInterface::SCOPE_STORE
  60. );
  61. /** @var \Magento\Config\Model\ResourceModel\Config $config */
  62. $config = $this->_objectManager->get(\Magento\Config\Model\ResourceModel\Config::class);
  63. $config->saveConfig(
  64. 'payment/checkmo/order_status',
  65. $statusCode,
  66. ScopeConfigInterface::SCOPE_TYPE_DEFAULT,
  67. 0
  68. );
  69. $this->_resetConfig();
  70. $newStatus = (string)$scopeConfig->getValue(
  71. 'payment/checkmo/order_status',
  72. \Magento\Store\Model\ScopeInterface::SCOPE_STORE
  73. );
  74. $status->unassignState(\Magento\Sales\Model\Order::STATE_NEW);
  75. $this->_resetConfig();
  76. $unassignedStatus = $scopeConfig->getValue(
  77. 'payment/checkmo/order_status',
  78. \Magento\Store\Model\ScopeInterface::SCOPE_STORE
  79. );
  80. $this->assertEquals('pending', $defaultStatus);
  81. $this->assertEquals($statusCode, $newStatus);
  82. $this->assertEquals('pending', $unassignedStatus);
  83. }
  84. /**
  85. * @magentoDbIsolation enabled
  86. * @magentoAppIsolation enabled
  87. */
  88. public function testUpdateOrderStatusForPaymentMethods()
  89. {
  90. $statusCode = 'custom_new_status';
  91. /** @var \Magento\Config\Model\ResourceModel\Config $config */
  92. $config = $this->_objectManager->get(\Magento\Config\Model\ResourceModel\Config::class);
  93. $config->saveConfig('payment/checkmo/order_status', $statusCode, 'default', 0);
  94. $this->_resetConfig();
  95. $observer = $this->_objectManager->create(
  96. \Magento\Payment\Observer\UpdateOrderStatusForPaymentMethodsObserver::class
  97. );
  98. $observer->execute($this->_eventObserver);
  99. $this->_resetConfig();
  100. /** @var $scopeConfig \Magento\Framework\App\Config\ScopeConfigInterface */
  101. $scopeConfig = $this->_objectManager->get(\Magento\Framework\App\Config\ScopeConfigInterface::class);
  102. $unassignedStatus = (string)$scopeConfig->getValue(
  103. 'payment/checkmo/order_status',
  104. \Magento\Store\Model\ScopeInterface::SCOPE_STORE
  105. );
  106. $this->assertEquals('pending', $unassignedStatus);
  107. }
  108. /**
  109. * Create event observer
  110. *
  111. * @return \Magento\Framework\Event\Observer
  112. */
  113. protected function _createEventObserver()
  114. {
  115. $data = ['status' => 'custom_new_status', 'state' => \Magento\Sales\Model\Order::STATE_NEW];
  116. $event = $this->_objectManager->create(\Magento\Framework\Event::class, ['data' => $data]);
  117. return $this->_objectManager
  118. ->create(\Magento\Framework\Event\Observer::class, ['data' => ['event' => $event]]);
  119. }
  120. /**
  121. * Clear config cache
  122. */
  123. protected function _resetConfig()
  124. {
  125. $this->_objectManager->get(\Magento\Framework\App\Config\ReinitableConfigInterface::class)->reinit();
  126. $this->_objectManager->create(\Magento\Store\Model\StoreManagerInterface::class)->reinitStores();
  127. }
  128. }