customerTokenService = Bootstrap::getObjectManager()->get(CustomerTokenServiceInterface::class); $this->customerAuthUpdate = Bootstrap::getObjectManager()->get(CustomerAuthUpdate::class); $this->lockCustomer = Bootstrap::getObjectManager()->get(LockCustomer::class); } /** * @magentoApiDataFixture Magento/Customer/_files/customer.php */ public function testUpdateCustomer() { $currentEmail = 'customer@example.com'; $currentPassword = 'password'; $newPrefix = 'Dr'; $newFirstname = 'Richard'; $newMiddlename = 'Riley'; $newLastname = 'Rowe'; $newSuffix = 'III'; $newDob = '3/11/1972'; $newTaxVat = 'GQL1234567'; $newGender = 2; $newEmail = 'customer_updated@example.com'; $query = <<graphQlMutation( $query, [], '', $this->getCustomerAuthHeaders($currentEmail, $currentPassword) ); $this->assertEquals($newPrefix, $response['updateCustomer']['customer']['prefix']); $this->assertEquals($newFirstname, $response['updateCustomer']['customer']['firstname']); $this->assertEquals($newMiddlename, $response['updateCustomer']['customer']['middlename']); $this->assertEquals($newLastname, $response['updateCustomer']['customer']['lastname']); $this->assertEquals($newSuffix, $response['updateCustomer']['customer']['suffix']); $this->assertEquals($newDob, $response['updateCustomer']['customer']['date_of_birth']); $this->assertEquals($newTaxVat, $response['updateCustomer']['customer']['taxvat']); $this->assertEquals($newEmail, $response['updateCustomer']['customer']['email']); $this->assertEquals($newGender, $response['updateCustomer']['customer']['gender']); } /** * @magentoApiDataFixture Magento/Customer/_files/customer.php */ public function testUpdateCustomerIfInputDataIsEmpty() { $this->expectException(Exception::class); $this->expectExceptionMessage('"input" value should be specified'); $currentEmail = 'customer@example.com'; $currentPassword = 'password'; $query = <<graphQlMutation($query, [], '', $this->getCustomerAuthHeaders($currentEmail, $currentPassword)); } /** */ public function testUpdateCustomerIfUserIsNotAuthorized() { $this->expectException(Exception::class); $this->expectExceptionMessage('The current customer isn\'t authorized.'); $newFirstname = 'Richard'; $query = <<graphQlMutation($query); } /** * @magentoApiDataFixture Magento/Customer/_files/customer.php */ public function testUpdateCustomerIfAccountIsLocked() { $this->expectException(Exception::class); $this->expectExceptionMessage('The account is locked.'); $this->lockCustomer->execute(1); $currentEmail = 'customer@example.com'; $currentPassword = 'password'; $newFirstname = 'Richard'; $query = <<graphQlMutation($query, [], '', $this->getCustomerAuthHeaders($currentEmail, $currentPassword)); } /** * @magentoApiDataFixture Magento/Customer/_files/customer.php */ public function testUpdateEmailIfPasswordIsMissed() { $this->expectException(Exception::class); $this->expectExceptionMessage('Provide the current "password" to change "email".'); $currentEmail = 'customer@example.com'; $currentPassword = 'password'; $newEmail = 'customer_updated@example.com'; $query = <<graphQlMutation($query, [], '', $this->getCustomerAuthHeaders($currentEmail, $currentPassword)); } /** * @magentoApiDataFixture Magento/Customer/_files/customer.php */ public function testUpdateEmailIfPasswordIsInvalid() { $this->expectException(Exception::class); $this->expectExceptionMessage('Invalid login or password.'); $currentEmail = 'customer@example.com'; $currentPassword = 'password'; $invalidPassword = 'invalid_password'; $newEmail = 'customer_updated@example.com'; $query = <<graphQlMutation($query, [], '', $this->getCustomerAuthHeaders($currentEmail, $currentPassword)); } /** * @magentoApiDataFixture Magento/Customer/_files/two_customers.php */ public function testUpdateEmailIfEmailAlreadyExists() { $this->expectException(Exception::class); $this->expectExceptionMessage( 'A customer with the same email address already exists in an associated website.' ); $currentEmail = 'customer@example.com'; $currentPassword = 'password'; $existedEmail = 'customer_two@example.com'; $firstname = 'Richard'; $lastname = 'Rowe'; $query = <<graphQlMutation($query, [], '', $this->getCustomerAuthHeaders($currentEmail, $currentPassword)); } /** * @magentoApiDataFixture Magento/Customer/_files/customer.php */ public function testUpdateEmailIfEmailIsInvalid() { $currentEmail = 'customer@example.com'; $currentPassword = 'password'; $invalidEmail = 'customer.example.com'; $query = <<expectException(Exception::class); $this->expectExceptionMessage('"' . $invalidEmail . '" is not a valid email address.'); $this->graphQlMutation($query, [], '', $this->getCustomerAuthHeaders($currentEmail, $currentPassword)); } /** * @magentoApiDataFixture Magento/Customer/_files/customer.php */ public function testEmptyCustomerName() { $this->expectException(Exception::class); $this->expectExceptionMessage('Required parameters are missing: First Name'); $currentEmail = 'customer@example.com'; $currentPassword = 'password'; $query = <<graphQlMutation($query, [], '', $this->getCustomerAuthHeaders($currentEmail, $currentPassword)); } /** * @magentoApiDataFixture Magento/Customer/_files/customer.php */ public function testEmptyCustomerLastName() { $query = <<expectException(Exception::class); $this->expectExceptionMessage('Required parameters are missing: Last Name'); $this->graphQlMutation($query, [], '', $this->getCustomerAuthHeaders('customer@example.com', 'password')); } /** * @magentoApiDataFixture Magento/Customer/_files/customer.php */ public function testUpdateCustomerWithIncorrectGender() { $gender = 5; $this->expectException(Exception::class); $this->expectExceptionMessage('"' . $gender . '" is not a valid gender value.'); $query = <<graphQlMutation($query, [], '', $this->getCustomerAuthHeaders('customer@example.com', 'password')); } /** * @magentoApiDataFixture Magento/Customer/_files/customer.php */ public function testUpdateCustomerIfDobIsInvalid() { $invalidDob = 'bla-bla-bla'; $query = <<expectException(Exception::class); $this->expectExceptionMessage('Invalid date'); $this->graphQlMutation($query, [], '', $this->getCustomerAuthHeaders('customer@example.com', 'password')); } /** * @param string $email * @param string $password * @return array * @throws AuthenticationException */ private function getCustomerAuthHeaders(string $email, string $password): array { $customerToken = $this->customerTokenService->createCustomerAccessToken($email, $password); return ['Authorization' => 'Bearer ' . $customerToken]; } }