PageRenderTime 71ms CodeModel.GetById 24ms RepoModel.GetById 1ms app.codeStats 0ms

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

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