PageRenderTime 42ms CodeModel.GetById 14ms RepoModel.GetById 1ms app.codeStats 0ms

/vendor/magento/module-configurable-product/Test/Unit/Model/Quote/Item/CartItemProcessorTest.php

https://gitlab.com/yousafsyed/easternglamor
PHP | 229 lines | 177 code | 33 blank | 19 comment | 0 complexity | 0a5af9c0ca6b0660767e0b37bd330bed MD5 | raw file
  1. <?php
  2. /**
  3. * Copyright © 2016 Magento. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\ConfigurableProduct\Test\Unit\Model\Quote\Item;
  7. class CartItemProcessorTest extends \PHPUnit_Framework_TestCase
  8. {
  9. /**
  10. * @var \Magento\ConfigurableProduct\Model\Quote\Item\CartItemProcessor
  11. */
  12. protected $model;
  13. /**
  14. * @var \PHPUnit_Framework_MockObject_MockObject
  15. */
  16. protected $objectFactoryMock;
  17. /**
  18. * @var \PHPUnit_Framework_MockObject_MockObject
  19. */
  20. protected $optionFactoryMock;
  21. /**
  22. * @var \PHPUnit_Framework_MockObject_MockObject
  23. */
  24. protected $optionExtensionFactoryMock;
  25. /**
  26. * @var \PHPUnit_Framework_MockObject_MockObject
  27. */
  28. protected $optionValueFactoryMock;
  29. protected function setUp()
  30. {
  31. $this->objectFactoryMock = $this->getMock('\Magento\Framework\DataObject\Factory', ['create'], [], '', false);
  32. $this->optionFactoryMock = $this->getMock(
  33. '\Magento\Quote\Model\Quote\ProductOptionFactory',
  34. ['create'],
  35. [],
  36. '',
  37. false
  38. );
  39. $this->optionExtensionFactoryMock = $this->getMock(
  40. '\Magento\Quote\Api\Data\ProductOptionExtensionFactory',
  41. ['create'],
  42. [],
  43. '',
  44. false
  45. );
  46. $this->optionValueFactoryMock = $this->getMock(
  47. '\Magento\ConfigurableProduct\Model\Quote\Item\ConfigurableItemOptionValueFactory',
  48. ['create'],
  49. [],
  50. '',
  51. false
  52. );
  53. $this->model = new \Magento\ConfigurableProduct\Model\Quote\Item\CartItemProcessor(
  54. $this->objectFactoryMock,
  55. $this->optionFactoryMock,
  56. $this->optionExtensionFactoryMock,
  57. $this->optionValueFactoryMock
  58. );
  59. }
  60. public function testConvertToBuyRequestIfNoProductOption()
  61. {
  62. $cartItemMock = $this->getMock('\Magento\Quote\Api\Data\CartItemInterface');
  63. $cartItemMock->expects($this->once())->method('getProductOption')->willReturn(null);
  64. $this->assertNull($this->model->convertToBuyRequest($cartItemMock));
  65. }
  66. public function testConvertToBuyRequest()
  67. {
  68. $optionId = 'option_id';
  69. $optionValue = 'option_value';
  70. $productOptionMock = $this->getMock('\Magento\Quote\Api\Data\ProductOptionInterface');
  71. $cartItemMock = $this->getMock('\Magento\Quote\Api\Data\CartItemInterface');
  72. $cartItemMock->expects($this->exactly(3))->method('getProductOption')->willReturn($productOptionMock);
  73. $extAttributesMock = $this->getMock(
  74. '\Magento\Quote\Api\Data\ProductOption',
  75. ['getConfigurableItemOptions'],
  76. [],
  77. '',
  78. false
  79. );
  80. $productOptionMock
  81. ->expects($this->exactly(2))
  82. ->method('getExtensionAttributes')
  83. ->willReturn($extAttributesMock);
  84. $optionValueMock = $this->getMock('\Magento\ConfigurableProduct\Api\Data\ConfigurableItemOptionValueInterface');
  85. $extAttributesMock->expects($this->once())
  86. ->method('getConfigurableItemOptions')
  87. ->willReturn([$optionValueMock]);
  88. $optionValueMock->expects($this->once())->method('getOptionId')->willReturn($optionId);
  89. $optionValueMock->expects($this->once())->method('getOptionValue')->willReturn($optionValue);
  90. $requestData = [
  91. 'super_attribute' => [
  92. $optionId => $optionValue
  93. ]
  94. ];
  95. $buyRequestMock = new \Magento\Framework\DataObject($requestData);
  96. $this->objectFactoryMock->expects($this->once())
  97. ->method('create')
  98. ->with($requestData)
  99. ->willReturn($buyRequestMock);
  100. $this->assertEquals($buyRequestMock, $this->model->convertToBuyRequest($cartItemMock));
  101. }
  102. public function testProcessProductOptionsIfOptionNotSelected()
  103. {
  104. $customOption = $this->getMock('\Magento\Catalog\Model\Product\Configuration\Item\Option', [], [], '', false);
  105. $customOption->expects($this->once())->method('getValue')->willReturn('');
  106. $productMock = $this->getMock('\Magento\Catalog\Model\Product', [], [], '', false);
  107. $productMock->expects($this->once())->method('getCustomOption')->with('attributes')->willReturn($customOption);
  108. $cartItemMock = $this->getMock('\Magento\Quote\Model\Quote\Item', ['getProduct'], [], '', false);
  109. $cartItemMock->expects($this->once())->method('getProduct')->willReturn($productMock);
  110. $this->assertEquals($cartItemMock, $this->model->processOptions($cartItemMock));
  111. }
  112. public function testProcessProductOptions()
  113. {
  114. $optionId = 'option_id';
  115. $optionValue = 'option_value';
  116. $customOption = $this->getMock('\Magento\Catalog\Model\Product\Configuration\Item\Option', [], [], '', false);
  117. $customOption->expects($this->once())->method('getValue')->willReturn(serialize([$optionId => $optionValue]));
  118. $productMock = $this->getMock('\Magento\Catalog\Model\Product', [], [], '', false);
  119. $productMock->expects($this->once())->method('getCustomOption')->with('attributes')->willReturn($customOption);
  120. $cartItemMock = $this->getMock(
  121. '\Magento\Quote\Model\Quote\Item',
  122. ['getProduct', 'getProductOption', 'setProductOption'],
  123. [],
  124. '',
  125. false
  126. );
  127. $cartItemMock->expects($this->once())->method('getProduct')->willReturn($productMock);
  128. $cartItemMock->expects($this->once())->method('getProductOption')->willReturn(null);
  129. $optionValueMock = $this->getMock('\Magento\ConfigurableProduct\Api\Data\ConfigurableItemOptionValueInterface');
  130. $this->optionValueFactoryMock->expects($this->once())->method('create')->willReturn($optionValueMock);
  131. $optionValueMock->expects($this->once())->method('setOptionId')->with($optionId)->willReturnSelf();
  132. $optionValueMock->expects($this->once())->method('setOptionValue')->with($optionValue)->willReturnSelf();
  133. $productOptionMock = $this->getMock('\Magento\Quote\Api\Data\ProductOptionInterface');
  134. $this->optionFactoryMock->expects($this->once())->method('create')->willReturn($productOptionMock);
  135. $productOptionMock->expects($this->once())->method('getExtensionAttributes')->willReturn(null);
  136. $extAttributeMock = $this->getMock(
  137. '\Magento\Quote\Api\Data\ProductOptionExtension',
  138. ['setConfigurableItemOptions'],
  139. [],
  140. '',
  141. false
  142. );
  143. $this->optionExtensionFactoryMock->expects($this->once())->method('create')->willReturn($extAttributeMock);
  144. $extAttributeMock->expects($this->once())
  145. ->method('setConfigurableItemOptions')
  146. ->with([$optionValueMock])
  147. ->willReturnSelf();
  148. $productOptionMock->expects($this->once())
  149. ->method('setExtensionAttributes')
  150. ->with($extAttributeMock)
  151. ->willReturnSelf();
  152. $cartItemMock->expects($this->once())->method('setProductOption')->with($productOptionMock)->willReturnSelf();
  153. $this->assertEquals($cartItemMock, $this->model->processOptions($cartItemMock));
  154. }
  155. public function testProcessProductOptionsIfOptionsExist()
  156. {
  157. $optionId = 'option_id';
  158. $optionValue = 'option_value';
  159. $customOption = $this->getMock('\Magento\Catalog\Model\Product\Configuration\Item\Option', [], [], '', false);
  160. $customOption->expects($this->once())->method('getValue')->willReturn(serialize([$optionId => $optionValue]));
  161. $productMock = $this->getMock('\Magento\Catalog\Model\Product', [], [], '', false);
  162. $productMock->expects($this->once())->method('getCustomOption')->with('attributes')->willReturn($customOption);
  163. $cartItemMock = $this->getMock(
  164. '\Magento\Quote\Model\Quote\Item',
  165. ['getProduct', 'getProductOption', 'setProductOption'],
  166. [],
  167. '',
  168. false
  169. );
  170. $optionValueMock = $this->getMock('\Magento\ConfigurableProduct\Api\Data\ConfigurableItemOptionValueInterface');
  171. $this->optionValueFactoryMock->expects($this->once())->method('create')->willReturn($optionValueMock);
  172. $optionValueMock->expects($this->once())->method('setOptionId')->with($optionId)->willReturnSelf();
  173. $optionValueMock->expects($this->once())->method('setOptionValue')->with($optionValue)->willReturnSelf();
  174. $extAttributeMock = $this->getMock(
  175. '\Magento\Quote\Api\Data\ProductOptionExtension',
  176. ['setConfigurableItemOptions'],
  177. [],
  178. '',
  179. false
  180. );
  181. $extAttributeMock->expects($this->once())
  182. ->method('setConfigurableItemOptions')
  183. ->with([$optionValueMock])
  184. ->willReturnSelf();
  185. $productOptionMock = $this->getMock('\Magento\Quote\Api\Data\ProductOptionInterface');
  186. $productOptionMock->expects($this->exactly(2))->method('getExtensionAttributes')->willReturn($extAttributeMock);
  187. $cartItemMock->expects($this->once())->method('getProduct')->willReturn($productMock);
  188. $cartItemMock->expects($this->exactly(2))->method('getProductOption')->willReturn($productOptionMock);
  189. $productOptionMock->expects($this->once())
  190. ->method('setExtensionAttributes')
  191. ->with($extAttributeMock)
  192. ->willReturnSelf();
  193. $cartItemMock->expects($this->once())->method('setProductOption')->with($productOptionMock)->willReturnSelf();
  194. $this->assertEquals($cartItemMock, $this->model->processOptions($cartItemMock));
  195. }
  196. }