transportBuilderMock = $this->_objectManager->get(TransportBuilderMock::class); } /** * Login the user * * @param string $customerId Customer to mark as logged in for the session * @return void */ protected function login($customerId) { /** @var \Magento\Customer\Model\Session $session */ $session = Bootstrap::getObjectManager() ->get(\Magento\Customer\Model\Session::class); $session->loginById($customerId); } /** * @magentoDataFixture Magento/Customer/_files/customer.php * @magentoDataFixture Magento/Customer/_files/customer_address.php */ public function testIndexAction() { $this->login(1); $this->dispatch('customer/account/index'); $body = $this->getResponse()->getBody(); $this->assertContains('Green str, 67', $body); } /** * @magentoDataFixture Magento/Customer/_files/customer_no_password.php */ public function testLoginWithIncorrectPassword() { $expectedMessage = 'The account sign-in was incorrect or your account is disabled temporarily. ' . 'Please wait and try again later.'; $this->getRequest() ->setMethod('POST') ->setPostValue( [ 'login' => [ 'username' => 'customer@example.com', 'password' => '123123q' ] ] ); $this->dispatch('customer/account/loginPost'); $this->assertRedirect($this->stringContains('customer/account/login')); $this->assertSessionMessages( $this->equalTo( [ $expectedMessage ] ) ); } /** * Test sign up form displaying. */ public function testCreateAction() { $this->dispatch('customer/account/create'); $body = $this->getResponse()->getBody(); $this->assertRegExp('~]*id="firstname"~', $body); $this->assertRegExp('~]*id="lastname"~', $body); $this->assertRegExp('~]*id="is_subscribed"~', $body); $this->assertRegExp('~]*id="email_address"~', $body); $this->assertRegExp('~]*id="password"~', $body); $this->assertRegExp('~]*id="password-confirmation"~', $body); } /** * @magentoDataFixture Magento/Customer/_files/customer.php */ public function testLogoutAction() { $this->login(1); $this->dispatch('customer/account/logout'); $this->assertRedirect($this->stringContains('customer/account/logoutSuccess')); } /** * Test that forgot password email message displays special characters correctly. * * @codingStandardsIgnoreStart * @magentoConfigFixture current_store customer/password/limit_password_reset_requests_method 0 * @magentoConfigFixture current_store customer/password/forgot_email_template customer_password_forgot_email_template * @magentoConfigFixture current_store customer/password/forgot_email_identity support * @magentoConfigFixture current_store general/store_information/name Test special' characters * @magentoConfigFixture current_store customer/captcha/enable 0 * @magentoDataFixture Magento/Customer/_files/customer.php * @codingStandardsIgnoreEnd */ public function testForgotPasswordEmailMessageWithSpecialCharacters() { $email = 'customer@example.com'; $this->getRequest()->setPostValue(['email' => $email]); $this->getRequest()->setMethod(HttpRequest::METHOD_POST); $this->dispatch('customer/account/forgotPasswordPost'); $this->assertRedirect($this->stringContains('customer/account/')); $subject = $this->transportBuilderMock->getSentMessage()->getSubject(); $this->assertContains( 'Test special\' characters', $subject ); } /** * @magentoDataFixture Magento/Customer/_files/customer.php */ public function testCreatepasswordActionWithDirectLink() { /** @var \Magento\Customer\Model\Customer $customer */ $customer = Bootstrap::getObjectManager() ->create(\Magento\Customer\Model\Customer::class)->load(1); $token = Bootstrap::getObjectManager()->get(\Magento\Framework\Math\Random::class) ->getUniqueHash(); $customer->changeResetPasswordLinkToken($token); $customer->save(); $this->getRequest()->setParam('token', $token); $this->dispatch('customer/account/createPassword'); $response = $this->getResponse(); $this->assertEquals(302, $response->getHttpResponseCode()); $text = $response->getBody(); $this->assertFalse((bool)preg_match('/' . $token . '/m', $text)); $this->assertRedirect( $this->stringContains('customer/account/createpassword') ); /** @var Session $customer */ $session = Bootstrap::getObjectManager()->get(Session::class); $this->assertEquals($token, $session->getRpToken()); $this->assertNotContains($token, $response->getHeader('Location')->getFieldValue()); } /** * @magentoDataFixture Magento/Customer/_files/customer.php */ public function testCreatepasswordActionWithSession() { /** @var \Magento\Customer\Model\Customer $customer */ $customer = Bootstrap::getObjectManager() ->create(\Magento\Customer\Model\Customer::class)->load(1); $token = Bootstrap::getObjectManager()->get(\Magento\Framework\Math\Random::class) ->getUniqueHash(); $customer->changeResetPasswordLinkToken($token); $customer->save(); /** @var \Magento\Customer\Model\Session $customer */ $session = Bootstrap::getObjectManager()->get(\Magento\Customer\Model\Session::class); $session->setRpToken($token); $session->setRpCustomerId($customer->getId()); $this->dispatch('customer/account/createPassword'); $response = $this->getResponse(); $text = $response->getBody(); $this->assertTrue((bool)preg_match('/' . $token . '/m', $text)); } /** * @magentoDataFixture Magento/Customer/_files/customer.php */ public function testCreatepasswordActionInvalidToken() { /** @var \Magento\Customer\Model\Customer $customer */ $customer = Bootstrap::getObjectManager() ->create(\Magento\Customer\Model\Customer::class)->load(1); $token = Bootstrap::getObjectManager()->get(\Magento\Framework\Math\Random::class) ->getUniqueHash(); $customer->changeResetPasswordLinkToken($token); $customer->save(); $this->getRequest()->setParam('token', 'INVALIDTOKEN'); $this->getRequest()->setParam('id', $customer->getId()); $this->dispatch('customer/account/createPassword'); // should be redirected to forgotpassword page $response = $this->getResponse(); $this->assertEquals(302, $response->getHttpResponseCode()); $this->assertContains('customer/account/forgotpassword', $response->getHeader('Location')->getFieldValue()); } /** * @magentoDataFixture Magento/Customer/_files/customer.php */ public function testConfirmActionAlreadyActive() { /** @var \Magento\Customer\Model\Customer $customer */ $customer = Bootstrap::getObjectManager() ->create(\Magento\Customer\Model\Customer::class)->load(1); $this->getRequest()->setParam('key', 'abc'); $this->getRequest()->setParam('id', $customer->getId()); $this->dispatch('customer/account/confirm'); $this->getResponse()->getBody(); } /** * Tests that without form key user account won't be created * and user will be redirected on account creation page again. */ public function testNoFormKeyCreatePostAction() { $this->fillRequestWithAccountData('test1@email.com'); $this->getRequest()->setPostValue('form_key', null); $this->dispatch('customer/account/createPost'); $this->assertNull($this->getCustomerByEmail('test1@email.com')); $this->assertRedirect($this->stringEndsWith('customer/account/create/')); } /** * @magentoDbIsolation enabled * @magentoAppIsolation enabled * @magentoDataFixture Magento/Customer/_files/customer_confirmation_config_disable.php */ public function testNoConfirmCreatePostAction() { $this->fillRequestWithAccountDataAndFormKey('test1@email.com'); $this->dispatch('customer/account/createPost'); $this->assertRedirect($this->stringEndsWith('customer/account/')); $this->assertSessionMessages( $this->equalTo(['Thank you for registering with Main Website Store.']), MessageInterface::TYPE_SUCCESS ); } /** * @magentoDbIsolation enabled * @magentoAppIsolation enabled * @magentoDataFixture Magento/Customer/_files/customer_confirmation_config_enable.php */ public function testWithConfirmCreatePostAction() { $this->fillRequestWithAccountDataAndFormKey('test2@email.com'); $this->dispatch('customer/account/createPost'); $this->assertRedirect($this->stringContains('customer/account/index/')); $this->assertSessionMessages( $this->equalTo([ 'You must confirm your account. Please check your email for the confirmation link or ' . 'click here for a new link.' ]), MessageInterface::TYPE_SUCCESS ); } /** * @magentoDataFixture Magento/Customer/_files/customer.php */ public function testExistingEmailCreatePostAction() { $this->fillRequestWithAccountDataAndFormKey('customer@example.com'); $this->dispatch('customer/account/createPost'); $this->assertRedirect($this->stringContains('customer/account/create/')); $this->assertSessionMessages( $this->equalTo(['There is already an account with this email address. ' . 'If you are sure that it is your email address, ' . 'click here' . ' to get your password and access your account.', ]), MessageInterface::TYPE_ERROR ); } /** * @magentoDataFixture Magento/Customer/_files/inactive_customer.php */ public function testInactiveUserConfirmationAction() { $this->getRequest() ->setMethod('POST') ->setPostValue(['email' => 'customer@needAconfirmation.com']); $this->dispatch('customer/account/confirmation'); $this->assertRedirect($this->stringContains('customer/account/index')); $this->assertSessionMessages( $this->equalTo(['Please check your email for confirmation key.']), MessageInterface::TYPE_SUCCESS ); } /** * @magentoDataFixture Magento/Customer/_files/customer.php */ public function testActiveUserConfirmationAction() { $this->getRequest() ->setMethod('POST') ->setPostValue([ 'email' => 'customer@example.com', ]); $this->dispatch('customer/account/confirmation'); $this->assertRedirect($this->stringContains('customer/account/index')); $this->assertSessionMessages( $this->equalTo(['This email does not require confirmation.']), MessageInterface::TYPE_SUCCESS ); } /** * @codingStandardsIgnoreStart * @magentoConfigFixture current_store customer/password/limit_password_reset_requests_method 0 * @magentoConfigFixture current_store customer/password/forgot_email_template customer_password_forgot_email_template * @magentoConfigFixture current_store customer/password/forgot_email_identity support * @magentoConfigFixture current_store customer/captcha/enable 0 * @magentoDataFixture Magento/Customer/_files/customer.php * @codingStandardsIgnoreEnd */ public function testForgotPasswordPostAction() { $email = 'customer@example.com'; $this->getRequest()->setMethod(HttpRequest::METHOD_POST); $this->getRequest()->setPostValue(['email' => $email]); $this->dispatch('customer/account/forgotPasswordPost'); $this->assertRedirect($this->stringContains('customer/account/')); $message = __( 'If there is an account associated with %1 you will receive an email with a link to reset your password.', $email ); $this->assertSessionMessages( $this->equalTo([$message]), MessageInterface::TYPE_SUCCESS ); } /** * @magentoConfigFixture current_store customer/captcha/enable 0 */ public function testForgotPasswordPostWithBadEmailAction() { $this->getRequest()->setMethod(HttpRequest::METHOD_POST); $this->getRequest() ->setPostValue([ 'email' => 'bad@email', ]); $this->dispatch('customer/account/forgotPasswordPost'); $this->assertRedirect($this->stringContains('customer/account/forgotpassword')); $this->assertSessionMessages( $this->equalTo(['The email address is incorrect. Verify the email address and try again.']), MessageInterface::TYPE_ERROR ); } /** * @magentoDataFixture Magento/Customer/_files/customer.php */ public function testResetPasswordPostNoTokenAction() { $this->getRequest() ->setParam('id', 1) ->setParam('token', '8ed8677e6c79e68b94e61658bd756ea5') ->setMethod('POST') ->setPostValue([ 'password' => 'new-password', 'password_confirmation' => 'new-password', ]); $this->dispatch('customer/account/resetPasswordPost'); $this->assertRedirect($this->stringContains('customer/account/')); $this->assertSessionMessages( $this->equalTo(['Something went wrong while saving the new password.']), MessageInterface::TYPE_ERROR ); } /** * @magentoDataFixture Magento/Customer/_files/customer_rp_token.php * @magentoConfigFixture customer/password/reset_link_expiration_period 10 */ public function testResetPasswordPostAction() { $this->getRequest() ->setQueryValue('id', 1) ->setQueryValue('token', '8ed8677e6c79e68b94e61658bd756ea5') ->setMethod('POST') ->setPostValue([ 'password' => 'new-Password1', 'password_confirmation' => 'new-Password1', ]); $this->dispatch('customer/account/resetPasswordPost'); $this->assertRedirect($this->stringContains('customer/account/login')); $this->assertSessionMessages( $this->equalTo(['You updated your password.']), MessageInterface::TYPE_SUCCESS ); } /** * @magentoDataFixture Magento/Customer/_files/customer.php */ public function testEditAction() { $this->login(1); $this->dispatch('customer/account/edit'); $body = $this->getResponse()->getBody(); $this->assertEquals(200, $this->getResponse()->getHttpResponseCode(), $body); $this->assertContains('