Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
All Data Structures Namespaces Files Functions Variables Pages
UpdateConfigurationsTest.php
Go to the documentation of this file.
1 <?php
7 
15 
21 class UpdateConfigurationsTest extends \PHPUnit\Framework\TestCase
22 {
26  private $updateConfigurations;
27 
31  private $objectManagerHelper;
32 
36  private $requestMock;
37 
41  private $productRepositoryMock;
42 
46  private $variationHandlerMock;
47 
51  private $subjectMock;
52 
53  protected function setUp()
54  {
55  $this->requestMock = $this->getMockBuilder(RequestInterface::class)
56  ->getMockForAbstractClass();
57  $this->productRepositoryMock = $this->getMockBuilder(ProductRepositoryInterface::class)
58  ->getMockForAbstractClass();
59  $this->variationHandlerMock = $this->getMockBuilder(VariationHandler::class)
60  ->disableOriginalConstructor()
61  ->getMock();
62  $this->subjectMock = $this->getMockBuilder(ProductInitializationHelper::class)
63  ->disableOriginalConstructor()
64  ->getMock();
65 
66  $this->objectManagerHelper = new ObjectManagerHelper($this);
67  $this->updateConfigurations = $this->objectManagerHelper->getObject(
68  UpdateConfigurations::class,
69  [
70  'request' => $this->requestMock,
71  'productRepository' => $this->productRepositoryMock,
72  'variationHandler' => $this->variationHandlerMock
73  ]
74  );
75  }
76 
82  private function getConfigurableMatrix()
83  {
84  return [
85  [
86  'newProduct' => true,
87  'id' => 'product1'
88  ],
89  [
90  'newProduct' => false,
91  'id' => 'product2',
92  'status' => 'simple2_status',
93  'sku' => 'simple2_sku',
94  'name' => 'simple2_name',
95  'price' => '3.33',
96  'configurable_attribute' => 'simple2_configurable_attribute',
97  'weight' => '5.55',
98  'media_gallery' => 'simple2_media_gallery',
99  'swatch_image' => 'simple2_swatch_image',
100  'small_image' => 'simple2_small_image',
101  'thumbnail' => 'simple2_thumbnail',
102  'image' => 'simple2_image',
103  'was_changed' => true,
104  ],
105  [
106  'newProduct' => false,
107  'id' => 'product3',
108  'qty' => '3',
109  'was_changed' => true,
110  ],
111  [
112  'newProduct' => false,
113  'id' => 'product4',
114  'status' => 'simple4_status',
115  'sku' => 'simple2_sku',
116  'name' => 'simple2_name',
117  'price' => '3.33',
118  'weight' => '5.55',
119  ],
120  ];
121  }
122 
123  public function testAfterInitialize()
124  {
125  $productMock = $this->getProductMock();
126  $configurableMatrix = $this->getConfigurableMatrix();
127  $configurations = [
128  'product2' => [
129  'status' => 'simple2_status',
130  'sku' => 'simple2_sku',
131  'name' => 'simple2_name',
132  'price' => '3.33',
133  'configurable_attribute' => 'simple2_configurable_attribute',
134  'weight' => '5.55',
135  'media_gallery' => 'simple2_media_gallery',
136  'swatch_image' => 'simple2_swatch_image',
137  'small_image' => 'simple2_small_image',
138  'thumbnail' => 'simple2_thumbnail',
139  'image' => 'simple2_image'
140  ],
141  'product3' => [
142  'quantity_and_stock_status' => ['qty' => '3']
143  ]
144  ];
146  $productMocks = [
147  'product2' => $this->getProductMock($configurations['product2'], true, true),
148  'product3' => $this->getProductMock($configurations['product3'], false, true),
149  ];
150 
151  $this->requestMock->expects(static::any())
152  ->method('getParam')
153  ->willReturnMap(
154  [
155  ['store', 0, 0],
156  ['configurable-matrix-serialized', "[]", json_encode($configurableMatrix)]
157  ]
158  );
159  $this->variationHandlerMock->expects(static::once())
160  ->method('duplicateImagesForVariations')
161  ->with($configurations)
162  ->willReturn($configurations);
163  $this->productRepositoryMock->expects(static::any())
164  ->method('getById')
165  ->willReturnMap(
166  [
167  ['product2', false, 0, false, $productMocks['product2']],
168  ['product3', false, 0, false, $productMocks['product3']]
169  ]
170  );
171  $this->variationHandlerMock->expects(static::any())
172  ->method('processMediaGallery')
173  ->willReturnMap(
174  [
175  [$productMocks['product2'], $configurations['product2'], $configurations['product2']],
176  [$productMocks['product3'], $configurations['product3'], $configurations['product3']]
177  ]
178  );
179 
180  $this->assertSame($productMock, $this->updateConfigurations->afterInitialize($this->subjectMock, $productMock));
181  }
182 
190  protected function getProductMock(array $expectedData = null, $hasDataChanges = false, $wasChanged = false)
191  {
192  $productMock = $this->getMockBuilder(Product::class)
193  ->disableOriginalConstructor()
194  ->getMock();
195 
196  if ($wasChanged !== false) {
197  if ($expectedData !== null) {
198  $productMock->expects(static::once())
199  ->method('addData')
200  ->with($expectedData)
201  ->willReturnSelf();
202  }
203 
204  $productMock->expects(static::any())
205  ->method('hasDataChanges')
206  ->willReturn($hasDataChanges);
207  $productMock->expects($hasDataChanges ? static::once() : static::never())
208  ->method('save')
209  ->willReturnSelf();
210  }
211  return $productMock;
212  }
213 
218  {
219  $productMock = $this->getProductMock();
220 
221  $this->requestMock->expects(static::any())
222  ->method('getParam')
223  ->willReturnMap(
224  [
225  ['store', 0, 0],
226  ['configurable-matrix-serialized', null, ''],
227  ]
228  );
229 
230  $this->variationHandlerMock->expects(static::once())
231  ->method('duplicateImagesForVariations')
232  ->with([])
233  ->willReturn([]);
234 
235  $this->updateConfigurations->afterInitialize($this->subjectMock, $productMock);
236 
237  $this->assertEmpty($productMock->getData());
238  }
239 }