PageRenderTime 42ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Creditmemo/VoidTest.php

https://gitlab.com/crazybutterfly815/magento2
PHP | 342 lines | 239 code | 31 blank | 72 comment | 0 complexity | 7894057192244b516b70b81ed9ac31b4 MD5 | raw file
  1. <?php
  2. /**
  3. * Copyright © 2016 Magento. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Sales\Test\Unit\Controller\Adminhtml\Order\Creditmemo;
  7. /**
  8. * Class VoidTest
  9. * @SuppressWarnings(PHPMD.TooManyFields)
  10. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  11. */
  12. class VoidTest extends \PHPUnit_Framework_TestCase
  13. {
  14. /**
  15. * @var \Magento\Sales\Controller\Adminhtml\Order\Creditmemo\AddComment
  16. */
  17. protected $controller;
  18. /**
  19. * @var \PHPUnit_Framework_MockObject_MockObject
  20. */
  21. protected $contextMock;
  22. /**
  23. * @var \PHPUnit_Framework_MockObject_MockObject
  24. */
  25. protected $loaderMock;
  26. /**
  27. * @var \PHPUnit_Framework_MockObject_MockObject
  28. */
  29. protected $senderMock;
  30. /**
  31. * @var \PHPUnit_Framework_MockObject_MockObject
  32. */
  33. protected $requestMock;
  34. /**
  35. * @var \PHPUnit_Framework_MockObject_MockObject
  36. */
  37. protected $responseMock;
  38. /**
  39. * @var \PHPUnit_Framework_MockObject_MockObject
  40. */
  41. protected $objectManagerMock;
  42. /**
  43. * @var \PHPUnit_Framework_MockObject_MockObject
  44. */
  45. protected $sessionMock;
  46. /**
  47. * @var \PHPUnit_Framework_MockObject_MockObject
  48. */
  49. protected $actionFlagMock;
  50. /**
  51. * @var \PHPUnit_Framework_MockObject_MockObject
  52. */
  53. protected $creditmemoMock;
  54. /**
  55. * @var \PHPUnit_Framework_MockObject_MockObject
  56. */
  57. protected $messageManagerMock;
  58. /**
  59. * @var \PHPUnit_Framework_MockObject_MockObject
  60. */
  61. protected $helperMock;
  62. /**
  63. * @var \Magento\Backend\Model\View\Result\RedirectFactory|\PHPUnit_Framework_MockObject_MockObject
  64. */
  65. protected $resultRedirectFactoryMock;
  66. /**
  67. * @var \Magento\Backend\Model\View\Result\ForwardFactory|\PHPUnit_Framework_MockObject_MockObject
  68. */
  69. protected $resultForwardFactoryMock;
  70. /**
  71. * @var \Magento\Backend\Model\View\Result\Redirect|\PHPUnit_Framework_MockObject_MockObject
  72. */
  73. protected $resultRedirectMock;
  74. /**
  75. * @var \Magento\Backend\Model\View\Result\Forward|\PHPUnit_Framework_MockObject_MockObject
  76. */
  77. protected $resultForwardMock;
  78. /**
  79. * @return void
  80. */
  81. protected function setUp()
  82. {
  83. $this->creditmemoMock = $this->getMockBuilder(\Magento\Sales\Model\Order\Creditmemo::class)
  84. ->disableOriginalConstructor()
  85. ->setMethods(['getInvoice', 'getOrder', 'cancel', 'getId', 'void', '__wakeup'])
  86. ->getMock();
  87. $titleMock = $this->getMockBuilder(\Magento\Framework\App\Action\Title::class)
  88. ->disableOriginalConstructor()
  89. ->getMock();
  90. $this->requestMock = $this->getMockBuilder(\Magento\Framework\App\Request\Http::class)
  91. ->disableOriginalConstructor()
  92. ->getMock();
  93. $this->responseMock = $this->getMockBuilder(\Magento\Framework\App\Response\Http::class)
  94. ->disableOriginalConstructor()
  95. ->getMock();
  96. $this->objectManagerMock = $this->getMock(\Magento\Framework\ObjectManagerInterface::class);
  97. $this->helperMock = $this->getMockBuilder(\Magento\Backend\Helper\Data::class)
  98. ->disableOriginalConstructor()
  99. ->getMock();
  100. $this->messageManagerMock = $this->getMockBuilder(\Magento\Framework\Message\Manager::class)
  101. ->disableOriginalConstructor()
  102. ->getMock();
  103. $this->sessionMock = $this->getMockBuilder(\Magento\Backend\Model\Session::class)
  104. ->disableOriginalConstructor()
  105. ->getMock();
  106. $this->actionFlagMock = $this->getMockBuilder(\Magento\Framework\App\ActionFlag::class)
  107. ->disableOriginalConstructor()
  108. ->getMock();
  109. $this->contextMock = $this->getMockBuilder(\Magento\Backend\App\Action\Context::class)
  110. ->disableOriginalConstructor()
  111. ->getMock();
  112. $this->loaderMock = $this->getMockBuilder(\Magento\Sales\Controller\Adminhtml\Order\CreditmemoLoader::class)
  113. ->disableOriginalConstructor()
  114. ->getMock();
  115. $this->senderMock = $this->getMockBuilder(\Magento\Sales\Model\Order\Email\Sender\CreditmemoSender::class)
  116. ->disableOriginalConstructor()
  117. ->getMock();
  118. $this->resultRedirectFactoryMock = $this->getMockBuilder(
  119. \Magento\Backend\Model\View\Result\RedirectFactory::class
  120. )->disableOriginalConstructor()
  121. ->setMethods(['create'])
  122. ->getMock();
  123. $this->resultForwardFactoryMock = $this->getMockBuilder(
  124. \Magento\Backend\Model\View\Result\ForwardFactory::class
  125. )->disableOriginalConstructor()
  126. ->setMethods(['create'])
  127. ->getMock();
  128. $this->resultRedirectMock = $this->getMockBuilder(\Magento\Backend\Model\View\Result\Redirect::class)
  129. ->disableOriginalConstructor()
  130. ->getMock();
  131. $this->resultForwardMock = $this->getMockBuilder(\Magento\Backend\Model\View\Result\Forward::class)
  132. ->disableOriginalConstructor()
  133. ->getMock();
  134. $this->contextMock->expects($this->any())
  135. ->method('getRequest')
  136. ->willReturn($this->requestMock);
  137. $this->contextMock->expects($this->any())
  138. ->method('getResponse')
  139. ->willReturn($this->responseMock);
  140. $this->contextMock->expects($this->any())
  141. ->method('getActionFlag')
  142. ->willReturn($this->actionFlagMock);
  143. $this->contextMock->expects($this->any())
  144. ->method('getHelper')
  145. ->willReturn($this->helperMock);
  146. $this->contextMock->expects($this->any())
  147. ->method('getSession')
  148. ->willReturn($this->sessionMock);
  149. $this->contextMock->expects($this->any())
  150. ->method('getObjectManager')
  151. ->willReturn($this->objectManagerMock);
  152. $this->contextMock->expects($this->any())
  153. ->method('getTitle')
  154. ->willReturn($titleMock);
  155. $this->contextMock->expects($this->any())
  156. ->method('getMessageManager')
  157. ->willReturn($this->messageManagerMock);
  158. $this->contextMock->expects($this->any())
  159. ->method('getResultRedirectFactory')
  160. ->willReturn($this->resultRedirectFactoryMock);
  161. $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
  162. $this->controller = $objectManager->getObject(
  163. \Magento\Sales\Controller\Adminhtml\Order\Creditmemo\Void::class,
  164. [
  165. 'context' => $this->contextMock,
  166. 'creditmemoLoader' => $this->loaderMock,
  167. 'resultForwardFactory' => $this->resultForwardFactoryMock
  168. ]
  169. );
  170. }
  171. /**
  172. * @return void
  173. */
  174. public function testExecuteNoCreditmemo()
  175. {
  176. $this->requestMock->expects($this->any())
  177. ->method('getParam')
  178. ->withAnyParameters()
  179. ->willReturnArgument(0);
  180. $this->loaderMock->expects($this->once())
  181. ->method('load')
  182. ->willReturn(false);
  183. $this->resultForwardFactoryMock->expects($this->once())
  184. ->method('create')
  185. ->willReturn($this->resultForwardMock);
  186. $this->resultForwardMock->expects($this->once())
  187. ->method('forward')
  188. ->with('noroute')
  189. ->willReturnSelf();
  190. $this->assertInstanceOf(
  191. \Magento\Backend\Model\View\Result\Forward::class,
  192. $this->controller->execute()
  193. );
  194. }
  195. /**
  196. * @return void
  197. */
  198. public function testExecuteModelException()
  199. {
  200. $id = 123;
  201. $message = 'Model exception';
  202. $e = new \Magento\Framework\Exception\LocalizedException(__($message));
  203. $this->requestMock->expects($this->any())
  204. ->method('getParam')
  205. ->withAnyParameters()
  206. ->willReturnArgument(0);
  207. $this->creditmemoMock->expects($this->once())
  208. ->method('void')
  209. ->willThrowException($e);
  210. $this->loaderMock->expects($this->once())
  211. ->method('load')
  212. ->willReturn($this->creditmemoMock);
  213. $this->resultRedirectFactoryMock->expects($this->once())
  214. ->method('create')
  215. ->willReturn($this->resultRedirectMock);
  216. $this->creditmemoMock->expects($this->atLeastOnce())
  217. ->method('getId')
  218. ->willReturn($id);
  219. $this->resultRedirectMock->expects($this->once())
  220. ->method('setPath')
  221. ->with('sales/*/view', ['creditmemo_id' => $id])
  222. ->willReturnSelf();
  223. $this->assertInstanceOf(
  224. \Magento\Backend\Model\View\Result\Redirect::class,
  225. $this->controller->execute()
  226. );
  227. }
  228. /**
  229. * @return void
  230. */
  231. public function testExecuteException()
  232. {
  233. $id = 321;
  234. $message = 'Model exception';
  235. $e = new \Exception($message);
  236. $this->requestMock->expects($this->any())
  237. ->method('getParam')
  238. ->withAnyParameters()
  239. ->willReturnArgument(0);
  240. $this->creditmemoMock->expects($this->once())
  241. ->method('void')
  242. ->willThrowException($e);
  243. $this->loaderMock->expects($this->once())
  244. ->method('load')
  245. ->willReturn($this->creditmemoMock);
  246. $this->resultRedirectFactoryMock->expects($this->once())
  247. ->method('create')
  248. ->willReturn($this->resultRedirectMock);
  249. $this->creditmemoMock->expects($this->atLeastOnce())
  250. ->method('getId')
  251. ->willReturn($id);
  252. $this->resultRedirectMock->expects($this->once())
  253. ->method('setPath')
  254. ->with('sales/*/view', ['creditmemo_id' => $id])
  255. ->willReturnSelf();
  256. $this->assertInstanceOf(
  257. \Magento\Backend\Model\View\Result\Redirect::class,
  258. $this->controller->execute()
  259. );
  260. }
  261. /**
  262. * @return void
  263. */
  264. public function testExecute()
  265. {
  266. $id = '111';
  267. $transactionMock = $this->getMockBuilder(\Magento\Framework\DB\Transaction::class)
  268. ->disableOriginalConstructor()
  269. ->getMock();
  270. $orderMock = $this->getMockBuilder(\Magento\Sales\Model\Order::class)
  271. ->disableOriginalConstructor()
  272. ->getMock();
  273. $invoiceMock = $this->getMockBuilder(\Magento\Sales\Model\Order\Invoice::class)
  274. ->disableOriginalConstructor()
  275. ->getMock();
  276. $this->requestMock->expects($this->any())
  277. ->method('getParam')
  278. ->withAnyParameters()
  279. ->willReturnArgument(0);
  280. $this->loaderMock->expects($this->once())
  281. ->method('load')
  282. ->willReturn($this->creditmemoMock);
  283. $this->objectManagerMock->expects($this->once())
  284. ->method('create')
  285. ->with(\Magento\Framework\DB\Transaction::class)
  286. ->willReturn($transactionMock);
  287. $this->creditmemoMock->expects($this->any())
  288. ->method('getOrder')
  289. ->willReturn($orderMock);
  290. $this->creditmemoMock->expects($this->any())
  291. ->method('getInvoice')
  292. ->willReturn($invoiceMock);
  293. $this->messageManagerMock->expects($this->once())
  294. ->method('addSuccess')
  295. ->with('You voided the credit memo.');
  296. $this->resultRedirectFactoryMock->expects($this->once())
  297. ->method('create')
  298. ->willReturn($this->resultRedirectMock);
  299. $this->creditmemoMock->expects($this->atLeastOnce())
  300. ->method('getId')
  301. ->willReturn($id);
  302. $this->resultRedirectMock->expects($this->once())
  303. ->method('setPath')
  304. ->with('sales/*/view', ['creditmemo_id' => $id])
  305. ->willReturnSelf();
  306. $this->assertInstanceOf(
  307. \Magento\Backend\Model\View\Result\Redirect::class,
  308. $this->controller->execute()
  309. );
  310. }
  311. }