AddCommentTest.php 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Sales\Test\Unit\Controller\Adminhtml\Order;
  7. class AddCommentTest extends \PHPUnit\Framework\TestCase
  8. {
  9. /**
  10. * @var \Magento\Sales\Controller\Adminhtml\Order\AddComment
  11. */
  12. private $addCommentController;
  13. /**
  14. * @var \Magento\Backend\App\Action\Context|\PHPUnit_Framework_MockObject_MockObject
  15. */
  16. private $contextMock;
  17. /**
  18. * @var \Magento\Sales\Model\Order|\PHPUnit_Framework_MockObject_MockObject
  19. */
  20. private $orderMock;
  21. /**
  22. * @var \Magento\Backend\Model\View\Result\RedirectFactory|\PHPUnit_Framework_MockObject_MockObject
  23. */
  24. private $resultRedirectFactoryMock;
  25. /**
  26. * @var \Magento\Backend\Model\View\Result\Redirect|\PHPUnit_Framework_MockObject_MockObject
  27. */
  28. private $resultRedirectMock;
  29. /**
  30. * @var \Magento\Framework\App\Request\Http|\PHPUnit_Framework_MockObject_MockObject
  31. */
  32. private $requestMock;
  33. /**
  34. * @var \Magento\Sales\Api\OrderRepositoryInterface|\PHPUnit_Framework_MockObject_MockObject
  35. */
  36. private $orderRepositoryMock;
  37. /**
  38. * @var \Magento\Framework\AuthorizationInterface|\PHPUnit_Framework_MockObject_MockObject
  39. */
  40. private $authorizationMock;
  41. /**
  42. * @var \Magento\Sales\Model\Order\Status\History|\PHPUnit_Framework_MockObject_MockObject
  43. */
  44. private $statusHistoryCommentMock;
  45. /**
  46. * @var \Magento\Framework\ObjectManagerInterface|\PHPUnit_Framework_MockObject_MockObject
  47. */
  48. private $objectManagerMock;
  49. /**
  50. * Test setup
  51. */
  52. protected function setUp()
  53. {
  54. $this->contextMock = $this->createMock(\Magento\Backend\App\Action\Context::class);
  55. $this->requestMock = $this->createMock(\Magento\Framework\App\Request\Http::class);
  56. $this->orderRepositoryMock = $this->createMock(\Magento\Sales\Api\OrderRepositoryInterface::class);
  57. $this->orderMock = $this->createMock(\Magento\Sales\Model\Order::class);
  58. $this->resultRedirectFactoryMock = $this->createMock(\Magento\Backend\Model\View\Result\RedirectFactory::class);
  59. $this->resultRedirectMock = $this->createMock(\Magento\Backend\Model\View\Result\Redirect::class);
  60. $this->authorizationMock = $this->createMock(\Magento\Framework\AuthorizationInterface::class);
  61. $this->statusHistoryCommentMock = $this->createMock(\Magento\Sales\Model\Order\Status\History::class);
  62. $this->objectManagerMock = $this->createMock(\Magento\Framework\ObjectManagerInterface::class);
  63. $this->contextMock->expects($this->once())->method('getRequest')->willReturn($this->requestMock);
  64. $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
  65. $this->addCommentController = $objectManagerHelper->getObject(
  66. \Magento\Sales\Controller\Adminhtml\Order\AddComment::class,
  67. [
  68. 'context' => $this->contextMock,
  69. 'orderRepository' => $this->orderRepositoryMock,
  70. '_authorization' => $this->authorizationMock,
  71. '_objectManager' => $this->objectManagerMock
  72. ]
  73. );
  74. }
  75. /**
  76. * @param array $historyData
  77. * @param bool $userHasResource
  78. * @param bool $expectedNotify
  79. *
  80. * @dataProvider executeWillNotifyCustomerDataProvider
  81. */
  82. public function testExecuteWillNotifyCustomer(array $historyData, bool $userHasResource, bool $expectedNotify)
  83. {
  84. $orderId = 30;
  85. $this->requestMock->expects($this->once())->method('getParam')->with('order_id')->willReturn($orderId);
  86. $this->orderRepositoryMock->expects($this->once())
  87. ->method('get')
  88. ->willReturn($this->orderMock);
  89. $this->requestMock->expects($this->once())->method('getPost')->with('history')->willReturn($historyData);
  90. $this->authorizationMock->expects($this->any())->method('isAllowed')->willReturn($userHasResource);
  91. $this->orderMock->expects($this->once())
  92. ->method('addStatusHistoryComment')
  93. ->willReturn($this->statusHistoryCommentMock);
  94. $this->statusHistoryCommentMock->expects($this->once())->method('setIsCustomerNotified')->with($expectedNotify);
  95. $this->objectManagerMock->expects($this->once())->method('create')->willReturn(
  96. $this->createMock(\Magento\Sales\Model\Order\Email\Sender\OrderCommentSender::class)
  97. );
  98. $this->addCommentController->execute();
  99. }
  100. /**
  101. * @return array
  102. */
  103. public function executeWillNotifyCustomerDataProvider()
  104. {
  105. return [
  106. 'User Has Access - Notify True' => [
  107. 'postData' => [
  108. 'comment' => 'Great Product!',
  109. 'is_customer_notified' => true,
  110. 'status' => 'Processing'
  111. ],
  112. 'userHasResource' => true,
  113. 'expectedNotify' => true
  114. ],
  115. 'User Has Access - Notify False' => [
  116. 'postData' => [
  117. 'comment' => 'Great Product!',
  118. 'is_customer_notified' => false,
  119. 'status' => 'Processing'
  120. ],
  121. 'userHasResource' => true,
  122. 'expectedNotify' => false
  123. ],
  124. 'User Has Access - Notify Unset' => [
  125. 'postData' => [
  126. 'comment' => 'Great Product!',
  127. 'status' => 'Processing'
  128. ],
  129. 'userHasResource' => true,
  130. 'expectedNotify' => false
  131. ],
  132. 'User No Access - Notify True' => [
  133. 'postData' => [
  134. 'comment' => 'Great Product!',
  135. 'is_customer_notified' => true,
  136. 'status' => 'Processing'
  137. ],
  138. 'userHasResource' => false,
  139. 'expectedNotify' => false
  140. ],
  141. 'User No Access - Notify False' => [
  142. 'postData' => [
  143. 'comment' => 'Great Product!',
  144. 'is_customer_notified' => false,
  145. 'status' => 'Processing'
  146. ],
  147. 'userHasResource' => false,
  148. 'expectedNotify' => false
  149. ],
  150. 'User No Access - Notify Unset' => [
  151. 'postData' => [
  152. 'comment' => 'Great Product!',
  153. 'status' => 'Processing'
  154. ],
  155. 'userHasResource' => false,
  156. 'expectedNotify' => false
  157. ],
  158. ];
  159. }
  160. }