Skip to content

Commit bc18a8f

Browse files
committed
#27338 Add testmodule with extension attribute
1 parent dcb59d3 commit bc18a8f

File tree

4 files changed

+138
-0
lines changed

4 files changed

+138
-0
lines changed
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<?xml version="1.0"?>
2+
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xsi:noNamespaceSchemaLocation="urn:magento:framework:Api/etc/extension_attributes.xsd">
4+
<extension_attributes for="Magento\Quote\Api\Data\AddressInterface">
5+
<attribute code="test_attribute" type="int" />
6+
</extension_attributes>
7+
</config>
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<?xml version="1.0"?>
2+
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
4+
<module name="'Magento_TestModuleExtensionAttributes" setup_version="1.0.0">
5+
<sequence>
6+
<module name="Magento_Quote"/>
7+
</sequence>
8+
</module>
9+
</config>
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<?php
2+
\Magento\Framework\Component\ComponentRegistrar::register(
3+
\Magento\Framework\Component\ComponentRegistrar::MODULE,
4+
'Magento_TestModuleExtensionAttributes',
5+
__DIR__
6+
);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Quote\Api;
7+
8+
use Magento\TestFramework\ObjectManager;
9+
use Magento\TestFramework\TestCase\WebapiAbstract;
10+
use Magento\Quote\Api\Data\AddressInterface;
11+
12+
class GuestShipmentEstimationWithExtensionAttributesTest extends WebapiAbstract
13+
{
14+
const SERVICE_VERSION = 'V1';
15+
const SERVICE_NAME = 'quoteGuestShipmentEstimationV1';
16+
const RESOURCE_PATH = '/V1/guest-carts/';
17+
18+
/**
19+
* @var ObjectManager
20+
*/
21+
private $objectManager;
22+
23+
protected function setUp()
24+
{
25+
$this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
26+
}
27+
28+
/**
29+
* @magentoApiDataFixture Magento/SalesRule/_files/cart_rule_free_shipping.php
30+
* @magentoApiDataFixture Magento/Sales/_files/quote.php
31+
*/
32+
public function testEstimateByExtendedAddress()
33+
{
34+
/** @var \Magento\Quote\Model\Quote $quote */
35+
$quote = $this->objectManager->create(\Magento\Quote\Model\Quote::class);
36+
$quote->load('test01', 'reserved_order_id');
37+
$cartId = $quote->getId();
38+
if (!$cartId) {
39+
$this->fail('quote fixture failed');
40+
}
41+
42+
/** @var \Magento\Quote\Model\QuoteIdMask $quoteIdMask */
43+
$quoteIdMask = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
44+
->create(\Magento\Quote\Model\QuoteIdMaskFactory::class)
45+
->create();
46+
$quoteIdMask->load($cartId, 'quote_id');
47+
//Use masked cart Id
48+
$cartId = $quoteIdMask->getMaskedId();
49+
$serviceInfo = [
50+
'rest' => [
51+
'resourcePath' => '/V1/guest-carts/' . $cartId . '/estimate-shipping-methods',
52+
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_POST,
53+
],
54+
'soap' => [
55+
'service' => self::SERVICE_NAME,
56+
'serviceVersion' => 'V1',
57+
'operation' => self::SERVICE_NAME . 'EstimateByExtendedAddress',
58+
],
59+
];
60+
if (TESTS_WEB_API_ADAPTER == self::ADAPTER_SOAP) {
61+
/** @var \Magento\Quote\Model\Quote\Address $address */
62+
$address = $quote->getBillingAddress();
63+
64+
$data = [
65+
AddressInterface::KEY_ID => (int)$address->getId(),
66+
AddressInterface::KEY_REGION => $address->getRegion(),
67+
AddressInterface::KEY_REGION_ID => $address->getRegionId(),
68+
AddressInterface::KEY_REGION_CODE => $address->getRegionCode(),
69+
AddressInterface::KEY_COUNTRY_ID => $address->getCountryId(),
70+
AddressInterface::KEY_STREET => $address->getStreet(),
71+
AddressInterface::KEY_COMPANY => $address->getCompany(),
72+
AddressInterface::KEY_TELEPHONE => $address->getTelephone(),
73+
AddressInterface::KEY_POSTCODE => $address->getPostcode(),
74+
AddressInterface::KEY_CITY => $address->getCity(),
75+
AddressInterface::KEY_FIRSTNAME => $address->getFirstname(),
76+
AddressInterface::KEY_LASTNAME => $address->getLastname(),
77+
AddressInterface::KEY_CUSTOMER_ID => $address->getCustomerId(),
78+
AddressInterface::KEY_EMAIL => $address->getEmail(),
79+
AddressInterface::SAME_AS_BILLING => $address->getSameAsBilling(),
80+
AddressInterface::CUSTOMER_ADDRESS_ID => $address->getCustomerAddressId(),
81+
AddressInterface::SAVE_IN_ADDRESS_BOOK => $address->getSaveInAddressBook(),
82+
83+
'custom_attributes' => [
84+
[
85+
'attribute_code' => 'test_attribute',
86+
'value' => 1,
87+
],
88+
]
89+
];
90+
91+
$requestData = [
92+
'cartId' => $cartId,
93+
'address' => $data
94+
];
95+
} else {
96+
$requestData = [
97+
'address' => [
98+
'country_id' => "US",
99+
'postcode' => null,
100+
'region' => null,
101+
'region_id' => null
102+
],
103+
];
104+
}
105+
// Cart must be anonymous (see fixture)
106+
$this->assertEmpty($quote->getCustomerId());
107+
108+
$result = $this->_webApiCall($serviceInfo, $requestData);
109+
$this->assertNotEmpty($result);
110+
$this->assertEquals(1, count($result));
111+
foreach ($result as $rate) {
112+
$this->assertEquals("flatrate", $rate['carrier_code']);
113+
$this->assertEquals(0, $rate['amount']);
114+
}
115+
}
116+
}

0 commit comments

Comments
 (0)