PageRenderTime 40ms CodeModel.GetById 10ms RepoModel.GetById 0ms app.codeStats 0ms

/magento/module-sales/Test/Unit/Model/Order/ItemRepositoryTest.php

https://bitbucket.org/sergiu-tot-fb/vendors
PHP | 365 lines | 260 code | 51 blank | 54 comment | 0 complexity | 74be035e9af188be5ff34fd4893d8aac MD5 | raw file
Possible License(s): BSD-3-Clause, LGPL-2.1, MIT, Apache-2.0
  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. use Magento\Sales\Model\Order\ItemRepository;
  8. /**
  9. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  10. */
  11. class ItemRepositoryTest extends \PHPUnit\Framework\TestCase
  12. {
  13. /**
  14. * @var \Magento\Framework\DataObject\Factory|\PHPUnit_Framework_MockObject_MockObject
  15. */
  16. protected $objectFactory;
  17. /**
  18. * @var \Magento\Sales\Model\ResourceModel\Metadata|\PHPUnit_Framework_MockObject_MockObject
  19. */
  20. protected $metadata;
  21. /**
  22. * @var \Magento\Sales\Api\Data\OrderItemSearchResultInterfaceFactory|\PHPUnit_Framework_MockObject_MockObject
  23. */
  24. protected $searchResultFactory;
  25. /**
  26. * @var \Magento\Catalog\Model\ProductOptionProcessorInterface|\PHPUnit_Framework_MockObject_MockObject
  27. */
  28. protected $productOptionProcessorMock;
  29. /**
  30. * @var \Magento\Catalog\Model\ProductOptionFactory|\PHPUnit_Framework_MockObject_MockObject
  31. */
  32. protected $productOptionFactory;
  33. /**
  34. * @var \Magento\Catalog\Api\Data\ProductOptionExtensionFactory|\PHPUnit_Framework_MockObject_MockObject
  35. */
  36. protected $extensionFactory;
  37. /**
  38. * @var \PHPUnit_Framework_MockObject_MockObject
  39. */
  40. private $collectionProcessor;
  41. /**
  42. * @var array
  43. */
  44. protected $productOptionData = [];
  45. protected function setUp()
  46. {
  47. $this->objectFactory = $this->getMockBuilder(\Magento\Framework\DataObject\Factory::class)
  48. ->disableOriginalConstructor()
  49. ->setMethods(['create'])
  50. ->getMock();
  51. $this->metadata = $this->getMockBuilder(\Magento\Sales\Model\ResourceModel\Metadata::class)
  52. ->disableOriginalConstructor()
  53. ->getMock();
  54. $this->searchResultFactory = $this->getMockBuilder(
  55. \Magento\Sales\Api\Data\OrderItemSearchResultInterfaceFactory::class
  56. )
  57. ->disableOriginalConstructor()
  58. ->setMethods(['create'])
  59. ->getMock();
  60. $this->productOptionFactory = $this->getMockBuilder(\Magento\Catalog\Model\ProductOptionFactory::class)
  61. ->setMethods([
  62. 'create',
  63. ])
  64. ->disableOriginalConstructor()
  65. ->getMock();
  66. $this->collectionProcessor = $this->createMock(
  67. \Magento\Framework\Api\SearchCriteria\CollectionProcessorInterface::class
  68. );
  69. $this->extensionFactory = $this->getMockBuilder(\Magento\Catalog\Api\Data\ProductOptionExtensionFactory::class)
  70. ->setMethods([
  71. 'create',
  72. ])
  73. ->disableOriginalConstructor()
  74. ->getMock();
  75. }
  76. /**
  77. * @expectedException \Magento\Framework\Exception\InputException
  78. * @expectedExceptionMessage ID required
  79. */
  80. public function testGetWithNoId()
  81. {
  82. $model = new ItemRepository(
  83. $this->objectFactory,
  84. $this->metadata,
  85. $this->searchResultFactory,
  86. $this->productOptionFactory,
  87. $this->extensionFactory,
  88. [],
  89. $this->collectionProcessor
  90. );
  91. $model->get(null);
  92. }
  93. /**
  94. * @expectedException \Magento\Framework\Exception\NoSuchEntityException
  95. * @expectedExceptionMessage Requested entity doesn't exist
  96. */
  97. public function testGetEmptyEntity()
  98. {
  99. $orderItemId = 1;
  100. $orderItemMock = $this->getMockBuilder(\Magento\Sales\Model\Order\Item::class)
  101. ->disableOriginalConstructor()
  102. ->getMock();
  103. $orderItemMock->expects($this->once())
  104. ->method('load')
  105. ->with($orderItemId)
  106. ->willReturn($orderItemMock);
  107. $orderItemMock->expects($this->once())
  108. ->method('getItemId')
  109. ->willReturn(null);
  110. $this->metadata->expects($this->once())
  111. ->method('getNewInstance')
  112. ->willReturn($orderItemMock);
  113. $model = new ItemRepository(
  114. $this->objectFactory,
  115. $this->metadata,
  116. $this->searchResultFactory,
  117. $this->productOptionFactory,
  118. $this->extensionFactory,
  119. [],
  120. $this->collectionProcessor
  121. );
  122. $model->get($orderItemId);
  123. }
  124. public function testGet()
  125. {
  126. $orderItemId = 1;
  127. $productType = 'configurable';
  128. $this->productOptionData = ['option1' => 'value1'];
  129. $this->getProductOptionExtensionMock();
  130. $productOption = $this->getProductOptionMock();
  131. $orderItemMock = $this->getOrderMock($productType, $productOption);
  132. $orderItemMock->expects($this->once())
  133. ->method('load')
  134. ->with($orderItemId)
  135. ->willReturn($orderItemMock);
  136. $orderItemMock->expects($this->once())
  137. ->method('getItemId')
  138. ->willReturn($orderItemId);
  139. $this->metadata->expects($this->once())
  140. ->method('getNewInstance')
  141. ->willReturn($orderItemMock);
  142. $model = $this->getModel($orderItemMock, $productType);
  143. $this->assertSame($orderItemMock, $model->get($orderItemId));
  144. // Assert already registered
  145. $this->assertSame($orderItemMock, $model->get($orderItemId));
  146. }
  147. public function testGetList()
  148. {
  149. $productType = 'configurable';
  150. $this->productOptionData = ['option1' => 'value1'];
  151. $searchCriteriaMock = $this->getMockBuilder(\Magento\Framework\Api\SearchCriteria::class)
  152. ->disableOriginalConstructor()
  153. ->getMock();
  154. $this->getProductOptionExtensionMock();
  155. $productOption = $this->getProductOptionMock();
  156. $orderItemMock = $this->getOrderMock($productType, $productOption);
  157. $searchResultMock = $this->getMockBuilder(\Magento\Sales\Model\ResourceModel\Order\Item\Collection::class)
  158. ->disableOriginalConstructor()
  159. ->getMock();
  160. $searchResultMock->expects($this->once())
  161. ->method('getItems')
  162. ->willReturn([$orderItemMock]);
  163. $this->searchResultFactory->expects($this->once())
  164. ->method('create')
  165. ->willReturn($searchResultMock);
  166. $model = $this->getModel($orderItemMock, $productType);
  167. $this->assertSame($searchResultMock, $model->getList($searchCriteriaMock));
  168. }
  169. public function testDeleteById()
  170. {
  171. $orderItemId = 1;
  172. $productType = 'configurable';
  173. $requestMock = $this->getMockBuilder(\Magento\Framework\DataObject::class)
  174. ->disableOriginalConstructor()
  175. ->getMock();
  176. $orderItemMock = $this->getMockBuilder(\Magento\Sales\Model\Order\Item::class)
  177. ->disableOriginalConstructor()
  178. ->getMock();
  179. $orderItemMock->expects($this->once())
  180. ->method('load')
  181. ->with($orderItemId)
  182. ->willReturn($orderItemMock);
  183. $orderItemMock->expects($this->once())
  184. ->method('getItemId')
  185. ->willReturn($orderItemId);
  186. $orderItemMock->expects($this->once())
  187. ->method('getProductType')
  188. ->willReturn($productType);
  189. $orderItemMock->expects($this->once())
  190. ->method('getBuyRequest')
  191. ->willReturn($requestMock);
  192. $orderItemResourceMock = $this->getMockBuilder(\Magento\Framework\Model\ResourceModel\Db\AbstractDb::class)
  193. ->disableOriginalConstructor()
  194. ->getMock();
  195. $orderItemResourceMock->expects($this->once())
  196. ->method('delete')
  197. ->with($orderItemMock)
  198. ->willReturnSelf();
  199. $this->metadata->expects($this->once())
  200. ->method('getNewInstance')
  201. ->willReturn($orderItemMock);
  202. $this->metadata->expects($this->exactly(1))
  203. ->method('getMapper')
  204. ->willReturn($orderItemResourceMock);
  205. $model = $this->getModel($orderItemMock, $productType);
  206. $this->assertTrue($model->deleteById($orderItemId));
  207. }
  208. /**
  209. * @param \PHPUnit_Framework_MockObject_MockObject $orderItemMock
  210. * @param string $productType
  211. * @param array $data
  212. * @return ItemRepository
  213. */
  214. protected function getModel(
  215. \PHPUnit_Framework_MockObject_MockObject $orderItemMock,
  216. $productType,
  217. array $data = []
  218. ) {
  219. $requestMock = $this->getMockBuilder(\Magento\Framework\DataObject::class)
  220. ->disableOriginalConstructor()
  221. ->getMock();
  222. $requestUpdateMock = $this->getMockBuilder(\Magento\Framework\DataObject::class)
  223. ->disableOriginalConstructor()
  224. ->getMock();
  225. $requestUpdateMock->expects($this->any())
  226. ->method('getData')
  227. ->willReturn($data);
  228. $this->productOptionProcessorMock = $this->getMockBuilder(
  229. \Magento\Catalog\Model\ProductOptionProcessorInterface::class
  230. )
  231. ->getMockForAbstractClass();
  232. $this->productOptionProcessorMock->expects($this->any())
  233. ->method('convertToProductOption')
  234. ->with($requestMock)
  235. ->willReturn($this->productOptionData);
  236. $this->productOptionProcessorMock->expects($this->any())
  237. ->method('convertToBuyRequest')
  238. ->with($orderItemMock)
  239. ->willReturn($requestUpdateMock);
  240. $model = new ItemRepository(
  241. $this->objectFactory,
  242. $this->metadata,
  243. $this->searchResultFactory,
  244. $this->productOptionFactory,
  245. $this->extensionFactory,
  246. [
  247. $productType => $this->productOptionProcessorMock,
  248. 'custom_options' => $this->productOptionProcessorMock
  249. ],
  250. $this->collectionProcessor
  251. );
  252. return $model;
  253. }
  254. /**
  255. * @param string $productType
  256. * @param \PHPUnit_Framework_MockObject_MockObject $productOption
  257. * @return \PHPUnit_Framework_MockObject_MockObject
  258. */
  259. protected function getOrderMock($productType, $productOption)
  260. {
  261. $requestMock = $this->getMockBuilder(\Magento\Framework\DataObject::class)
  262. ->disableOriginalConstructor()
  263. ->getMock();
  264. $orderItemMock = $this->getMockBuilder(\Magento\Sales\Model\Order\Item::class)
  265. ->disableOriginalConstructor()
  266. ->getMock();
  267. $orderItemMock->expects($this->once())
  268. ->method('getProductType')
  269. ->willReturn($productType);
  270. $orderItemMock->expects($this->once())
  271. ->method('getBuyRequest')
  272. ->willReturn($requestMock);
  273. $orderItemMock->expects($this->any())
  274. ->method('getProductOption')
  275. ->willReturn(null);
  276. $orderItemMock->expects($this->any())
  277. ->method('setProductOption')
  278. ->with($productOption)
  279. ->willReturnSelf();
  280. return $orderItemMock;
  281. }
  282. /**
  283. * @return \PHPUnit_Framework_MockObject_MockObject
  284. */
  285. protected function getProductOptionMock()
  286. {
  287. $productOption = $this->getMockBuilder(\Magento\Catalog\Api\Data\ProductOptionInterface::class)
  288. ->getMockForAbstractClass();
  289. $productOption->expects($this->any())
  290. ->method('getExtensionAttributes')
  291. ->willReturn(null);
  292. $this->productOptionFactory->expects($this->any())
  293. ->method('create')
  294. ->willReturn($productOption);
  295. return $productOption;
  296. }
  297. protected function getProductOptionExtensionMock()
  298. {
  299. $productOptionExtension = $this->getMockBuilder(
  300. \Magento\Catalog\Api\Data\ProductOptionExtensionInterface::class
  301. )
  302. ->setMethods([
  303. 'setData',
  304. ])
  305. ->getMockForAbstractClass();
  306. $productOptionExtension->expects($this->any())
  307. ->method('setData')
  308. ->with(key($this->productOptionData), current($this->productOptionData))
  309. ->willReturnSelf();
  310. $this->extensionFactory->expects($this->any())
  311. ->method('create')
  312. ->willReturn($productOptionExtension);
  313. }
  314. }