From 0654c3226c1da6e67ceb830e333f1dd31aa9b8d1 Mon Sep 17 00:00:00 2001 From: Vitaliy Boyko Date: Thu, 7 Feb 2019 23:40:33 +0200 Subject: [PATCH 1/2] graphQl-352: is email available --- .../Customer/IsEmailAvailableDataProvider.php | 40 ++++++++++++++ .../Model/Resolver/IsEmailAvailable.php | 55 +++++++++++++++++++ .../CustomerGraphQl/etc/schema.graphqls | 7 +++ .../GraphQl/Customer/IsEmailAvailableTest.php | 50 +++++++++++++++++ 4 files changed, 152 insertions(+) create mode 100644 app/code/Magento/CustomerGraphQl/Model/Customer/IsEmailAvailableDataProvider.php create mode 100644 app/code/Magento/CustomerGraphQl/Model/Resolver/IsEmailAvailable.php create mode 100644 dev/tests/api-functional/testsuite/Magento/GraphQl/Customer/IsEmailAvailableTest.php diff --git a/app/code/Magento/CustomerGraphQl/Model/Customer/IsEmailAvailableDataProvider.php b/app/code/Magento/CustomerGraphQl/Model/Customer/IsEmailAvailableDataProvider.php new file mode 100644 index 000000000000..9ec4ab9377ea --- /dev/null +++ b/app/code/Magento/CustomerGraphQl/Model/Customer/IsEmailAvailableDataProvider.php @@ -0,0 +1,40 @@ +accountManagement = $accountManagement; + } + + /** + * Check is Email available + * + * @param string $email + * @return bool + */ + public function execute(string $email): bool + { + return $this->accountManagement->isEmailAvailable($email); + } +} diff --git a/app/code/Magento/CustomerGraphQl/Model/Resolver/IsEmailAvailable.php b/app/code/Magento/CustomerGraphQl/Model/Resolver/IsEmailAvailable.php new file mode 100644 index 000000000000..a5edb78e67bf --- /dev/null +++ b/app/code/Magento/CustomerGraphQl/Model/Resolver/IsEmailAvailable.php @@ -0,0 +1,55 @@ +isEmailAvailableDataProvider = $isEmailAvailableDataProvider; + } + + /** + * @inheritdoc + */ + public function resolve( + Field $field, + $context, + ResolveInfo $info, + array $value = null, + array $args = null + ) { + $email = $args['email'] ?? null; + if (!$email) { + throw new GraphQlInputException(__('"Email should be specified')); + } + $isEmailAvailable = $this->isEmailAvailableDataProvider->execute($email); + + return [ + 'is_email_available' => $isEmailAvailable + ]; + } +} diff --git a/app/code/Magento/CustomerGraphQl/etc/schema.graphqls b/app/code/Magento/CustomerGraphQl/etc/schema.graphqls index f4a417fe2f01..139ac80be842 100644 --- a/app/code/Magento/CustomerGraphQl/etc/schema.graphqls +++ b/app/code/Magento/CustomerGraphQl/etc/schema.graphqls @@ -3,6 +3,9 @@ type Query { customer: Customer @resolver(class: "Magento\\CustomerGraphQl\\Model\\Resolver\\Customer") @doc(description: "The customer query returns information about a customer account") + isEmailAvailable ( + email: String! @doc(description: "The new customer email") + ): IsEmailAvailableOutput @resolver(class: "Magento\\CustomerGraphQl\\Model\\Resolver\\IsEmailAvailable") } type Mutation { @@ -126,6 +129,10 @@ type CustomerAddressAttribute { value: String @doc(description: "Attribute value") } +type IsEmailAvailableOutput { + is_email_available: Boolean @doc(description: "Is email availabel value") +} + enum CountryCodeEnum @doc(description: "The list of countries codes") { AF @doc(description: "Afghanistan") AX @doc(description: "Åland Islands") diff --git a/dev/tests/api-functional/testsuite/Magento/GraphQl/Customer/IsEmailAvailableTest.php b/dev/tests/api-functional/testsuite/Magento/GraphQl/Customer/IsEmailAvailableTest.php new file mode 100644 index 000000000000..37693fbba7fe --- /dev/null +++ b/dev/tests/api-functional/testsuite/Magento/GraphQl/Customer/IsEmailAvailableTest.php @@ -0,0 +1,50 @@ +graphQlQuery($query); + + self::assertArrayHasKey('isEmailAvailable', $response); + self::assertArrayHasKey('is_email_available', $response['isEmailAvailable']); + self::assertFalse($response['isEmailAvailable']['is_email_available']); + } + + public function testEmailAvailable() + { + $query = + <<graphQlQuery($query); + + self::assertArrayHasKey('isEmailAvailable', $response); + self::assertArrayHasKey('is_email_available', $response['isEmailAvailable']); + self::assertTrue($response['isEmailAvailable']['is_email_available']); + } +} From a29ecf4196e83723a39127202aa893b51cedb346 Mon Sep 17 00:00:00 2001 From: Vitaliy Boyko Date: Wed, 20 Feb 2019 10:31:30 +0200 Subject: [PATCH 2/2] graphQl-352: removed redundant dataprovider --- .../Customer/IsEmailAvailableDataProvider.php | 40 ------------------- .../Model/Resolver/IsEmailAvailable.php | 14 +++---- 2 files changed, 7 insertions(+), 47 deletions(-) delete mode 100644 app/code/Magento/CustomerGraphQl/Model/Customer/IsEmailAvailableDataProvider.php diff --git a/app/code/Magento/CustomerGraphQl/Model/Customer/IsEmailAvailableDataProvider.php b/app/code/Magento/CustomerGraphQl/Model/Customer/IsEmailAvailableDataProvider.php deleted file mode 100644 index 9ec4ab9377ea..000000000000 --- a/app/code/Magento/CustomerGraphQl/Model/Customer/IsEmailAvailableDataProvider.php +++ /dev/null @@ -1,40 +0,0 @@ -accountManagement = $accountManagement; - } - - /** - * Check is Email available - * - * @param string $email - * @return bool - */ - public function execute(string $email): bool - { - return $this->accountManagement->isEmailAvailable($email); - } -} diff --git a/app/code/Magento/CustomerGraphQl/Model/Resolver/IsEmailAvailable.php b/app/code/Magento/CustomerGraphQl/Model/Resolver/IsEmailAvailable.php index a5edb78e67bf..11ad0f77f894 100644 --- a/app/code/Magento/CustomerGraphQl/Model/Resolver/IsEmailAvailable.php +++ b/app/code/Magento/CustomerGraphQl/Model/Resolver/IsEmailAvailable.php @@ -7,7 +7,7 @@ namespace Magento\CustomerGraphQl\Model\Resolver; -use Magento\CustomerGraphQl\Model\Customer\IsEmailAvailableDataProvider; +use Magento\Customer\Api\AccountManagementInterface; use Magento\Framework\GraphQl\Config\Element\Field; use Magento\Framework\GraphQl\Exception\GraphQlInputException; use Magento\Framework\GraphQl\Query\ResolverInterface; @@ -19,17 +19,17 @@ class IsEmailAvailable implements ResolverInterface { /** - * @var IsEmailAvailableDataProvider + * @var AccountManagementInterface */ - private $isEmailAvailableDataProvider; + private $accountManagement; /** - * @param IsEmailAvailableDataProvider $isEmailAvailableDataProvider + * @param AccountManagementInterface $accountManagement */ public function __construct( - IsEmailAvailableDataProvider $isEmailAvailableDataProvider + AccountManagementInterface $accountManagement ) { - $this->isEmailAvailableDataProvider = $isEmailAvailableDataProvider; + $this->accountManagement = $accountManagement; } /** @@ -46,7 +46,7 @@ public function resolve( if (!$email) { throw new GraphQlInputException(__('"Email should be specified')); } - $isEmailAvailable = $this->isEmailAvailableDataProvider->execute($email); + $isEmailAvailable = $this->accountManagement->isEmailAvailable($email); return [ 'is_email_available' => $isEmailAvailable