![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Sales\Service\V1; use Magento\Framework\ObjectManagerInterface; use Magento\Framework\Webapi\Rest\Request; use Magento\Sales\Api\Data\OrderInterface; use Magento\Sales\Model\Order; use Magento\TestFramework\Helper\Bootstrap; use Magento\TestFramework\TestCase\WebapiAbstract; class OrderGetTest extends WebapiAbstract { private const RESOURCE_PATH = '/V1/orders'; private const SERVICE_READ_NAME = 'salesOrderRepositoryV1'; private const SERVICE_VERSION = 'V1'; private const ORDER_INCREMENT_ID = '100000001'; /** * @var ObjectManagerInterface */ private $objectManager; /** * @inheritdoc */ protected function setUp(): void { $this->objectManager = Bootstrap::getObjectManager(); } /** * Checks order attributes. * * @magentoApiDataFixture Magento/Sales/_files/order.php */ public function testOrderGet(): void { $expectedOrderData = [ 'base_subtotal' => '100.0000', 'subtotal' => '100.0000', 'customer_is_guest' => '1', 'increment_id' => self::ORDER_INCREMENT_ID, ]; $expectedPayments = [ 'method' => 'checkmo', 'additional_information' => [ 0 => '11122', // last transaction id // metadata 1 => json_encode([ 'type' => 'free', 'fraudulent' => false ]) ] ]; $expectedBillingAddressNotEmpty = [ 'city', 'postcode', 'lastname', 'street', 'region', 'telephone', 'country_id', 'firstname', ]; $expectedShippingAddress = [ 'address_type' => 'shipping', 'city' => 'Los Angeles', 'email' => '[email protected]', 'postcode' => '11111', 'region' => 'CA' ]; $result = $this->makeServiceCall(self::ORDER_INCREMENT_ID); foreach ($expectedOrderData as $field => $value) { self::assertArrayHasKey($field, $result); self::assertEquals($value, $result[$field]); } self::assertArrayHasKey('payment', $result); foreach ($expectedPayments as $field => $value) { self::assertEquals($value, $result['payment'][$field]); } self::assertArrayHasKey('billing_address', $result); foreach ($expectedBillingAddressNotEmpty as $field) { self::assertArrayHasKey($field, $result['billing_address']); } self::assertArrayHasKey('extension_attributes', $result); self::assertArrayHasKey('shipping_assignments', $result['extension_attributes']); $shippingAssignments = $result['extension_attributes']['shipping_assignments']; self::assertCount(1, $shippingAssignments); $shippingAddress = $shippingAssignments[0]['shipping']['address']; foreach ($expectedShippingAddress as $key => $value) { self::assertArrayHasKey($key, $shippingAddress); self::assertEquals($value, $shippingAddress[$key]); } //check that nullable fields were marked as optional and were not sent foreach ($result as $value) { self::assertNotNull($value); } } /** * Checks order extension attributes. * * @magentoApiDataFixture Magento/Sales/_files/order_with_tax.php */ public function testOrderGetExtensionAttributes(): void { $expectedTax = [ 'code' => 'US-NY-*-Rate 1', 'type' => 'shipping' ]; $result = $this->makeServiceCall(self::ORDER_INCREMENT_ID); $appliedTaxes = $result['extension_attributes']['applied_taxes']; self::assertEquals($expectedTax['code'], $appliedTaxes[0]['code']); $appliedTaxes = $result['extension_attributes']['item_applied_taxes']; self::assertEquals($expectedTax['type'], $appliedTaxes[0]['type']); self::assertNotEmpty($appliedTaxes[0]['applied_taxes']); self::assertTrue($result['extension_attributes']['converting_from_quote']); self::assertArrayHasKey('payment_additional_info', $result['extension_attributes']); self::assertNotEmpty($result['extension_attributes']['payment_additional_info']); } /** * Checks if the order contains product option attributes. * * @magentoApiDataFixture Magento/Sales/_files/order_with_bundle.php */ public function testGetOrderWithProductOption(): void { $expected = [ 'extension_attributes' => [ 'bundle_options' => [ [ 'option_id' => 1, 'option_selections' => [1], 'option_qty' => 1 ] ] ] ]; $result = $this->makeServiceCall(self::ORDER_INCREMENT_ID); $bundleProduct = $this->getBundleProduct($result['items']); self::assertNotEmpty($bundleProduct, '"Bundle Product" should not be empty.'); self::assertNotEmpty($bundleProduct['product_option'], '"Product Option" should not be empty.'); self::assertEquals($expected, $bundleProduct['product_option']); } /** * Gets order by increment ID. * * @param string $incrementId * @return OrderInterface */ private function getOrder(string $incrementId): OrderInterface { /** @var Order $order */ $order = $this->objectManager->create(Order::class); $order->loadByIncrementId($incrementId); return $order; } /** * Makes service call. * * @param string $incrementId * @return array */ private function makeServiceCall(string $incrementId): array { $order = $this->getOrder($incrementId); $serviceInfo = [ 'rest' => [ 'resourcePath' => self::RESOURCE_PATH . '/' . $order->getId(), 'httpMethod' => Request::HTTP_METHOD_GET, ], 'soap' => [ 'service' => self::SERVICE_READ_NAME, 'serviceVersion' => self::SERVICE_VERSION, 'operation' => self::SERVICE_READ_NAME . 'get', ], ]; return $this->_webApiCall($serviceInfo, ['id' => $order->getId()]); } /** * Gets a bundle product from the result. * * @param array $items * @return array */ private function getBundleProduct(array $items): array { foreach ($items as $item) { if ($item['product_type'] == 'bundle') { return $item; } } return []; } }