Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
SalesChannelManagementTest.php
Go to the documentation of this file.
1 <?php
6 declare(strict_types=1);
7 
9 
16 
18 {
22  const RESOURCE_PATH = '/V1/inventory/stocks';
23  const SERVICE_NAME = 'inventoryApiStockRepositoryV1';
31  {
32  $stockId = 10;
33  $salesChannels = [
34  [
36  SalesChannelInterface::CODE => 'eu_website',
37  ],
38  [
40  SalesChannelInterface::CODE => 'us_website',
41  ],
42  ];
43  $stockData = [
44  StockInterface::NAME => 'stock-name',
46  'sales_channels' => $salesChannels,
47  ],
48  ];
49  $this->saveStock($stockId, $stockData);
50  $actualStockData = $this->getStockDataById($stockId);
51 
52  self::assertArrayHasKey('sales_channels', $stockData[ExtensibleDataInterface::EXTENSION_ATTRIBUTES_KEY]);
53  self::assertEquals(
55  $actualStockData[ExtensibleDataInterface::EXTENSION_ATTRIBUTES_KEY]['sales_channels']
56  );
57  }
58 
72  public function testValidateDeleteSalesChannelFromStock(array $salesChannels, array $beforeSave, array $afterSave)
73  {
74  $defaultStockData = $this->getStockDataById(1);
75  $this->assertEquals($beforeSave, $defaultStockData['extension_attributes']['sales_channels']);
76  $stockId = 10;
77  $data = [
78  StockInterface::STOCK_ID => $stockId,
79  StockInterface::NAME => 'stock_with_channels_name',
80  'extension_attributes' => [
81  'sales_channels' => $salesChannels
82  ]
83  ];
84  $serviceInfo = [
85  'rest' => [
86  'resourcePath' => self::RESOURCE_PATH . '/' . $stockId,
87  'httpMethod' => Request::HTTP_METHOD_PUT,
88  ],
89  'soap' => [
90  'service' => self::SERVICE_NAME,
91  'operation' => self::SERVICE_NAME . 'Save',
92  ],
93  ];
94  $this->_webApiCall($serviceInfo, ['stock' => $data]);
95  $defaultStockData = $this->getStockDataById(1);
96  $this->assertEquals($afterSave, $defaultStockData['extension_attributes']['sales_channels']);
97  $additionalStockData = $this->getStockDataById($stockId);
98  $this->assertEquals($salesChannels, $additionalStockData['extension_attributes']['sales_channels']);
99  }
100 
104  public function deleteSalesChannelDataProvider(): array
105  {
106  return [
107  'one_channel_delete' . SalesChannelInterface::TYPE => [
108  [
109  [
110 
112  SalesChannelInterface::CODE => 'us_website',
113 
114  ],
115  ],
116  [
117  [
119  SalesChannelInterface::CODE => 'base',
120  ],
121  [
123  SalesChannelInterface::CODE => 'global_website',
124  ],
125  ],
126  [
127  [
129  SalesChannelInterface::CODE => 'base',
130  ],
131  [
133  SalesChannelInterface::CODE => 'eu_website',
134  ],
135  [
137  SalesChannelInterface::CODE => 'global_website',
138  ],
139  ],
140  ],
141  ];
142  }
143 
152  public function testFailedValidationSalesChannelsAssignment(array $salesChannels, array $expectedErrorData)
153  {
154  $stockId = 10;
155  $data = [
156  StockInterface::STOCK_ID => $stockId,
157  StockInterface::NAME => 'Default Stock',
158  'extension_attributes' => [
159  'sales_channels' => $salesChannels
160  ]
161  ];
162 
163  $serviceInfo = [
164  'rest' => [
165  'resourcePath' => self::RESOURCE_PATH . '/' . $stockId,
166  'httpMethod' => Request::HTTP_METHOD_PUT,
167  ],
168  'soap' => [
169  'service' => self::SERVICE_NAME,
170  'operation' => self::SERVICE_NAME . 'Save',
171  ],
172  ];
173  $this->webApiCallWithError($serviceInfo, $data, $expectedErrorData);
174  }
175 
179  public function dataProviderSalesChannelsAssignment(): array
180  {
181  return [
182  'not_given_' . SalesChannelInterface::TYPE => [
183  [
184  [
186  ],
187  ],
188  [
189  'message' => 'Validation Failed',
190  'errors' => [
191  [
192  'message' => '"%field" can not be empty.',
193  'parameters' => [
194  'field' => SalesChannelInterface::TYPE,
195  ],
196  ],
197  ],
198  ],
199  ],
200  'empty_' . SalesChannelInterface::TYPE => [
201  [
202  [
205  ],
206  ],
207  [
208  'message' => 'Validation Failed',
209  'errors' => [
210  [
211  'message' => '"%field" can not be empty.',
212  'parameters' => [
213  'field' => SalesChannelInterface::TYPE,
214  ],
215  ],
216  ],
217  ],
218  ],
219  'not_given_' . SalesChannelInterface::CODE => [
220  [
221  [
224  ],
225  [
227  ],
228  ],
229  [
230  'message' => 'Validation Failed',
231  'errors' => [
232  [
233  'message' => '"%field" can not be empty.',
234  'parameters' => [
235  'field' => SalesChannelInterface::CODE,
236  ],
237  ],
238  [
239  'message' => 'The website with code "%code" does not exist.',
240  'parameters' => [
241  'code' => '',
242  ],
243  ],
244  ],
245  ],
246  ],
247  'empty_' . SalesChannelInterface::CODE => [
248  [
249  [
252  ],
253  ],
254  [
255  'message' => 'Validation Failed',
256  'errors' => [
257  [
258  'message' => '"%field" can not be empty.',
259  'parameters' => [
260  'field' => SalesChannelInterface::CODE,
261  ],
262  ],
263  [
264  'message' => 'The website with code "%code" does not exist.',
265  'parameters' => [
266  'code' => '',
267  ],
268  ],
269  ],
270  ],
271  ],
272  ];
273  }
274 
280  private function saveStock(int $stockId, array $data)
281  {
282  $serviceInfo = [
283  'rest' => [
284  'resourcePath' => self::RESOURCE_PATH . '/' . $stockId,
285  'httpMethod' => Request::HTTP_METHOD_PUT,
286  ],
287  'soap' => [
288  'service' => self::SERVICE_NAME,
289  'operation' => self::SERVICE_NAME . 'Save',
290  ],
291  ];
292  if (TESTS_WEB_API_ADAPTER === self::ADAPTER_REST) {
293  $this->_webApiCall($serviceInfo, ['stock' => $data]);
294  } else {
296  $requestData['stockId'] = $stockId;
297  $this->_webApiCall($serviceInfo, ['stock' => $requestData]);
298  }
299  }
300 
305  private function getStockDataById(int $stockId): array
306  {
307  $serviceInfo = [
308  'rest' => [
309  'resourcePath' => self::RESOURCE_PATH . '/' . $stockId,
310  'httpMethod' => Request::HTTP_METHOD_GET,
311  ],
312  'soap' => [
313  'service' => self::SERVICE_NAME,
314  'operation' => self::SERVICE_NAME . 'Get',
315  ],
316  ];
317  $response = (TESTS_WEB_API_ADAPTER === self::ADAPTER_REST)
318  ? $this->_webApiCall($serviceInfo)
319  : $this->_webApiCall($serviceInfo, ['stockId' => $stockId]);
320  self::assertArrayHasKey(StockInterface::STOCK_ID, $response);
321  return $response;
322  }
323 
331  private function webApiCallWithError(array $serviceInfo, array $data, array $expectedErrorData)
332  {
333  try {
334  $this->_webApiCall($serviceInfo, ['stock' => $data]);
335  $this->fail('Expected throwing exception');
336  } catch (\Exception $e) {
337  if (TESTS_WEB_API_ADAPTER === self::ADAPTER_REST) {
338  self::assertEquals($expectedErrorData, $this->processRestExceptionResult($e));
339  self::assertEquals(Exception::HTTP_BAD_REQUEST, $e->getCode());
340  } elseif (TESTS_WEB_API_ADAPTER === self::ADAPTER_SOAP) {
341  $this->assertInstanceOf('SoapFault', $e);
342  $expectedWrappedErrors = [];
343  foreach ($expectedErrorData['errors'] as $error) {
344  // @see \Magento\TestFramework\TestCase\WebapiAbstract::getActualWrappedErrors()
345  $expectedWrappedErrors[] = [
346  'message' => $error['message'],
347  'params' => $error['parameters'],
348  ];
349  }
350  $this->checkSoapFault($e, $expectedErrorData['message'], 'env:Sender', [], $expectedWrappedErrors);
351  } else {
352  throw $e;
353  }
354  }
355  }
356 }
$response
Definition: 404.php:11
elseif(isset( $params[ 'redirect_parent']))
Definition: iframe.phtml:17
_webApiCall( $serviceInfo, $arguments=[], $webApiAdapterCode=null, $storeCode=null, $integration=null)
testValidateDeleteSalesChannelFromStock(array $salesChannels, array $beforeSave, array $afterSave)
checkSoapFault( $soapFault, $expectedMessage, $expectedFaultCode, $expectedErrorParams=[], $expectedWrappedErrors=[], $traceString=null)
$stockData
Definition: products.php:27