Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
StockResolverTest.php
Go to the documentation of this file.
1 <?php
6 declare(strict_types=1);
7 
9 
15 use Magento\InventorySalesApi\Api\Data\SalesChannelInterfaceFactory;
18 
23 {
27  const API_PATH = '/V1/inventory/stock-resolver';
28 
32  const SERVICE_NAME = 'inventorySalesApiStockResolverV1';
33 
37  private $objectManager;
38 
42  private $stockRepository;
43 
47  private $salesChannelFactory;
48 
52  protected function setUp()
53  {
54  $this->objectManager = Bootstrap::getObjectManager();
55  $this->stockRepository = $this->objectManager->get(StockRepositoryInterface::class);
56  $this->salesChannelFactory = $this->objectManager->get(SalesChannelInterfaceFactory::class);
57  }
58 
66  public function testResolveCustomStock()
67  {
68  $serviceInfo = [
69  'rest' => [
70  'resourcePath' => self::API_PATH . '/website/eu_website',
71  'httpMethod' => Request::HTTP_METHOD_GET,
72  ],
73  'soap' => [
74  'service' => self::SERVICE_NAME,
75  'operation' => self::SERVICE_NAME . 'Execute',
76  ],
77  ];
78 
79  $stockData = (TESTS_WEB_API_ADAPTER === self::ADAPTER_REST)
80  ? $this->_webApiCall($serviceInfo)
81  : $this->_webApiCall($serviceInfo, [
82  'type' => 'website',
83  'code' => 'eu_website',
84  ]);
85 
86  $this->assertEquals(10, $stockData['stock_id']);
87  $this->assertEquals('EU-stock', $stockData['name']);
88  $this->assertEquals(1, count($stockData['extension_attributes']['sales_channels']));
89  $this->assertEquals(
90  [
91  'type' => 'website',
92  'code' => 'eu_website'
93  ],
94  $stockData['extension_attributes']['sales_channels'][0]
95  );
96  }
97 
105  public function testResolveCustomStockAfterChangeSalesChannelsTest()
106  {
107  $stockId = 20;
108  $serviceInfo = [
109  'rest' => [
110  'resourcePath' => self::API_PATH . '/website/us_website',
111  'httpMethod' => Request::HTTP_METHOD_GET,
112  ],
113  'soap' => [
114  'service' => self::SERVICE_NAME,
115  'operation' => self::SERVICE_NAME . 'Execute',
116  ],
117  ];
118 
119  $stockData = (TESTS_WEB_API_ADAPTER === self::ADAPTER_REST)
120  ? $this->_webApiCall($serviceInfo)
121  : $this->_webApiCall($serviceInfo, [
122  'type' => 'website',
123  'code' => 'us_website',
124  ]);
125 
126  $this->assertEquals($stockId, $stockData['stock_id']);
127  $this->assertEquals('US-stock', $stockData['name']);
128  $this->assertEquals(1, count($stockData['extension_attributes']['sales_channels']));
129  $this->assertEquals(
130  [
131  'type' => 'website',
132  'code' => 'us_website'
133  ],
134  $stockData['extension_attributes']['sales_channels'][0]
135  );
136 
138  $stock = $this->stockRepository->get($stockId);
139  $salesChannel = $this->salesChannelFactory->create();
140  $salesChannel->setCode('global_website');
141  $salesChannel->setType(SalesChannelInterface::TYPE_WEBSITE);
142  $stock->getExtensionAttributes()->setSalesChannels([$salesChannel]);
143  $this->stockRepository->save($stock);
144 
145  $serviceInfo = [
146  'rest' => [
147  'resourcePath' => self::API_PATH . '/website/global_website',
148  'httpMethod' => Request::HTTP_METHOD_GET,
149  ],
150  'soap' => [
151  'service' => self::SERVICE_NAME,
152  'operation' => self::SERVICE_NAME . 'Execute',
153  ],
154  ];
155 
156  $stockData = (TESTS_WEB_API_ADAPTER === self::ADAPTER_REST)
157  ? $this->_webApiCall($serviceInfo)
158  : $this->_webApiCall($serviceInfo, [
159  'type' => 'website',
160  'code' => 'global_website',
161  ]);
162 
163  $this->assertEquals($stockId, $stockData['stock_id']);
164  $this->assertEquals('US-stock', $stockData['name']);
165  $this->assertEquals(1, count($stockData['extension_attributes']['sales_channels']));
166  $this->assertEquals(
167  [
168  'type' => 'website',
169  'code' => 'global_website'
170  ],
171  $stockData['extension_attributes']['sales_channels'][0]
172  );
173  }
174 
178  public function testResolveStockStockError()
179  {
180  $expectedMessage = 'No linked stock found';
181  $serviceInfo = [
182  'rest' => [
183  'resourcePath' => self::API_PATH . '/website/test_stock_resolver_error',
184  'httpMethod' => Request::HTTP_METHOD_GET,
185  ],
186  'soap' => [
187  'service' => self::SERVICE_NAME,
188  'operation' => self::SERVICE_NAME . 'Execute',
189  ],
190  ];
191 
192  try {
193  TESTS_WEB_API_ADAPTER === self::ADAPTER_REST ? $this->_webApiCall($serviceInfo)
194  : $this->_webApiCall($serviceInfo, ['type' => 'website', 'code' => 'test_stock_resolver_error']);
195  $this->fail('Expected throwing exception');
196  } catch (\Exception $e) {
197  if (TESTS_WEB_API_ADAPTER === self::ADAPTER_REST) {
198  $this->assertEquals($expectedMessage, $this->processRestExceptionResult($e)['message']);
199  } elseif (TESTS_WEB_API_ADAPTER === self::ADAPTER_SOAP) {
200  $this->assertInstanceOf('SoapFault', $e);
201  $this->assertEquals($expectedMessage, $e->getMessage());
202  } else {
203  throw $e;
204  }
205  }
206  }
207 }
elseif(isset( $params[ 'redirect_parent']))
Definition: iframe.phtml:17
_webApiCall( $serviceInfo, $arguments=[], $webApiAdapterCode=null, $storeCode=null, $integration=null)
$stock
$stockData
Definition: products.php:27