Skip to content

Commit 1e5defb

Browse files
committed
magento/graphql-ce#914: [Customer] Improve consistency of country field in customer address
1 parent fd7522f commit 1e5defb

File tree

3 files changed

+59
-94
lines changed

3 files changed

+59
-94
lines changed

app/code/Magento/CustomerGraphQl/etc/schema.graphqls

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ input CustomerAddressInput {
2828
city: String @doc(description: "The city or town")
2929
region: CustomerAddressRegionInput @doc(description: "An object containing the region name, region code, and region ID")
3030
postcode: String @doc(description: "The customer's ZIP or postal code")
31-
country_id: CountryCodeEnum @doc(description: "Deprecated, use country_code instead.")
31+
country_id: CountryCodeEnum @doc(description: "Deprecated: use `country_code` instead.")
3232
country_code: CountryCodeEnum @doc(description: "The customer's country")
3333
default_shipping: Boolean @doc(description: "Indicates whether the address is the default shipping address")
3434
default_billing: Boolean @doc(description: "Indicates whether the address is the default billing address")
@@ -103,7 +103,7 @@ type CustomerAddress @doc(description: "CustomerAddress contains detailed inform
103103
customer_id: Int @doc(description: "The customer ID") @deprecated(reason: "customer_id is not needed as part of CustomerAddress, address ID (id) is unique identifier for the addresses.")
104104
region: CustomerAddressRegion @doc(description: "An object containing the region name, region code, and region ID")
105105
region_id: Int @deprecated(reason: "Region ID is excessive on storefront and region code should suffice for all scenarios")
106-
country_id: String @doc(description: "The customer's country") @deprecated(reason: "Use country_code instead.")
106+
country_id: String @doc(description: "The customer's country") @deprecated(reason: "Use `country_code` instead.")
107107
country_code: CountryCodeEnum @doc(description: "The customer's country")
108108
street: [String] @doc(description: "An array of strings that define the street number and name")
109109
company: String @doc(description: "The customer's company")

dev/tests/api-functional/testsuite/Magento/GraphQl/Customer/CreateCustomerAddressTest.php

Lines changed: 16 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public function testCreateCustomerAddress()
4949
'region_id' => 4,
5050
'region_code' => 'AZ'
5151
],
52-
'country_id' => 'US',
52+
'country_code' => 'US',
5353
'street' => ['Line 1 Street', 'Line 2'],
5454
'company' => 'Company name',
5555
'telephone' => '123456789',
@@ -75,7 +75,7 @@ public function testCreateCustomerAddress()
7575
region_id: {$newAddress['region']['region_id']}
7676
region_code: "{$newAddress['region']['region_code']}"
7777
}
78-
country_id: {$newAddress['country_id']}
78+
country_code: {$newAddress['country_code']}
7979
street: ["{$newAddress['street'][0]}","{$newAddress['street'][1]}"]
8080
company: "{$newAddress['company']}"
8181
telephone: "{$newAddress['telephone']}"
@@ -98,7 +98,7 @@ public function testCreateCustomerAddress()
9898
region_id
9999
region_code
100100
}
101-
country_id
101+
country_code
102102
street
103103
company
104104
telephone
@@ -134,18 +134,20 @@ public function testCreateCustomerAddress()
134134
}
135135

136136
/**
137+
* Test case for deprecated `country_id` field.
138+
*
137139
* @magentoApiDataFixture Magento/Customer/_files/customer_without_addresses.php
138140
* @SuppressWarnings(PHPMD.ExcessiveMethodLength)
139141
*/
140-
public function testCreateCustomerAddressWithCountryCode()
142+
public function testCreateCustomerAddressWithCountryId()
141143
{
142144
$newAddress = [
143145
'region' => [
144146
'region' => 'Arizona',
145147
'region_id' => 4,
146148
'region_code' => 'AZ'
147149
],
148-
'country_code' => 'US',
150+
'country_id' => 'US',
149151
'street' => ['Line 1 Street', 'Line 2'],
150152
'company' => 'Company name',
151153
'telephone' => '123456789',
@@ -171,7 +173,7 @@ public function testCreateCustomerAddressWithCountryCode()
171173
region_id: {$newAddress['region']['region_id']}
172174
region_code: "{$newAddress['region']['region_code']}"
173175
}
174-
country_code: {$newAddress['country_code']}
176+
country_id: {$newAddress['country_id']}
175177
street: ["{$newAddress['street'][0]}","{$newAddress['street'][1]}"]
176178
company: "{$newAddress['company']}"
177179
telephone: "{$newAddress['telephone']}"
@@ -187,28 +189,7 @@ public function testCreateCustomerAddressWithCountryCode()
187189
default_shipping: true
188190
default_billing: false
189191
}) {
190-
id
191-
customer_id
192-
region {
193-
region
194-
region_id
195-
region_code
196-
}
197-
country_code
198-
street
199-
company
200-
telephone
201-
fax
202-
postcode
203-
city
204-
firstname
205-
lastname
206-
middlename
207-
prefix
208-
suffix
209-
vat_id
210-
default_shipping
211-
default_billing
192+
country_id
212193
}
213194
}
214195
MUTATION;
@@ -218,15 +199,7 @@ public function testCreateCustomerAddressWithCountryCode()
218199

219200
$response = $this->graphQlMutation($mutation, [], '', $this->getCustomerAuthHeaders($userName, $password));
220201
$this->assertArrayHasKey('createCustomerAddress', $response);
221-
$this->assertArrayHasKey('customer_id', $response['createCustomerAddress']);
222-
$this->assertEquals(null, $response['createCustomerAddress']['customer_id']);
223-
$this->assertArrayHasKey('id', $response['createCustomerAddress']);
224-
225-
$address = $this->addressRepository->getById($response['createCustomerAddress']['id']);
226-
$this->assertEquals($address->getId(), $response['createCustomerAddress']['id']);
227-
228-
$this->assertCustomerAddressesFields($address, $response['createCustomerAddress'], 'country_code');
229-
$this->assertCustomerAddressesFields($address, $newAddress, 'country_code');
202+
$this->assertEquals($newAddress['country_id'], $response['createCustomerAddress']['country_id']);
230203
}
231204

232205
/**
@@ -249,7 +222,7 @@ public function testCreateCustomerAddressIfUserIsNotAuthorized()
249222
region: {
250223
region_id: 1
251224
}
252-
country_id: US
225+
country_code: US
253226
postcode: "9999"
254227
default_shipping: true
255228
default_billing: false
@@ -278,7 +251,7 @@ public function testCreateCustomerAddressWithMissingAttribute()
278251
region: {
279252
region_id: 1
280253
}
281-
country_id: US
254+
country_code: US
282255
street: ["Line 1 Street","Line 2"]
283256
company: "Company name"
284257
telephone: "123456789"
@@ -310,7 +283,7 @@ public function testCreateCustomerAddressWithRedundantStreetLine()
310283
'region_id' => 4,
311284
'region_code' => 'AZ'
312285
],
313-
'country_id' => 'US',
286+
'country_code' => 'US',
314287
'street' => ['Line 1 Street', 'Line 2', 'Line 3'],
315288
'company' => 'Company name',
316289
'telephone' => '123456789',
@@ -336,7 +309,7 @@ public function testCreateCustomerAddressWithRedundantStreetLine()
336309
region_id: {$newAddress['region']['region_id']}
337310
region_code: "{$newAddress['region']['region_code']}"
338311
}
339-
country_id: {$newAddress['country_id']}
312+
country_code: {$newAddress['country_code']}
340313
street: ["{$newAddress['street'][0]}","{$newAddress['street'][1]}","{$newAddress['street'][2]}"]
341314
company: "{$newAddress['company']}"
342315
telephone: "{$newAddress['telephone']}"
@@ -413,12 +386,11 @@ public function invalidInputDataProvider()
413386
*/
414387
private function assertCustomerAddressesFields(
415388
AddressInterface $address,
416-
array $actualResponse,
417-
string $countryFieldName = 'country_id'
389+
array $actualResponse
418390
): void {
419391
/** @var $addresses */
420392
$assertionMap = [
421-
['response_field' => $countryFieldName, 'expected_value' => $address->getCountryId()],
393+
['response_field' => 'country_code', 'expected_value' => $address->getCountryId()],
422394
['response_field' => 'street', 'expected_value' => $address->getStreet()],
423395
['response_field' => 'company', 'expected_value' => $address->getCompany()],
424396
['response_field' => 'telephone', 'expected_value' => $address->getTelephone()],

dev/tests/api-functional/testsuite/Magento/GraphQl/Customer/UpdateCustomerAddressTest.php

Lines changed: 41 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -77,30 +77,53 @@ public function testUpdateCustomerAddress()
7777
}
7878

7979
/**
80+
* Test case for deprecated `country_id` field.
81+
*
8082
* @magentoApiDataFixture Magento/Customer/_files/customer.php
8183
* @magentoApiDataFixture Magento/Customer/_files/customer_address.php
8284
* @SuppressWarnings(PHPMD.ExcessiveMethodLength)
8385
*/
84-
public function testUpdateCustomerAddressWithCountryCode()
86+
public function testUpdateCustomerAddressWithCountryId()
8587
{
8688
$userName = 'customer@example.com';
8789
$password = 'password';
8890
$addressId = 1;
8991

90-
$mutation = $this->getMutationWithCountryCode($addressId);
92+
$updateAddress = $this->getAddressData();
93+
94+
$mutation = $mutation
95+
= <<<MUTATION
96+
mutation {
97+
updateCustomerAddress(id: {$addressId}, input: {
98+
region: {
99+
region: "{$updateAddress['region']['region']}"
100+
region_id: {$updateAddress['region']['region_id']}
101+
region_code: "{$updateAddress['region']['region_code']}"
102+
}
103+
country_id: {$updateAddress['country_code']}
104+
street: ["{$updateAddress['street'][0]}","{$updateAddress['street'][1]}"]
105+
company: "{$updateAddress['company']}"
106+
telephone: "{$updateAddress['telephone']}"
107+
fax: "{$updateAddress['fax']}"
108+
postcode: "{$updateAddress['postcode']}"
109+
city: "{$updateAddress['city']}"
110+
firstname: "{$updateAddress['firstname']}"
111+
lastname: "{$updateAddress['lastname']}"
112+
middlename: "{$updateAddress['middlename']}"
113+
prefix: "{$updateAddress['prefix']}"
114+
suffix: "{$updateAddress['suffix']}"
115+
vat_id: "{$updateAddress['vat_id']}"
116+
default_shipping: true
117+
default_billing: true
118+
}) {
119+
country_id
120+
}
121+
}
122+
MUTATION;
91123

92124
$response = $this->graphQlMutation($mutation, [], '', $this->getCustomerAuthHeaders($userName, $password));
93125
$this->assertArrayHasKey('updateCustomerAddress', $response);
94-
$this->assertArrayHasKey('customer_id', $response['updateCustomerAddress']);
95-
$this->assertEquals(null, $response['updateCustomerAddress']['customer_id']);
96-
$this->assertArrayHasKey('id', $response['updateCustomerAddress']);
97-
98-
$address = $this->addressRepository->getById($addressId);
99-
$this->assertEquals($address->getId(), $response['updateCustomerAddress']['id']);
100-
$this->assertCustomerAddressesFields($address, $response['updateCustomerAddress'], 'country_code');
101-
102-
$updateAddress = $this->getAddressDataCanadaCountry();
103-
$this->assertCustomerAddressesFields($address, $updateAddress, 'country_code');
126+
$this->assertEquals($updateAddress['country_code'], $response['updateCustomerAddress']['country_id']);
104127
}
105128

106129
/**
@@ -162,12 +185,11 @@ public function testUpdateCustomerAddressWithMissingAttribute()
162185
*/
163186
private function assertCustomerAddressesFields(
164187
AddressInterface $address,
165-
$actualResponse,
166-
string $countryFieldName = 'country_id'
188+
$actualResponse
167189
): void {
168190
/** @var $addresses */
169191
$assertionMap = [
170-
['response_field' => $countryFieldName, 'expected_value' => $address->getCountryId()],
192+
['response_field' => 'country_code', 'expected_value' => $address->getCountryId()],
171193
['response_field' => 'street', 'expected_value' => $address->getStreet()],
172194
['response_field' => 'company', 'expected_value' => $address->getCompany()],
173195
['response_field' => 'telephone', 'expected_value' => $address->getTelephone()],
@@ -218,7 +240,7 @@ public function testUpdateCustomerAddressWithMissingId()
218240
region_id: {$updateAddress['region']['region_id']}
219241
region_code: "{$updateAddress['region']['region_code']}"
220242
}
221-
country_id: {$updateAddress['country_id']}
243+
country_code: {$updateAddress['country_code']}
222244
street: ["{$updateAddress['street'][0]}","{$updateAddress['street'][1]}"]
223245
company: "{$updateAddress['company']}"
224246
telephone: "{$updateAddress['telephone']}"
@@ -274,7 +296,7 @@ public function testUpdateCustomerAddressWithInvalidIdType()
274296
region_id: {$updateAddress['region']['region_id']}
275297
region_code: "{$updateAddress['region']['region_code']}"
276298
}
277-
country_id: {$updateAddress['country_id']}
299+
country_code: {$updateAddress['country_code']}
278300
street: ["{$updateAddress['street'][0]}","{$updateAddress['street'][1]}"]
279301
company: "{$updateAddress['company']}"
280302
telephone: "{$updateAddress['telephone']}"
@@ -410,35 +432,6 @@ private function getCustomerAuthHeaders(string $email, string $password): array
410432
* @return array
411433
*/
412434
private function getAddressData(): array
413-
{
414-
return [
415-
'region' => [
416-
'region' => 'Alaska',
417-
'region_id' => 2,
418-
'region_code' => 'AK'
419-
],
420-
'country_id' => 'US',
421-
'street' => ['Line 1 Street', 'Line 2'],
422-
'company' => 'Company Name',
423-
'telephone' => '123456789',
424-
'fax' => '123123123',
425-
'postcode' => '7777',
426-
'city' => 'City Name',
427-
'firstname' => 'Adam',
428-
'lastname' => 'Phillis',
429-
'middlename' => 'A',
430-
'prefix' => 'Mr.',
431-
'suffix' => 'Jr.',
432-
'vat_id' => '1',
433-
'default_shipping' => true,
434-
'default_billing' => true
435-
];
436-
}
437-
438-
/**
439-
* @return array
440-
*/
441-
private function getAddressDataCanadaCountry(): array
442435
{
443436
return [
444437
'region' => [
@@ -483,7 +476,7 @@ private function getMutation(int $addressId): string
483476
region_id: {$updateAddress['region']['region_id']}
484477
region_code: "{$updateAddress['region']['region_code']}"
485478
}
486-
country_id: {$updateAddress['country_id']}
479+
country_code: {$updateAddress['country_code']}
487480
street: ["{$updateAddress['street'][0]}","{$updateAddress['street'][1]}"]
488481
company: "{$updateAddress['company']}"
489482
telephone: "{$updateAddress['telephone']}"
@@ -506,7 +499,7 @@ private function getMutation(int $addressId): string
506499
region_id
507500
region_code
508501
}
509-
country_id
502+
country_code
510503
street
511504
company
512505
telephone

0 commit comments

Comments
 (0)