@@ -49,11 +49,12 @@ public function setUp()
4949
5050 /**
5151 * @param array $result
52+ * @param string $productSku
53+ *
5254 * @return array
5355 */
54- protected function getStockItemBySku ($ result )
56+ protected function getStockItemBySku ($ result, $ productSku )
5557 {
56- $ productSku = 'simple1 ' ;
5758 $ serviceInfo = [
5859 'rest ' => [
5960 'resourcePath ' => self ::RESOURCE_GET_PATH . "/ $ productSku " ,
@@ -69,22 +70,41 @@ protected function getStockItemBySku($result)
6970 $ apiResult = $ this ->_webApiCall ($ serviceInfo , $ arguments );
7071 $ result ['item_id ' ] = $ apiResult ['item_id ' ];
7172 $ this ->assertEquals ($ result , array_intersect_key ($ apiResult , $ result ), 'The stock data does not match. ' );
73+
7274 return $ apiResult ;
7375 }
7476
7577 /**
7678 * @param array $newData
7779 * @param array $expectedResult
7880 * @param array $fixtureData
81+ *
7982 * @magentoApiDataFixture Magento/Catalog/_files/multiple_products.php
8083 * @dataProvider saveStockItemBySkuWithWrongInputDataProvider
8184 */
8285 public function testStockItemPUTWithWrongInput ($ newData , $ expectedResult , $ fixtureData )
8386 {
84- $ stockItemOld = $ this ->getStockItemBySku ($ fixtureData );
8587 $ productSku = 'simple1 ' ;
88+ $ stockItemOld = $ this ->getStockItemBySku ($ fixtureData , $ productSku );
8689 $ itemId = $ stockItemOld ['item_id ' ];
8790
91+ $ actualData = $ this ->updateStockItemBySku ($ productSku , $ itemId , $ newData );
92+
93+ $ this ->assertEquals ($ stockItemOld ['item_id ' ], $ actualData );
94+
95+ /** @var \Magento\CatalogInventory\Api\Data\StockItemInterfaceFactory $stockItemFactory */
96+ $ stockItemFactory = $ this ->objectManager
97+ ->get (\Magento \CatalogInventory \Api \Data \StockItemInterfaceFactory::class);
98+ $ stockItem = $ stockItemFactory ->create ();
99+ /** @var \Magento\CatalogInventory\Model\ResourceModel\Stock\Item $stockItemResource */
100+ $ stockItemResource = $ this ->objectManager ->get (\Magento \CatalogInventory \Model \ResourceModel \Stock \Item::class);
101+ $ stockItemResource ->loadByProductId ($ stockItem , $ stockItemOld ['product_id ' ], $ stockItemOld ['stock_id ' ]);
102+ $ expectedResult ['item_id ' ] = $ stockItem ->getItemId ();
103+ $ this ->assertEquals ($ expectedResult , array_intersect_key ($ stockItem ->getData (), $ expectedResult ));
104+ }
105+
106+ private function updateStockItemBySku ($ productSku , $ itemId , $ newData )
107+ {
88108 $ resourcePath = str_replace ([':productSku ' , ':itemId ' ], [$ productSku , $ itemId ], self ::RESOURCE_PUT_PATH );
89109
90110 $ serviceInfo = [
@@ -113,7 +133,124 @@ public function testStockItemPUTWithWrongInput($newData, $expectedResult, $fixtu
113133 $ data = $ stockItemDetailsDo ->getData ();
114134 $ data ['show_default_notification_message ' ] = false ;
115135 $ arguments = ['productSku ' => $ productSku , 'stockItem ' => $ data ];
116- $ this ->assertEquals ($ stockItemOld ['item_id ' ], $ this ->_webApiCall ($ serviceInfo , $ arguments ));
136+
137+ return $ this ->_webApiCall ($ serviceInfo , $ arguments );
138+ }
139+
140+ /**
141+ * @return array
142+ */
143+ public function saveStockItemBySkuWithWrongInputDataProvider ()
144+ {
145+ return [
146+ [
147+ [
148+ 'item_id ' => 222 ,
149+ 'product_id ' => 222 ,
150+ 'stock_id ' => 1 ,
151+ 'qty ' => '111.0000 ' ,
152+ 'min_qty ' => '0.0000 ' ,
153+ 'use_config_min_qty ' => 1 ,
154+ 'is_qty_decimal ' => 0 ,
155+ 'backorders ' => 0 ,
156+ 'use_config_backorders ' => 1 ,
157+ 'min_sale_qty ' => '1.0000 ' ,
158+ 'use_config_min_sale_qty ' => 1 ,
159+ 'max_sale_qty ' => '0.0000 ' ,
160+ 'use_config_max_sale_qty ' => 1 ,
161+ 'is_in_stock ' => 1 ,
162+ 'low_stock_date ' => '' ,
163+ 'notify_stock_qty ' => null ,
164+ 'use_config_notify_stock_qty ' => 1 ,
165+ 'manage_stock ' => 0 ,
166+ 'use_config_manage_stock ' => 1 ,
167+ 'stock_status_changed_auto ' => 0 ,
168+ 'use_config_qty_increments ' => 1 ,
169+ 'qty_increments ' => '0.0000 ' ,
170+ 'use_config_enable_qty_inc ' => 1 ,
171+ 'enable_qty_increments ' => 0 ,
172+ 'is_decimal_divided ' => 0 ,
173+ ],
174+ [
175+ 'item_id ' => '1 ' ,
176+ 'product_id ' => '10 ' ,
177+ 'stock_id ' => '1 ' ,
178+ 'qty ' => '111.0000 ' ,
179+ 'min_qty ' => '0.0000 ' ,
180+ 'use_config_min_qty ' => '1 ' ,
181+ 'is_qty_decimal ' => '0 ' ,
182+ 'backorders ' => '0 ' ,
183+ 'use_config_backorders ' => '1 ' ,
184+ 'min_sale_qty ' => '1.0000 ' ,
185+ 'use_config_min_sale_qty ' => '1 ' ,
186+ 'max_sale_qty ' => '0.0000 ' ,
187+ 'use_config_max_sale_qty ' => '1 ' ,
188+ 'is_in_stock ' => '1 ' ,
189+ 'low_stock_date ' => null ,
190+ 'notify_stock_qty ' => null ,
191+ 'use_config_notify_stock_qty ' => '1 ' ,
192+ 'manage_stock ' => '0 ' ,
193+ 'use_config_manage_stock ' => '1 ' ,
194+ 'stock_status_changed_auto ' => '0 ' ,
195+ 'use_config_qty_increments ' => '1 ' ,
196+ 'qty_increments ' => '0.0000 ' ,
197+ 'use_config_enable_qty_inc ' => '1 ' ,
198+ 'enable_qty_increments ' => '0 ' ,
199+ 'is_decimal_divided ' => '0 ' ,
200+ 'type_id ' => 'simple ' ,
201+ ],
202+ [
203+ 'item_id ' => 1 ,
204+ 'product_id ' => 10 ,
205+ 'stock_id ' => 1 ,
206+ 'qty ' => 100 ,
207+ 'is_in_stock ' => 1 ,
208+ 'is_qty_decimal ' => '' ,
209+ 'show_default_notification_message ' => '' ,
210+ 'use_config_min_qty ' => 1 ,
211+ 'min_qty ' => 0 ,
212+ 'use_config_min_sale_qty ' => 1 ,
213+ 'min_sale_qty ' => 1 ,
214+ 'use_config_max_sale_qty ' => 1 ,
215+ 'max_sale_qty ' => 10000 ,
216+ 'use_config_backorders ' => 1 ,
217+ 'backorders ' => 0 ,
218+ 'use_config_notify_stock_qty ' => 1 ,
219+ 'notify_stock_qty ' => 1 ,
220+ 'use_config_qty_increments ' => 1 ,
221+ 'qty_increments ' => 0 ,
222+ 'use_config_enable_qty_inc ' => 1 ,
223+ 'enable_qty_increments ' => '' ,
224+ 'use_config_manage_stock ' => 1 ,
225+ 'manage_stock ' => 1 ,
226+ 'low_stock_date ' => '' ,
227+ 'is_decimal_divided ' => '' ,
228+ 'stock_status_changed_auto ' => 0 ,
229+ ],
230+ ],
231+ ];
232+ }
233+
234+ /**
235+ * @param array $newData
236+ * @param array $expectedResult
237+ * @param array $fixtureData
238+ *
239+ * @magentoApiDataFixture Magento/Catalog/_files/product_simple_sku_with_slash.php
240+ * @dataProvider testUpdateStockItemBySkuDataProvider
241+ */
242+ public function testUpdateStockItemBySku ($ newData , $ expectedResult , $ fixtureData )
243+ {
244+ $ productSku = [
245+ 'rest ' => 'sku%252fwith%252fslashes ' ,
246+ 'soap ' => 'sku%2fwith%2fslashes '
247+ ];
248+ $ stockItemOld = $ this ->getStockItemBySku ($ fixtureData , $ productSku [TESTS_WEB_API_ADAPTER ]);
249+ $ itemId = $ stockItemOld ['item_id ' ];
250+
251+ $ actualData = $ this ->updateStockItemBySku ($ productSku [TESTS_WEB_API_ADAPTER ], $ itemId , $ newData );
252+
253+ $ this ->assertEquals ($ stockItemOld ['item_id ' ], $ actualData );
117254
118255 /** @var \Magento\CatalogInventory\Api\Data\StockItemInterfaceFactory $stockItemFactory */
119256 $ stockItemFactory = $ this ->objectManager
@@ -126,10 +263,7 @@ public function testStockItemPUTWithWrongInput($newData, $expectedResult, $fixtu
126263 $ this ->assertEquals ($ expectedResult , array_intersect_key ($ stockItem ->getData (), $ expectedResult ));
127264 }
128265
129- /**
130- * @return array
131- */
132- public function saveStockItemBySkuWithWrongInputDataProvider ()
266+ public function testUpdateStockItemBySkuDataProvider ()
133267 {
134268 return [
135269 [
@@ -162,7 +296,7 @@ public function saveStockItemBySkuWithWrongInputDataProvider()
162296 ],
163297 [
164298 'item_id ' => '1 ' ,
165- 'product_id ' => '10 ' ,
299+ 'product_id ' => '1 ' ,
166300 'stock_id ' => '1 ' ,
167301 'qty ' => '111.0000 ' ,
168302 'min_qty ' => '0.0000 ' ,
@@ -190,7 +324,7 @@ public function saveStockItemBySkuWithWrongInputDataProvider()
190324 ],
191325 [
192326 'item_id ' => 1 ,
193- 'product_id ' => 10 ,
327+ 'product_id ' => 1 ,
194328 'stock_id ' => 1 ,
195329 'qty ' => 100 ,
196330 'is_in_stock ' => 1 ,
0 commit comments