389 lines
9.4 KiB
PHP
Executable File
389 lines
9.4 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* Copyright © Magento, Inc. All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
declare(strict_types=1);
|
|
|
|
namespace Magento\GraphQl\Customer;
|
|
|
|
use Magento\Customer\Api\CustomerRepositoryInterface;
|
|
use Magento\Framework\Registry;
|
|
use Magento\TestFramework\Helper\Bootstrap;
|
|
use Magento\TestFramework\TestCase\GraphQlAbstract;
|
|
|
|
/**
|
|
* Test for create customer functionality
|
|
*/
|
|
class CreateCustomerTest extends GraphQlAbstract
|
|
{
|
|
/**
|
|
* @var Registry
|
|
*/
|
|
private $registry;
|
|
|
|
/**
|
|
* @var CustomerRepositoryInterface
|
|
*/
|
|
private $customerRepository;
|
|
|
|
protected function setUp(): void
|
|
{
|
|
parent::setUp();
|
|
|
|
$this->registry = Bootstrap::getObjectManager()->get(Registry::class);
|
|
$this->customerRepository = Bootstrap::getObjectManager()->get(CustomerRepositoryInterface::class);
|
|
}
|
|
|
|
/**
|
|
* @throws \Exception
|
|
*/
|
|
public function testCreateCustomerAccountWithPassword()
|
|
{
|
|
$newFirstname = 'Richard';
|
|
$newLastname = 'Rowe';
|
|
$currentPassword = 'test123#';
|
|
$newEmail = 'new_customer@example.com';
|
|
|
|
$query = <<<QUERY
|
|
mutation {
|
|
createCustomer(
|
|
input: {
|
|
firstname: "{$newFirstname}"
|
|
lastname: "{$newLastname}"
|
|
email: "{$newEmail}"
|
|
password: "{$currentPassword}"
|
|
is_subscribed: true
|
|
}
|
|
) {
|
|
customer {
|
|
id
|
|
firstname
|
|
lastname
|
|
email
|
|
is_subscribed
|
|
}
|
|
}
|
|
}
|
|
QUERY;
|
|
$response = $this->graphQlMutation($query);
|
|
|
|
$this->assertNull($response['createCustomer']['customer']['id']);
|
|
$this->assertEquals($newFirstname, $response['createCustomer']['customer']['firstname']);
|
|
$this->assertEquals($newLastname, $response['createCustomer']['customer']['lastname']);
|
|
$this->assertEquals($newEmail, $response['createCustomer']['customer']['email']);
|
|
$this->assertTrue($response['createCustomer']['customer']['is_subscribed']);
|
|
}
|
|
|
|
/**
|
|
* @throws \Exception
|
|
*/
|
|
public function testCreateCustomerAccountWithoutPassword()
|
|
{
|
|
$newFirstname = 'Richard';
|
|
$newLastname = 'Rowe';
|
|
$newEmail = 'new_customer@example.com';
|
|
|
|
$query = <<<QUERY
|
|
mutation {
|
|
createCustomer(
|
|
input: {
|
|
firstname: "{$newFirstname}"
|
|
lastname: "{$newLastname}"
|
|
email: "{$newEmail}"
|
|
is_subscribed: true
|
|
}
|
|
) {
|
|
customer {
|
|
id
|
|
firstname
|
|
lastname
|
|
email
|
|
is_subscribed
|
|
}
|
|
}
|
|
}
|
|
QUERY;
|
|
$response = $this->graphQlMutation($query);
|
|
|
|
$this->assertEquals($newFirstname, $response['createCustomer']['customer']['firstname']);
|
|
$this->assertEquals($newLastname, $response['createCustomer']['customer']['lastname']);
|
|
$this->assertEquals($newEmail, $response['createCustomer']['customer']['email']);
|
|
$this->assertTrue($response['createCustomer']['customer']['is_subscribed']);
|
|
}
|
|
|
|
/**
|
|
*/
|
|
public function testCreateCustomerIfInputDataIsEmpty()
|
|
{
|
|
$this->expectException(\Exception::class);
|
|
$this->expectExceptionMessage('"input" value should be specified');
|
|
|
|
$query = <<<QUERY
|
|
mutation {
|
|
createCustomer(
|
|
input: {
|
|
|
|
}
|
|
) {
|
|
customer {
|
|
id
|
|
firstname
|
|
lastname
|
|
email
|
|
is_subscribed
|
|
}
|
|
}
|
|
}
|
|
QUERY;
|
|
$this->graphQlMutation($query);
|
|
}
|
|
|
|
/**
|
|
*/
|
|
public function testCreateCustomerIfEmailMissed()
|
|
{
|
|
$this->expectException(\Exception::class);
|
|
$this->expectExceptionMessage('Required parameters are missing: Email');
|
|
|
|
$newFirstname = 'Richard';
|
|
$newLastname = 'Rowe';
|
|
$currentPassword = 'test123#';
|
|
|
|
$query = <<<QUERY
|
|
mutation {
|
|
createCustomer(
|
|
input: {
|
|
firstname: "{$newFirstname}"
|
|
lastname: "{$newLastname}"
|
|
password: "{$currentPassword}"
|
|
is_subscribed: true
|
|
}
|
|
) {
|
|
customer {
|
|
id
|
|
firstname
|
|
lastname
|
|
email
|
|
is_subscribed
|
|
}
|
|
}
|
|
}
|
|
QUERY;
|
|
$this->graphQlMutation($query);
|
|
}
|
|
|
|
/**
|
|
* @dataProvider invalidEmailAddressDataProvider
|
|
*
|
|
* @param string $email
|
|
* @throws \Exception
|
|
*/
|
|
public function testCreateCustomerIfEmailIsNotValid(string $email)
|
|
{
|
|
$firstname = 'Richard';
|
|
$lastname = 'Rowe';
|
|
$password = 'test123#';
|
|
|
|
$query = <<<QUERY
|
|
mutation {
|
|
createCustomer(
|
|
input: {
|
|
firstname: "{$firstname}"
|
|
lastname: "{$lastname}"
|
|
email: "{$email}"
|
|
password: "{$password}"
|
|
is_subscribed: true
|
|
}
|
|
) {
|
|
customer {
|
|
id
|
|
firstname
|
|
lastname
|
|
email
|
|
is_subscribed
|
|
}
|
|
}
|
|
}
|
|
QUERY;
|
|
$this->expectExceptionMessage('"' . $email . '" is not a valid email address.');
|
|
$this->graphQlMutation($query);
|
|
}
|
|
|
|
/**
|
|
* @return array
|
|
*/
|
|
public function invalidEmailAddressDataProvider(): array
|
|
{
|
|
return [
|
|
['plainaddress'],
|
|
['jØrgen@somedomain.com'],
|
|
['#@%^%#$@#$@#.com'],
|
|
['@example.com'],
|
|
['Joe Smith <email@example.com>'],
|
|
['email.example.com'],
|
|
['email@example@example.com'],
|
|
['email@example.com (Joe Smith)'],
|
|
['email@example'],
|
|
['“email”@example.com'],
|
|
];
|
|
}
|
|
|
|
/**
|
|
*/
|
|
public function testCreateCustomerIfPassedAttributeDosNotExistsInCustomerInput()
|
|
{
|
|
$this->expectException(\Exception::class);
|
|
$this->expectExceptionMessage('Field "test123" is not defined by type "CustomerInput".');
|
|
|
|
$newFirstname = 'Richard';
|
|
$newLastname = 'Rowe';
|
|
$currentPassword = 'test123#';
|
|
$newEmail = 'new_customer@example.com';
|
|
|
|
$query = <<<QUERY
|
|
mutation {
|
|
createCustomer(
|
|
input: {
|
|
firstname: "{$newFirstname}"
|
|
lastname: "{$newLastname}"
|
|
test123: "123test123"
|
|
email: "{$newEmail}"
|
|
password: "{$currentPassword}"
|
|
is_subscribed: true
|
|
}
|
|
) {
|
|
customer {
|
|
id
|
|
firstname
|
|
lastname
|
|
email
|
|
is_subscribed
|
|
}
|
|
}
|
|
}
|
|
QUERY;
|
|
$this->graphQlMutation($query);
|
|
}
|
|
|
|
/**
|
|
*/
|
|
public function testCreateCustomerIfNameEmpty()
|
|
{
|
|
$this->expectException(\Exception::class);
|
|
$this->expectExceptionMessage('Required parameters are missing: First Name');
|
|
|
|
$newEmail = 'customer_created' . rand(1, 2000000) . '@example.com';
|
|
$newFirstname = '';
|
|
$newLastname = 'Rowe';
|
|
$currentPassword = 'test123#';
|
|
$query = <<<QUERY
|
|
mutation {
|
|
createCustomer(
|
|
input: {
|
|
email: "{$newEmail}"
|
|
firstname: "{$newFirstname}"
|
|
lastname: "{$newLastname}"
|
|
password: "{$currentPassword}"
|
|
is_subscribed: true
|
|
}
|
|
) {
|
|
customer {
|
|
id
|
|
firstname
|
|
lastname
|
|
email
|
|
is_subscribed
|
|
}
|
|
}
|
|
}
|
|
QUERY;
|
|
$this->graphQlMutation($query);
|
|
}
|
|
|
|
/**
|
|
* @magentoConfigFixture default_store newsletter/general/active 0
|
|
*/
|
|
public function testCreateCustomerSubscribed()
|
|
{
|
|
$newFirstname = 'Richard';
|
|
$newLastname = 'Rowe';
|
|
$newEmail = 'new_customer@example.com';
|
|
|
|
$query = <<<QUERY
|
|
mutation {
|
|
createCustomer(
|
|
input: {
|
|
firstname: "{$newFirstname}"
|
|
lastname: "{$newLastname}"
|
|
email: "{$newEmail}"
|
|
is_subscribed: true
|
|
}
|
|
) {
|
|
customer {
|
|
email
|
|
is_subscribed
|
|
}
|
|
}
|
|
}
|
|
QUERY;
|
|
|
|
$response = $this->graphQlMutation($query);
|
|
|
|
$this->assertFalse($response['createCustomer']['customer']['is_subscribed']);
|
|
}
|
|
|
|
/**
|
|
* @magentoApiDataFixture Magento/Customer/_files/customer.php
|
|
*/
|
|
public function testCreateCustomerIfCustomerWithProvidedEmailAlreadyExists()
|
|
{
|
|
$this->expectException(\Exception::class);
|
|
$this->expectExceptionMessage(
|
|
'A customer with the same email address already exists in an associated website.'
|
|
);
|
|
|
|
$existedEmail = 'customer@example.com';
|
|
$password = 'test123#';
|
|
$firstname = 'John';
|
|
$lastname = 'Smith';
|
|
|
|
$query = <<<QUERY
|
|
mutation {
|
|
createCustomer(
|
|
input: {
|
|
email: "{$existedEmail}"
|
|
password: "{$password}"
|
|
firstname: "{$firstname}"
|
|
lastname: "{$lastname}"
|
|
}
|
|
) {
|
|
customer {
|
|
firstname
|
|
lastname
|
|
email
|
|
}
|
|
}
|
|
}
|
|
QUERY;
|
|
$this->graphQlMutation($query);
|
|
}
|
|
|
|
protected function tearDown(): void
|
|
{
|
|
$newEmail = 'new_customer@example.com';
|
|
try {
|
|
$customer = $this->customerRepository->get($newEmail);
|
|
} catch (\Exception $exception) {
|
|
return;
|
|
}
|
|
|
|
$this->registry->unregister('isSecureArea');
|
|
$this->registry->register('isSecureArea', true);
|
|
$this->customerRepository->delete($customer);
|
|
$this->registry->unregister('isSecureArea');
|
|
$this->registry->register('isSecureArea', false);
|
|
parent::tearDown();
|
|
}
|
|
}
|