123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\User\Controller\Adminhtml;
- use Magento\TestFramework\Mail\Template\TransportBuilderMock;
- use Magento\TestFramework\Helper\Bootstrap;
- /**
- * Test class for \Magento\User\Controller\Adminhtml\Auth
- *
- * @magentoAppArea adminhtml
- */
- class AuthTest extends \Magento\TestFramework\TestCase\AbstractBackendController
- {
- /**
- * Test form existence
- * @covers \Magento\User\Controller\Adminhtml\Auth\Forgotpassword::execute
- */
- public function testFormForgotpasswordAction()
- {
- $this->dispatch('backend/admin/auth/forgotpassword');
- $expected = 'Password Help';
- $this->assertContains($expected, $this->getResponse()->getBody());
- }
- /**
- * Test redirection to startup page after success password recovering posting
- *
- * @covers \Magento\User\Controller\Adminhtml\Auth\Forgotpassword::execute
- * @magentoDbIsolation enabled
- */
- public function testForgotpasswordAction()
- {
- $this->getRequest()->setPostValue('email', 'test@test.com');
- $this->dispatch('backend/admin/auth/forgotpassword');
- $this->assertRedirect(
- $this->equalTo(
- Bootstrap::getObjectManager()->get(
- \Magento\Backend\Helper\Data::class
- )->getHomePageUrl()
- )
- );
- }
- /**
- * Test email sending for forgotPassword action
- *
- * @magentoAdminConfigFixture admin/emails/forgot_email_template admin_emails_forgot_email_template
- * @magentoAdminConfigFixture admin/emails/forgot_email_identity general
- * @magentoDataFixture Magento/User/_files/user_with_role.php
- */
- public function testEmailSendForgotPasswordAction()
- {
- /** @var TransportBuilderMock $transportMock */
- $transportMock = Bootstrap::getObjectManager()->get(
- TransportBuilderMock::class
- );
- $this->getRequest()->setPostValue('email', 'adminUser@example.com');
- $this->dispatch('backend/admin/auth/forgotpassword');
- $this->assertRedirect(
- $this->equalTo(
- Bootstrap::getObjectManager()->get(
- \Magento\Backend\Helper\Data::class
- )->getHomePageUrl()
- )
- );
- $message = $transportMock->getSentMessage();
- $this->assertNotEmpty($message);
- $this->assertEquals(
- __('Password Reset Confirmation for %1', ['John Doe'])->render(),
- $message->getSubject()
- );
- }
- /**
- * Test reset password action
- *
- * @covers \Magento\User\Controller\Adminhtml\Auth\ResetPassword::execute
- * @covers \Magento\User\Controller\Adminhtml\Auth\ResetPassword::_validateResetPasswordLinkToken
- * @magentoDataFixture Magento/User/_files/dummy_user.php
- */
- public function testResetPasswordAction()
- {
- /** @var $user \Magento\User\Model\User */
- $user = Bootstrap::getObjectManager()->create(
- \Magento\User\Model\User::class
- )->loadByUsername(
- 'dummy_username'
- );
- $this->assertNotEmpty($user->getId(), 'Broken fixture');
- $resetPasswordToken = Bootstrap::getObjectManager()->get(
- \Magento\User\Helper\Data::class
- )->generateResetPasswordLinkToken();
- $user->changeResetPasswordLinkToken($resetPasswordToken);
- $user->save();
- $this->getRequest()->setQueryValue('token', $resetPasswordToken)->setQueryValue('id', $user->getId());
- $this->dispatch('backend/admin/auth/resetpassword');
- $this->assertEquals('adminhtml', $this->getRequest()->getRouteName());
- $this->assertEquals('auth', $this->getRequest()->getControllerName());
- $this->assertEquals('resetpassword', $this->getRequest()->getActionName());
- $this->assertTrue((bool)strpos($this->getResponse()->getBody(), $resetPasswordToken));
- }
- /**
- * @covers \Magento\User\Controller\Adminhtml\Auth\ResetPassword::execute
- * @covers \Magento\User\Controller\Adminhtml\Auth\ResetPassword::_validateResetPasswordLinkToken
- */
- public function testResetPasswordActionWithDummyToken()
- {
- $this->getRequest()->setQueryValue('token', 'dummy')->setQueryValue('id', 1);
- $this->dispatch('backend/admin/auth/resetpassword');
- $this->assertSessionMessages(
- $this->equalTo(['Your password reset link has expired.']),
- \Magento\Framework\Message\MessageInterface::TYPE_ERROR
- );
- $this->assertRedirect();
- }
- /**
- * @dataProvider resetPasswordDataProvider
- * @covers \Magento\User\Controller\Adminhtml\Auth\ResetPasswordPost::execute
- * @covers \Magento\User\Controller\Adminhtml\Auth\ResetPasswordPost::_validateResetPasswordLinkToken
- * @magentoDataFixture Magento/User/_files/dummy_user.php
- */
- public function testResetPasswordPostAction($password, $passwordConfirmation, $isPasswordChanged)
- {
- $objectManager = Bootstrap::getObjectManager();
- /** @var $user \Magento\User\Model\User */
- $user = $objectManager->create(\Magento\User\Model\User::class);
- $user->loadByUsername('dummy_username');
- $this->assertNotEmpty($user->getId(), 'Broken fixture');
- /** @var \Magento\User\Helper\Data $helper */
- $helper = $objectManager->get(\Magento\User\Helper\Data::class);
- $resetPasswordToken = $helper->generateResetPasswordLinkToken();
- $user->changeResetPasswordLinkToken($resetPasswordToken);
- $user->save();
- $oldPassword = $user->getPassword();
- $this->getRequest()->setQueryValue(
- 'token',
- $resetPasswordToken
- )->setQueryValue(
- 'id',
- $user->getId()
- )->setPostValue(
- 'password',
- $password
- )->setPostValue(
- 'confirmation',
- $passwordConfirmation
- );
- $this->dispatch('backend/admin/auth/resetpasswordpost');
- /** @var \Magento\Backend\Helper\Data $backendHelper */
- $backendHelper = $objectManager->get(\Magento\Backend\Helper\Data::class);
- if ($isPasswordChanged) {
- $this->assertRedirect($this->equalTo($backendHelper->getHomePageUrl()));
- } else {
- $this->assertRedirect(
- $this->stringContains('backend/admin/auth/resetpassword')
- );
- }
- /** @var $user \Magento\User\Model\User */
- $user = $objectManager->create(\Magento\User\Model\User::class);
- $user->loadByUsername('dummy_username');
- if ($isPasswordChanged) {
- /** @var \Magento\Framework\Encryption\EncryptorInterface $encryptor */
- $encryptor = $objectManager->get(\Magento\Framework\Encryption\EncryptorInterface::class);
- $this->assertTrue($encryptor->validateHash($password, $user->getPassword()));
- } else {
- $this->assertEquals($oldPassword, $user->getPassword());
- }
- }
- public function resetPasswordDataProvider()
- {
- $password = uniqid('123q');
- return [
- [$password, $password, true],
- [$password, '', false],
- [$password, $password . '123', false],
- ['', '', false],
- ['', $password, false]
- ];
- }
- /**
- * @covers \Magento\User\Controller\Adminhtml\Auth\ResetPasswordPost::execute
- * @covers \Magento\User\Controller\Adminhtml\Auth\ResetPasswordPost::_validateResetPasswordLinkToken
- * @magentoDataFixture Magento/User/_files/dummy_user.php
- */
- public function testResetPasswordPostActionWithDummyToken()
- {
- $this->getRequest()->setQueryValue('token', 'dummy')->setQueryValue('id', 1);
- $this->dispatch('backend/admin/auth/resetpasswordpost');
- $this->assertSessionMessages(
- $this->equalTo(['Your password reset link has expired.']),
- \Magento\Framework\Message\MessageInterface::TYPE_ERROR
- );
- $objectManager = Bootstrap::getObjectManager();
- /** @var \Magento\Backend\Helper\Data $backendHelper */
- $backendHelper = $objectManager->get(\Magento\Backend\Helper\Data::class);
- $this->assertRedirect($this->equalTo($backendHelper->getHomePageUrl()));
- }
- /**
- * @covers \Magento\User\Controller\Adminhtml\Auth\ResetPasswordPost::execute
- * @covers \Magento\User\Controller\Adminhtml\Auth\ResetPasswordPost::_validateResetPasswordLinkToken
- * @magentoDataFixture Magento/User/_files/dummy_user.php
- */
- public function testResetPasswordPostActionWithInvalidPassword()
- {
- $objectManager = Bootstrap::getObjectManager();
- $user = $objectManager->create(\Magento\User\Model\User::class);
- $user->loadByUsername('dummy_username');
- $resetPasswordToken = null;
- if ($user->getId()) {
- /** @var \Magento\User\Helper\Data $userHelper */
- $userHelper = $objectManager->get(\Magento\User\Helper\Data::class);
- $resetPasswordToken = $userHelper->generateResetPasswordLinkToken();
- $user->changeResetPasswordLinkToken($resetPasswordToken);
- $user->save();
- }
- $newDummyPassword = 'new_dummy_password2';
- $this->getRequest()->setQueryValue(
- 'token',
- $resetPasswordToken
- )->setQueryValue(
- 'id',
- $user->getId()
- )->setPostValue(
- 'password',
- $newDummyPassword
- )->setPostValue(
- 'confirmation',
- 'invalid'
- );
- $this->dispatch('backend/admin/auth/resetpasswordpost');
- $this->assertSessionMessages(
- $this->equalTo(['Your password confirmation must match your password.']),
- \Magento\Framework\Message\MessageInterface::TYPE_ERROR
- );
- $this->assertRedirect();
- }
- /**
- * Prepare email mock to test emails
- *
- * @param int $occurrenceNumber
- * @param string $templateId
- * @param string $sender
- * @return \PHPUnit_Framework_MockObject_MockObject
- */
- protected function prepareEmailMock($occurrenceNumber, $templateId, $sender)
- {
- $transportMock = $this->getMockBuilder(\Magento\Framework\Mail\TransportInterface::class)
- ->setMethods(['sendMessage'])
- ->getMockForAbstractClass();
- $transportMock->expects($this->exactly($occurrenceNumber))
- ->method('sendMessage');
- $transportBuilderMock = $this->getMockBuilder(\Magento\Framework\Mail\Template\TransportBuilder::class)
- ->disableOriginalConstructor()
- ->setMethods(
- [
- 'setTemplateModel',
- 'addTo',
- 'setFrom',
- 'setTemplateIdentifier',
- 'setTemplateVars',
- 'setTemplateOptions',
- 'getTransport'
- ]
- )
- ->getMock();
- $transportBuilderMock->method('setTemplateIdentifier')
- ->with($templateId)
- ->willReturnSelf();
- $transportBuilderMock->method('setTemplateModel')
- ->with(\Magento\Email\Model\BackendTemplate::class)
- ->willReturnSelf();
- $transportBuilderMock->method('setTemplateOptions')
- ->willReturnSelf();
- $transportBuilderMock->method('setTemplateVars')
- ->willReturnSelf();
- $transportBuilderMock->method('setFrom')
- ->with($sender)
- ->willReturnSelf();
- $transportBuilderMock->method('addTo')
- ->willReturnSelf();
- $transportBuilderMock->expects($this->exactly($occurrenceNumber))
- ->method('getTransport')
- ->willReturn($transportMock);
- return $transportBuilderMock;
- }
- /**
- * Add mocked object to environment
- *
- * @param \PHPUnit_Framework_MockObject_MockObject $transportBuilderMock
- * @param string $originalClassName
- */
- protected function addMockToClass(
- \PHPUnit_Framework_MockObject_MockObject $transportBuilderMock,
- $originalClassName
- ) {
- $userMock = $this->_objectManager->create(
- $originalClassName,
- ['transportBuilder' => $transportBuilderMock]
- );
- $factoryMock = $this->getMockBuilder(\Magento\User\Model\UserFactory::class)
- ->disableOriginalConstructor()
- ->setMethods(
- [
- 'create'
- ]
- )
- ->getMock();
- $factoryMock->method('create')
- ->willReturn($userMock);
- $this->_objectManager->addSharedInstance(
- $factoryMock,
- \Magento\User\Model\UserFactory::class
- );
- }
- }
|