StatusTest.php 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Sales\Test\Unit\Model\Order;
  7. /**
  8. * Class StatusTest
  9. *
  10. * @package Magento\Sales\Model\Order
  11. */
  12. class StatusTest extends \PHPUnit\Framework\TestCase
  13. {
  14. /**
  15. * @var \Magento\Sales\Model\ResourceModel\Order\Status|\PHPUnit_Framework_MockObject_MockObject
  16. */
  17. protected $resourceMock;
  18. /**
  19. * @var \Magento\Framework\Event\Manager|\PHPUnit_Framework_MockObject_MockObject
  20. */
  21. protected $eventManagerMock;
  22. /**
  23. * @var \Magento\Framework\Model\Context|\PHPUnit_Framework_MockObject_MockObject
  24. */
  25. protected $contextMock;
  26. /**
  27. * @var \Magento\Sales\Model\Order\Status
  28. */
  29. protected $model;
  30. /**
  31. * SetUp test
  32. */
  33. protected function setUp()
  34. {
  35. $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
  36. $this->resourceMock = $this->createMock(\Magento\Sales\Model\ResourceModel\Order\Status::class);
  37. $this->eventManagerMock = $this->createMock(\Magento\Framework\Event\Manager::class);
  38. $this->contextMock = $this->createMock(\Magento\Framework\Model\Context::class);
  39. $this->contextMock->expects($this->once())
  40. ->method('getEventDispatcher')
  41. ->will($this->returnValue($this->eventManagerMock));
  42. $this->model = $objectManager->getObject(
  43. \Magento\Sales\Model\Order\Status::class,
  44. [
  45. 'context' => $this->contextMock,
  46. 'resource' => $this->resourceMock,
  47. 'data' => ['status' => 'test_status']
  48. ]
  49. );
  50. }
  51. /**
  52. * Test for method unassignState
  53. */
  54. public function testUnassignStateSuccess()
  55. {
  56. $params = [
  57. 'status' => $this->model->getStatus(),
  58. 'state' => 'test_state',
  59. ];
  60. $this->resourceMock->expects($this->once())
  61. ->method('checkIsStateLast')
  62. ->with($this->equalTo($params['state']))
  63. ->will($this->returnValue(false));
  64. $this->resourceMock->expects($this->once())
  65. ->method('checkIsStatusUsed')
  66. ->with($this->equalTo($params['status']))
  67. ->will($this->returnValue(false));
  68. $this->eventManagerMock->expects($this->once())
  69. ->method('dispatch')
  70. ->with($this->equalTo('sales_order_status_unassign'), $this->equalTo($params));
  71. $this->resourceMock->expects($this->once())
  72. ->method('unassignState')
  73. ->with($this->equalTo($params['status']), $this->equalTo($params['state']));
  74. $this->assertEquals($this->model, $this->model->unassignState($params['state']));
  75. }
  76. /**
  77. * Test for method unassignState state is last
  78. *
  79. * @expectedException \Magento\Framework\Exception\LocalizedException
  80. * @expectedExceptionMessage The last status can't be changed and needs to stay assigned to its current state.
  81. */
  82. public function testUnassignStateStateIsLast()
  83. {
  84. $params = [
  85. 'status' => $this->model->getStatus(),
  86. 'state' => 'test_state',
  87. ];
  88. $this->resourceMock->expects($this->once())
  89. ->method('checkIsStateLast')
  90. ->with($this->equalTo($params['state']))
  91. ->will($this->returnValue(true));
  92. $this->assertEquals($this->model, $this->model->unassignState($params['state']));
  93. }
  94. /**
  95. * Test for method unassignState status in use
  96. *
  97. * @expectedException \Magento\Framework\Exception\LocalizedException
  98. * @expectedExceptionMessage The status can't be unassigned because the status is currently used by an order.
  99. */
  100. public function testUnassignStateStatusUsed()
  101. {
  102. $params = [
  103. 'status' => $this->model->getStatus(),
  104. 'state' => 'test_state',
  105. ];
  106. $this->resourceMock->expects($this->once())
  107. ->method('checkIsStateLast')
  108. ->with($this->equalTo($params['state']))
  109. ->will($this->returnValue(false));
  110. $this->resourceMock->expects($this->once())
  111. ->method('checkIsStatusUsed')
  112. ->with($this->equalTo($params['status']))
  113. ->will($this->returnValue(true));
  114. $this->assertEquals($this->model, $this->model->unassignState($params['state']));
  115. }
  116. /**
  117. * Retrieve prepared for test \Magento\Sales\Model\Order\Status
  118. *
  119. * @param null|\PHPUnit_Framework_MockObject_MockObject $resource
  120. * @param null|\PHPUnit_Framework_MockObject_MockObject $eventDispatcher
  121. * @return \Magento\Sales\Model\Order\Status
  122. */
  123. protected function _getPreparedModel($resource = null, $eventDispatcher = null)
  124. {
  125. if (!$resource) {
  126. $resource = $this->createMock(\Magento\Sales\Model\ResourceModel\Order\Status::class);
  127. }
  128. if (!$eventDispatcher) {
  129. $eventDispatcher = $this->createMock(\Magento\Framework\Event\ManagerInterface::class);
  130. }
  131. $helper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
  132. $model = $helper->getObject(
  133. \Magento\Sales\Model\Order\Status::class,
  134. ['resource' => $resource, 'eventDispatcher' => $eventDispatcher]
  135. );
  136. return $model;
  137. }
  138. /**
  139. * Test for method assignState
  140. */
  141. public function testAssignState()
  142. {
  143. $state = 'test_state';
  144. $status = 'test_status';
  145. $visibleOnFront = true;
  146. $resource = $this->createMock(\Magento\Sales\Model\ResourceModel\Order\Status::class);
  147. $resource->expects($this->once())
  148. ->method('beginTransaction');
  149. $resource->expects($this->once())
  150. ->method('assignState')
  151. ->with(
  152. $this->equalTo($status),
  153. $this->equalTo($state)
  154. );
  155. $resource->expects($this->once())->method('commit');
  156. $eventDispatcher = $this->createMock(\Magento\Framework\Event\ManagerInterface::class);
  157. $model = $this->_getPreparedModel($resource, $eventDispatcher);
  158. $model->setStatus($status);
  159. $this->assertInstanceOf(
  160. \Magento\Sales\Model\Order\Status::class,
  161. $model->assignState($state),
  162. $visibleOnFront
  163. );
  164. }
  165. }