logger = Bootstrap::getObjectManager()->get(Logger::class); } /** * Verify customer token with valid credentials * * @magentoApiDataFixture Magento/Customer/_files/customer.php */ public function testGenerateCustomerValidToken(): void { $mutation = $this->getQuery(); $response = $this->graphQlMutation($mutation); $this->assertArrayHasKey('generateCustomerToken', $response); $this->assertIsArray($response['generateCustomerToken']); } /** * Test customer with invalid data. * * @magentoApiDataFixture Magento/Customer/_files/customer.php * * @dataProvider dataProviderInvalidCustomerInfo * @param string $email * @param string $password * @param string $message */ public function testGenerateCustomerTokenInvalidData(string $email, string $password, string $message): void { $this->expectException(\Exception::class); $mutation = $this->getQuery($email, $password); $this->expectExceptionMessage($message); $this->graphQlMutation($mutation); } /** * Test customer token regeneration. * * @magentoApiDataFixture Magento/Customer/_files/customer.php */ public function testRegenerateCustomerToken(): void { $mutation = $this->getQuery(); $response1 = $this->graphQlMutation($mutation); $token1 = $response1['generateCustomerToken']['token']; sleep(2); $response2 = $this->graphQlMutation($mutation); $token2 = $response2['generateCustomerToken']['token']; $this->assertNotEquals($token1, $token2, 'Tokens should not be identical!'); } /** * @return array */ public function dataProviderInvalidCustomerInfo(): array { return [ 'invalid_email' => [ 'invalid_email@example.com', 'password', 'The account sign-in was incorrect or your account is disabled temporarily. ' . 'Please wait and try again later.' ], 'empty_email' => [ '', 'password', 'Specify the "email" value.' ], 'invalid_password' => [ 'customer@example.com', 'invalid_password', 'The account sign-in was incorrect or your account is disabled temporarily. ' . 'Please wait and try again later.' ], 'empty_password' => [ 'customer@example.com', '', 'Specify the "password" value.' ] ]; } /** * @param string $email * @param string $password * @return string */ private function getQuery(string $email = 'customer@example.com', string $password = 'password'): string { return <<getQuery($email, $password); $this->expectException(\Exception::class); $this->expectExceptionMessage('GraphQL response contains errors: Specify the "email" value.'); $this->graphQlMutation($mutation); } /** * Verify customer with empty password */ public function testGenerateCustomerTokenWithEmptyPassword(): void { $email = 'customer@example.com'; $password = ''; $mutation = $this->getQuery($email, $password); $this->expectException(\Exception::class); $this->expectExceptionMessage('GraphQL response contains errors: Specify the "password" value.'); $this->graphQlMutation($mutation); } /** * Verify customer log after generate customer token * * @magentoApiDataFixture Magento/Customer/_files/customer.php */ public function testCustomerLogAfterGenerateCustomerToken(): void { $response = $this->graphQlMutation($this->getQuery()); $this->assertArrayHasKey('generateCustomerToken', $response); $this->assertIsArray($response['generateCustomerToken']); /** @var Log $log */ $log = $this->logger->get(1); $this->assertNotEmpty($log->getLastLoginAt()); } /** * Ensure that customer log record is deleted. * * @return void */ protected function tearDown(): void { if ($this->logger->get(1)->getLastLoginAt()) { /** @var ResourceConnection $resource */ $resource = Bootstrap::getObjectManager()->get(ResourceConnection::class); /** @var AdapterInterface $connection */ $connection = $resource->getConnection(ResourceConnection::DEFAULT_CONNECTION); $connection->delete( $resource->getTableName('customer_log'), ['customer_id' => 1] ); } parent::tearDown(); } }