Skip to content

Commit b41627b

Browse files
author
Valeriy Nayda
committed
GraphQL-57: Manage Address Book
1 parent 2894aaa commit b41627b

File tree

4 files changed

+77
-3
lines changed

4 files changed

+77
-3
lines changed

app/code/Magento/CustomerGraphQl/Model/Resolver/CreateCustomerAddress.php

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
use Magento\CustomerGraphQl\Model\Customer\Address\CustomerAddressDataProvider;
1515
use Magento\CustomerGraphQl\Model\Customer\CheckCustomerAccount;
1616
use Magento\Framework\Api\DataObjectHelper;
17+
use Magento\Framework\Exception\InputException;
18+
use Magento\Framework\GraphQl\Exception\GraphQlInputException;
1719
use Magento\Framework\GraphQl\Schema\Type\ResolveInfo;
1820
use Magento\Framework\GraphQl\Config\Element\Field;
1921
use Magento\Framework\GraphQl\Query\ResolverInterface;
@@ -103,13 +105,20 @@ public function resolve(
103105
* @param int $customerId
104106
* @param array $addressData
105107
* @return AddressInterface
108+
* @throws GraphQlInputException
106109
*/
107110
private function createCustomerAddress(int $customerId, array $addressData) : AddressInterface
108111
{
109112
/** @var AddressInterface $address */
110113
$address = $this->addressInterfaceFactory->create();
111114
$this->dataObjectHelper->populateWithArray($address, $addressData, AddressInterface::class);
112115
$address->setCustomerId($customerId);
113-
return $this->addressRepository->save($address);
116+
117+
try {
118+
$address = $this->addressRepository->save($address);
119+
} catch (InputException $e) {
120+
throw new GraphQlInputException(__($e->getMessage()), $e);
121+
}
122+
return $address;
114123
}
115124
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ protected function setUp()
3434
}
3535

3636
/**
37-
* @magentoApiDataFixture Magento/Customer/_files/customer.php
37+
* @magentoApiDataFixture Magento/Customer/_files/customer_without_addresses.php
3838
* @SuppressWarnings(PHPMD.ExcessiveMethodLength)
3939
*/
4040
public function testCreateCustomerAddress()
@@ -165,7 +165,7 @@ public function testCreateCustomerAddressIfUserIsNotAuthorized()
165165
* Verify customers with valid credentials create new address
166166
* with missing required Firstname attribute
167167
*
168-
* @magentoApiDataFixture Magento/Customer/_files/customer.php
168+
* @magentoApiDataFixture Magento/Customer/_files/customer_without_addresses.php
169169
* @expectedException \Exception
170170
* @expectedExceptionMessage Required parameters are missing: firstname
171171
*/
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
use Magento\Customer\Model\Customer;
9+
use Magento\Customer\Model\CustomerRegistry;
10+
use Magento\TestFramework\Helper\Bootstrap;
11+
12+
/** @var CustomerRegistry $customerRegistry */
13+
$customerRegistry = Bootstrap::getObjectManager()->get(CustomerRegistry::class);
14+
/** @var Customer $customer */
15+
$customer = Bootstrap::getObjectManager()->get(Customer::class);
16+
17+
$customer->setWebsiteId(1)
18+
->setId(1)
19+
->setEmail('customer@example.com')
20+
->setPassword('password')
21+
->setGroupId(1)
22+
->setStoreId(1)
23+
->setIsActive(1)
24+
->setPrefix('Mr.')
25+
->setFirstname('John')
26+
->setMiddlename('A')
27+
->setLastname('Smith')
28+
->setSuffix('Esq.')
29+
->setGender(0)
30+
->save();
31+
$customerRegistry->remove($customer->getId());
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
use Magento\Customer\Api\CustomerRepositoryInterface;
9+
use Magento\Customer\Model\CustomerRegistry;
10+
use Magento\Framework\Exception\NoSuchEntityException;
11+
use Magento\Framework\Registry;
12+
use Magento\TestFramework\Helper\Bootstrap;
13+
14+
/** @var CustomerRegistry $customerRegistry */
15+
$customerRegistry = Bootstrap::getObjectManager()->get(CustomerRegistry::class);
16+
/** @var CustomerRepositoryInterface $customerRepository */
17+
$customerRepository = Bootstrap::getObjectManager()->get(CustomerRepositoryInterface::class);
18+
19+
/** @var Registry $registry */
20+
$registry = Bootstrap::getObjectManager()->get(Registry::class);
21+
$registry->unregister('isSecureArea');
22+
$registry->register('isSecureArea', true);
23+
24+
try {
25+
$customerRepository->deleteById(1);
26+
} catch (NoSuchEntityException $e) {
27+
/**
28+
* Tests which are wrapped with MySQL transaction clear all data by transaction rollback.
29+
*/
30+
}
31+
$customerRegistry->remove(1);
32+
33+
$registry->unregister('isSecureArea');
34+
$registry->register('isSecureArea', false);

0 commit comments

Comments
 (0)