ConfigurableProductManagementTest.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\ConfigurableProduct\Test\Unit\Model;
  7. use Magento\ConfigurableProduct\Model\ConfigurableProductManagement;
  8. use Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Product\CollectionFactory;
  9. class ConfigurableProductManagementTest extends \PHPUnit\Framework\TestCase
  10. {
  11. /**
  12. * @var ConfigurableProductManagement
  13. */
  14. protected $model;
  15. /**
  16. * @var \Magento\Catalog\Api\ProductAttributeRepositoryInterface|\PHPUnit_Framework_MockObject_MockObject
  17. */
  18. protected $attributeRepository;
  19. /**
  20. * @var \Magento\ConfigurableProduct\Model\ProductVariationsBuilder|\PHPUnit_Framework_MockObject_MockObject
  21. */
  22. protected $productVariationBuilder;
  23. /**
  24. * @var \Magento\Catalog\Api\Data\ProductInterface
  25. */
  26. protected $product;
  27. /**
  28. * @var \PHPUnit_Framework_MockObject_MockObject
  29. */
  30. protected $option;
  31. /**
  32. * @var CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
  33. */
  34. protected $productsFactoryMock;
  35. protected function setUp()
  36. {
  37. $this->attributeRepository = $this->createMock(\Magento\Catalog\Api\ProductAttributeRepositoryInterface::class);
  38. $this->product = $this->createMock(\Magento\Catalog\Api\Data\ProductInterface::class);
  39. $this->option = $this->createMock(
  40. \Magento\ConfigurableProduct\Model\Product\Type\Configurable\Attribute::class
  41. );
  42. $this->productVariationBuilder = $this->createMock(
  43. \Magento\ConfigurableProduct\Model\ProductVariationsBuilder::class
  44. );
  45. $this->productsFactoryMock = $this->createPartialMock(
  46. \Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Product\CollectionFactory::class,
  47. ['create']
  48. );
  49. $this->model = new ConfigurableProductManagement(
  50. $this->attributeRepository,
  51. $this->productVariationBuilder,
  52. $this->productsFactoryMock
  53. );
  54. }
  55. public function testGenerateVariation()
  56. {
  57. $data = ['someKey' => 'someValue'];
  58. $attributeOption = $this->createMock(\Magento\Eav\Model\Entity\Attribute\Option::class);
  59. $attributeOption->expects($this->once())->method('getData')->willReturn(['key' => 'value']);
  60. $attribute = $this->createMock(\Magento\Catalog\Model\ResourceModel\Eav\Attribute::class);
  61. $attribute->expects($this->any())->method('getOptions')->willReturn([$attributeOption]);
  62. $attribute->expects($this->once())->method('getAttributeCode')->willReturn(10);
  63. $this->option->expects($this->any())->method('getAttributeId')->willReturn(1);
  64. $this->attributeRepository->expects($this->once())->method('get')->with(1)->willReturn($attribute);
  65. $this->option->expects($this->any())->method('getData')->willReturn($data);
  66. $expectedAttributes = [
  67. 1 => [
  68. 'someKey' => 'someValue',
  69. 'options' => [['key' => 'value']],
  70. 'attribute_code' => 10,
  71. ]
  72. ];
  73. $this->productVariationBuilder->expects($this->once())
  74. ->method('create')
  75. ->with($this->product, $expectedAttributes)
  76. ->willReturn(['someObject']);
  77. $expected = ['someObject'];
  78. $this->assertEquals($expected, $this->model->generateVariation($this->product, [$this->option]));
  79. }
  80. public function testGetEnabledCount()
  81. {
  82. $statusEnabled = 1;
  83. $productsMock = $this->createMock(
  84. \Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Product\Collection::class
  85. );
  86. $this->productsFactoryMock
  87. ->expects($this->once())
  88. ->method('create')
  89. ->willReturn($productsMock);
  90. $productsMock
  91. ->expects($this->once())
  92. ->method('addAttributeToFilter')
  93. ->with('status', $statusEnabled)
  94. ->willReturnSelf();
  95. $productsMock
  96. ->expects($this->once())
  97. ->method('getSize')
  98. ->willReturn('expected');
  99. $this->assertEquals(
  100. 'expected',
  101. $this->model->getCount($statusEnabled)
  102. );
  103. }
  104. public function testGetDisabledCount()
  105. {
  106. $statusDisabled = 2;
  107. $productsMock = $this->createMock(
  108. \Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Product\Collection::class
  109. );
  110. $this->productsFactoryMock
  111. ->expects($this->once())
  112. ->method('create')
  113. ->willReturn($productsMock);
  114. $productsMock
  115. ->expects($this->once())
  116. ->method('addAttributeToFilter')
  117. ->with('status', $statusDisabled)
  118. ->willReturnSelf();
  119. $productsMock
  120. ->expects($this->once())
  121. ->method('getSize')
  122. ->willReturn('expected');
  123. $this->assertEquals(
  124. 'expected',
  125. $this->model->getCount($statusDisabled)
  126. );
  127. }
  128. }