Skip to content

Commit 8e8ca79

Browse files
committed
Implement updates all properties in updateCustomer mutation
The current schema defines properties that were ignored when processing user input. Fixes magento/graphql-ce#388
1 parent 062662d commit 8e8ca79

File tree

2 files changed

+31
-6
lines changed

2 files changed

+31
-6
lines changed

app/code/Magento/CustomerGraphQl/Model/Customer/UpdateCustomerData.php

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
*/
2020
class UpdateCustomerData
2121
{
22+
private const RESTRICTED_DATA_KEYS = ['email', 'password'];
23+
2224
/**
2325
* @var CustomerRepositoryInterface
2426
*/
@@ -62,13 +64,14 @@ public function __construct(
6264
public function execute(int $customerId, array $data): void
6365
{
6466
$customer = $this->customerRepository->getById($customerId);
67+
$newCustomerData = array_diff_key($data, array_flip(static::RESTRICTED_DATA_KEYS));
6568

66-
if (isset($data['firstname'])) {
67-
$customer->setFirstname($data['firstname']);
68-
}
69-
70-
if (isset($data['lastname'])) {
71-
$customer->setLastname($data['lastname']);
69+
foreach ($newCustomerData as $key => $value) {
70+
$setterMethod = 'set' . ucwords($key, '_');
71+
if (!method_exists($customer, $setterMethod)) {
72+
continue;
73+
}
74+
$customer->{$setterMethod}($value);
7275
}
7376

7477
if (isset($data['email']) && $customer->getEmail() !== $data['email']) {

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

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,32 +47,54 @@ public function testUpdateCustomer()
4747
$currentEmail = '[email protected]';
4848
$currentPassword = 'password';
4949

50+
$newPrefix = 'Dr';
5051
$newFirstname = 'Richard';
52+
$newMiddlename = 'Riley';
5153
$newLastname = 'Rowe';
54+
$newSuffix = 'III';
55+
$newDob = '3/11/1972';
56+
$newTaxVat = 'GQL1234567';
57+
$newGender = 2;
5258
$newEmail = '[email protected]';
5359

5460
$query = <<<QUERY
5561
mutation {
5662
updateCustomer(
5763
input: {
64+
prefix: "{$newPrefix}"
5865
firstname: "{$newFirstname}"
66+
middlename: "{$newMiddlename}"
5967
lastname: "{$newLastname}"
68+
suffix: "{$newSuffix}"
69+
dob: "{$newDob}"
70+
taxvat: "{$newTaxVat}"
6071
email: "{$newEmail}"
6172
password: "{$currentPassword}"
6273
}
6374
) {
6475
customer {
76+
prefix
6577
firstname
78+
middlename
6679
lastname
80+
suffix
81+
dob
82+
taxvat
6783
email
6884
}
6985
}
7086
}
7187
QUERY;
7288
$response = $this->graphQlQuery($query, [], '', $this->getCustomerAuthHeaders($currentEmail, $currentPassword));
7389

90+
$this->assertEquals($newPrefix, $response['updateCustomer']['customer']['prefix']);
7491
$this->assertEquals($newFirstname, $response['updateCustomer']['customer']['firstname']);
92+
$this->assertEquals($newMiddlename, $response['updateCustomer']['customer']['middlename']);
7593
$this->assertEquals($newLastname, $response['updateCustomer']['customer']['lastname']);
94+
$this->assertEquals($newSuffix, $response['updateCustomer']['customer']['suffix']);
95+
$newDobDate = new \DateTime($newDob);
96+
$this->assertEquals($newDobDate->format('Y-m-d'), $response['updateCustomer']['customer']['dob']);
97+
$this->assertEquals($newTaxVat, $response['updateCustomer']['customer']['taxvat']);
7698
$this->assertEquals($newEmail, $response['updateCustomer']['customer']['email']);
7799
}
78100

0 commit comments

Comments
 (0)