objectManager = Bootstrap::getObjectManager(); $this->orderRepository = $this->objectManager->get(OrderRepositoryInterface::class); $this->searchCriteriaBuilder = $this->objectManager->get(SearchCriteriaBuilder::class); $this->shipmentRepository = $this->objectManager->get(ShipmentRepositoryInterface::class); } /** * @magentoApiDataFixture ../../../../app/code/Magento/InventoryApi/Test/_files/sources.php * @magentoApiDataFixture ../../../../app/code/Magento/InventoryApi/Test/_files/stocks.php * @magentoApiDataFixture ../../../../app/code/Magento/InventoryApi/Test/_files/stock_source_links.php * @magentoApiDataFixture ../../../../app/code/Magento/InventorySalesApi/Test/_files/websites_with_stores.php * @magentoApiDataFixture ../../../../app/code/Magento/InventorySalesApi/Test/_files/stock_website_sales_channels.php * @magentoApiDataFixture Magento/Checkout/_files/simple_product.php * @magentoApiDataFixture ../../../../app/code/Magento/InventoryShipping/Test/_files/source_items_for_simple_on_multi_source.php * @magentoApiDataFixture ../../../../app/code/Magento/InventoryIndexer/Test/_files/reindex_inventory.php * @magentoApiDataFixture ../../../../app/code/Magento/InventoryShipping/Test/_files/create_quote_on_eu_website.php * @magentoApiDataFixture ../../../../app/code/Magento/InventoryShipping/Test/_files/order_simple_product.php */ public function testShipOrderWithSimpleProduct() { $searchCriteria = $this->searchCriteriaBuilder ->addFilter('increment_id', 'created_order_for_test') ->create(); /** @var OrderInterface $order */ $createdOrder = current($this->orderRepository->getList($searchCriteria)->getItems()); $requestData = [ 'arguments' => [ 'extension_attributes' => [ 'source_code' => 'eu-2' ] ], 'orderId' => $createdOrder->getId(), ]; $result = $this->_webApiCall( $this->buildServiceInfo((int)$createdOrder->getEntityId()), $requestData ); $this->assertNotEmpty($result); try { $shipping = $this->shipmentRepository->get($result); $this->assertNotNull($shipping->getEntityId()); $this->assertEquals('3.0000', $shipping->getTotalQty()); $shipmentExtension = $shipping->getExtensionAttributes(); $this->assertEquals('eu-2', $shipmentExtension->getSourceCode()); } catch (NoSuchEntityException $e) { $this->fail('Failed asserting that Shipment was created'); } /** @var OrderInterface $order */ $shippedOrder = current($this->orderRepository->getList($searchCriteria)->getItems()); $this->assertNotEquals( $createdOrder->getStatus(), $shippedOrder->getStatus(), 'Failed asserting that Order status was changed' ); } /** * @magentoApiDataFixture ../../../../app/code/Magento/InventorySalesApi/Test/_files/websites_with_stores.php * @magentoApiDataFixture Magento/ConfigurableProduct/_files/configurable_attribute.php * @magentoApiDataFixture ../../../../app/code/Magento/InventoryConfigurableProduct/Test/_files/product_configurable.php * @magentoApiDataFixture ../../../../app/code/Magento/InventoryApi/Test/_files/sources.php * @magentoApiDataFixture ../../../../app/code/Magento/InventoryApi/Test/_files/stocks.php * @magentoApiDataFixture ../../../../app/code/Magento/InventoryApi/Test/_files/stock_source_links.php * @magentoApiDataFixture ../../../../app/code/Magento/InventorySalesApi/Test/_files/stock_website_sales_channels.php * @magentoApiDataFixture ../../../../app/code/Magento/InventoryConfigurableProduct/Test/_files/source_items_configurable.php * @magentoApiDataFixture ../../../../app/code/Magento/InventoryIndexer/Test/_files/reindex_inventory.php * @magentoApiDataFixture ../../../../app/code/Magento/InventoryShipping/Test/_files/create_quote_on_us_website.php * @magentoApiDataFixture ../../../../app/code/Magento/InventoryShipping/Test/_files/order_configurable_product.php */ public function testShipOrderWithConfigurableProduct() { $searchCriteria = $this->searchCriteriaBuilder ->addFilter('increment_id', 'created_order_for_test') ->create(); /** @var OrderInterface $order */ $createdOrder = current($this->orderRepository->getList($searchCriteria)->getItems()); $requestData = [ 'arguments' => [ 'extension_attributes' => [ 'source_code' => 'us-1' ] ], 'orderId' => $createdOrder->getId(), ]; $result = $this->_webApiCall( $this->buildServiceInfo((int)$createdOrder->getEntityId()), $requestData ); $this->assertNotEmpty($result); try { $shipping = $this->shipmentRepository->get($result); $this->assertNotNull($shipping->getEntityId()); $this->assertEquals('3.0000', $shipping->getTotalQty()); $shipmentExtension = $shipping->getExtensionAttributes(); $this->assertEquals('us-1', $shipmentExtension->getSourceCode()); } catch (NoSuchEntityException $e) { $this->fail('Failed asserting that Shipment was created'); } /** @var OrderInterface $order */ $shippedOrder = current($this->orderRepository->getList($searchCriteria)->getItems()); $this->assertNotEquals( $createdOrder->getStatus(), $shippedOrder->getStatus(), 'Failed asserting that Order status was changed' ); } /** * Build request body * * @param int $orderId * @return array */ private function buildServiceInfo(int $orderId): array { $serviceInfo = [ 'rest' => [ 'resourcePath' => '/V1/order/' . $orderId . '/ship', 'httpMethod' => Request::HTTP_METHOD_POST, ], 'soap' => [ 'service' => self::SERVICE_READ_NAME, 'serviceVersion' => self::SERVICE_VERSION, 'operation' => self::SERVICE_READ_NAME . 'execute', ], ]; return $serviceInfo; } }