UpdateOrderStatusForPaymentMethodsObserverTest.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Payment\Test\Unit\Observer;
  7. use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
  8. class UpdateOrderStatusForPaymentMethodsObserverTest extends \PHPUnit\Framework\TestCase
  9. {
  10. /** @var \Magento\Payment\Observer\updateOrderStatusForPaymentMethodsObserver */
  11. protected $updateOrderStatusForPaymentMethodsObserver;
  12. /** @var ObjectManagerHelper */
  13. protected $objectManagerHelper;
  14. /** @var \Magento\Sales\Model\Order\Config|\PHPUnit_Framework_MockObject_MockObject */
  15. protected $orderConfigMock;
  16. /** @var \Magento\Payment\Model\Config|\PHPUnit_Framework_MockObject_MockObject */
  17. protected $paymentConfigMock;
  18. /** @var \Magento\Config\Model\ResourceModel\Config|\PHPUnit_Framework_MockObject_MockObject */
  19. protected $coreResourceConfigMock;
  20. /** @var \Magento\Framework\Event\Observer|\PHPUnit_Framework_MockObject_MockObject */
  21. protected $observerMock;
  22. /** @var \Magento\Framework\Event|\PHPUnit_Framework_MockObject_MockObject */
  23. protected $eventMock;
  24. const ORDER_STATUS = 'status';
  25. const METHOD_CODE = 'method_code';
  26. protected function setUp()
  27. {
  28. $this->orderConfigMock = $this->createMock(\Magento\Sales\Model\Order\Config::class);
  29. $this->paymentConfigMock = $this->createMock(\Magento\Payment\Model\Config::class);
  30. $this->coreResourceConfigMock = $this->createMock(\Magento\Config\Model\ResourceModel\Config::class);
  31. $this->objectManagerHelper = new ObjectManagerHelper($this);
  32. $this->updateOrderStatusForPaymentMethodsObserver = $this->objectManagerHelper->getObject(
  33. \Magento\Payment\Observer\UpdateOrderStatusForPaymentMethodsObserver::class,
  34. [
  35. 'salesOrderConfig' => $this->orderConfigMock,
  36. 'paymentConfig' => $this->paymentConfigMock,
  37. 'resourceConfig' => $this->coreResourceConfigMock
  38. ]
  39. );
  40. $this->observerMock = $this->getMockBuilder(
  41. \Magento\Framework\Event\Observer::class
  42. )->disableOriginalConstructor()->setMethods([])->getMock();
  43. }
  44. public function testUpdateOrderStatusForPaymentMethodsNotNewState()
  45. {
  46. $this->_prepareEventMockWithMethods(['getState']);
  47. $this->eventMock->expects($this->once())->method('getState')->will($this->returnValue('NotNewState'));
  48. $this->updateOrderStatusForPaymentMethodsObserver->execute($this->observerMock);
  49. }
  50. public function testUpdateOrderStatusForPaymentMethodsNewState()
  51. {
  52. $this->_prepareEventMockWithMethods(['getState', 'getStatus']);
  53. $this->eventMock->expects($this->once())->method('getState')->will(
  54. $this->returnValue(\Magento\Sales\Model\Order::STATE_NEW)
  55. );
  56. $this->eventMock->expects($this->once())->method('getStatus')->will(
  57. $this->returnValue(self::ORDER_STATUS)
  58. );
  59. $defaultStatus = 'defaultStatus';
  60. $this->orderConfigMock->expects($this->once())->method('getStateDefaultStatus')->with(
  61. \Magento\Sales\Model\Order::STATE_NEW
  62. )->will($this->returnValue($defaultStatus));
  63. $this->paymentConfigMock->expects($this->once())->method('getActiveMethods')->will(
  64. $this->returnValue($this->_getPreparedActiveMethods())
  65. );
  66. $this->coreResourceConfigMock->expects($this->once())->method('saveConfig')->with(
  67. 'payment/' . self::METHOD_CODE . '/order_status',
  68. $defaultStatus,
  69. 'default',
  70. 0
  71. );
  72. $this->updateOrderStatusForPaymentMethodsObserver->execute($this->observerMock);
  73. }
  74. /**
  75. * Prepares EventMock with set of methods
  76. *
  77. * @param $methodsList
  78. */
  79. private function _prepareEventMockWithMethods($methodsList)
  80. {
  81. $this->eventMock = $this->getMockBuilder(
  82. \Magento\Framework\Event::class
  83. )->disableOriginalConstructor()->setMethods($methodsList)->getMock();
  84. $this->observerMock->expects($this->any())->method('getEvent')->will($this->returnValue($this->eventMock));
  85. }
  86. /**
  87. * Return mocked data of getActiveMethods
  88. *
  89. * @return array
  90. */
  91. private function _getPreparedActiveMethods()
  92. {
  93. $method1 = $this->getMockBuilder(
  94. \Magento\Payment\Model\MethodInterface::class
  95. )->getMockForAbstractClass();
  96. $method1->expects($this->once())->method('getConfigData')->with('order_status')->will(
  97. $this->returnValue(self::ORDER_STATUS)
  98. );
  99. $method1->expects($this->once())->method('getCode')->will(
  100. $this->returnValue(self::METHOD_CODE)
  101. );
  102. $method2 = $this->getMockBuilder(
  103. \Magento\Payment\Model\MethodInterface::class
  104. )->getMockForAbstractClass();
  105. $method2->expects($this->once())->method('getConfigData')->with('order_status')->will(
  106. $this->returnValue('not_a_status')
  107. );
  108. return [$method1, $method2];
  109. }
  110. }