| Current Path : /home/rtorresani/www/vendor/magento/module-user/Test/Unit/Observer/Backend/ |
| Current File : //home/rtorresani/www/vendor/magento/module-user/Test/Unit/Observer/Backend/AuthObserverTest.php |
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);
namespace Magento\User\Test\Unit\Observer\Backend;
use Magento\Backend\App\ConfigInterface;
use Magento\Backend\Model\Auth\Session;
use Magento\Backend\Model\UrlInterface;
use Magento\Framework\Encryption\EncryptorInterface;
use Magento\Framework\Event;
use Magento\Framework\Event\ManagerInterface as EventManagerInterface;
use Magento\Framework\Event\Observer;
use Magento\Framework\Exception\State\UserLockedException;
use Magento\Framework\Message\Collection;
use Magento\Framework\Message\ManagerInterface;
use Magento\Framework\Message\MessageInterface;
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
use Magento\User\Model\Backend\Config\ObserverConfig;
use Magento\User\Model\ResourceModel\User;
use Magento\User\Model\User as ModelUser;
use Magento\User\Model\UserFactory;
use Magento\User\Observer\Backend\AuthObserver;
use PHPUnit\Framework\MockObject\MockObject;
use PHPUnit\Framework\TestCase;
/**
* Test class for Magento\User\Observer\Backend\AuthObserver
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
*/
class AuthObserverTest extends TestCase
{
/** @var ObserverConfig */
protected $observerConfig;
/** @var ConfigInterface|MockObject */
protected $configInterfaceMock;
/** @var User|MockObject */
protected $userMock;
/** @var UrlInterface|MockObject */
protected $urlInterfaceMock;
/** @var Session|MockObject */
protected $authSessionMock;
/** @var UserFactory|MockObject */
protected $userFactoryMock;
/** @var EncryptorInterface|MockObject */
protected $encryptorMock;
/** @var ManagerInterface|MockObject */
protected $managerInterfaceMock;
/** @var MessageInterface|MockObject */
protected $messageInterfaceMock;
/** @var EventManagerInterface|MockObject */
protected $eventManagerMock;
/** @var AuthObserver */
protected $model;
protected function setUp(): void
{
$this->configInterfaceMock = $this->getMockBuilder(ConfigInterface::class)
->disableOriginalConstructor()
->setMethods([])
->getMockForAbstractClass();
$this->userMock = $this->getMockBuilder(\Magento\User\Model\ResourceModel\User::class)
->disableOriginalConstructor()
->setMethods([])
->getMock();
$this->urlInterfaceMock = $this->getMockBuilder(UrlInterface::class)
->disableOriginalConstructor()
->setMethods([])
->getMockForAbstractClass();
$this->authSessionMock = $this->getMockBuilder(Session::class)
->disableOriginalConstructor()
->setMethods(
[
'setPciAdminUserIsPasswordExpired',
'unsPciAdminUserIsPasswordExpired',
'getPciAdminUserIsPasswordExpired',
'isLoggedIn',
'clearStorage'
]
)->getMock();
$this->userFactoryMock = $this->getMockBuilder(UserFactory::class)
->disableOriginalConstructor()
->setMethods(['create'])
->getMock();
$this->encryptorMock = $this->getMockBuilder(EncryptorInterface::class)
->disableOriginalConstructor()
->setMethods([])
->getMockForAbstractClass();
$this->managerInterfaceMock = $this->getMockBuilder(\Magento\Framework\Message\ManagerInterface::class)
->disableOriginalConstructor()
->setMethods([])
->getMock();
$this->messageInterfaceMock = $this->getMockBuilder(MessageInterface::class)
->disableOriginalConstructor()
->setMethods([])
->getMockForAbstractClass();
$this->eventManagerMock = $this->getMockBuilder(\Magento\Framework\Event\ManagerInterface::class)
->disableOriginalConstructor()
->setMethods([])
->getMockForAbstractClass();
$helper = new ObjectManager($this);
$this->observerConfig = $helper->getObject(
ObserverConfig::class,
[
'backendConfig' => $this->configInterfaceMock
]
);
$this->model = $helper->getObject(
AuthObserver::class,
[
'observerConfig' => $this->observerConfig,
'userResource' => $this->userMock,
'url' => $this->urlInterfaceMock,
'authSession' => $this->authSessionMock,
'userFactory' => $this->userFactoryMock,
'encryptor' => $this->encryptorMock,
'messageManager' => $this->managerInterfaceMock,
'messageInterface' => $this->messageInterfaceMock,
'eventManager' => $this->eventManagerMock
]
);
}
public function testAdminAuthenticate()
{
$password = "myP@sw0rd";
$uid = 123;
$authResult = true;
$lockExpires = false;
$userPassword = [
'expires' => 1,
'last_updated' => 1496248367
];
/** @var Observer|MockObject $eventObserverMock */
$eventObserverMock = $this->getMockBuilder(Observer::class)
->disableOriginalConstructor()
->setMethods([])
->getMock();
/** @var Event|MockObject */
$eventMock = $this->getMockBuilder(Event::class)
->disableOriginalConstructor()
->setMethods(['getPassword', 'getUser', 'getResult'])
->getMock();
/** @var ModelUser|MockObject $userMock */
$userMock = $this->getMockBuilder(\Magento\User\Model\User::class)
->disableOriginalConstructor()
->setMethods(['getId', 'getLockExpires', 'getPassword', 'save'])
->getMock();
$eventObserverMock->expects($this->atLeastOnce())->method('getEvent')->willReturn($eventMock);
$eventMock->expects($this->once())->method('getPassword')->willReturn($password);
$eventMock->expects($this->once())->method('getUser')->willReturn($userMock);
$eventMock->expects($this->once())->method('getResult')->willReturn($authResult);
$userMock->expects($this->atLeastOnce())->method('getId')->willReturn($uid);
$userMock->expects($this->once())->method('getLockExpires')->willReturn($lockExpires);
$this->userMock->expects($this->once())->method('unlock');
$this->userMock->expects($this->once())->method('getLatestPassword')->willReturn($userPassword);
$this->configInterfaceMock
->expects($this->atLeastOnce())
->method('getValue')
->willReturn(1);
/** @var Collection|MockObject $collectionMock */
$collectionMock = $this->getMockBuilder(Collection::class)
->disableOriginalConstructor()
->setMethods([])
->getMock();
$this->managerInterfaceMock->expects($this->once())->method('getMessages')->willReturn($collectionMock);
$collectionMock
->expects($this->once())
->method('getLastAddedMessage')
->willReturn($this->messageInterfaceMock);
$this->messageInterfaceMock->expects($this->once())->method('setIdentifier')->willReturnSelf();
$this->authSessionMock->expects($this->once())->method('setPciAdminUserIsPasswordExpired');
$this->encryptorMock->expects($this->once())->method('validateHashVersion')->willReturn(false);
$this->model->execute($eventObserverMock);
}
public function testAdminAuthenticateThrowsException()
{
$password = "myP@sw0rd";
$authResult = true;
$lockExpires = '3015-07-08 11:14:15.638276';
/** @var Observer|MockObject $eventObserverMock */
$eventObserverMock = $this->getMockBuilder(Observer::class)
->disableOriginalConstructor()
->setMethods([])
->getMock();
/** @var Event|MockObject */
$eventMock = $this->getMockBuilder(Event::class)
->disableOriginalConstructor()
->setMethods(['getPassword', 'getUser', 'getResult'])
->getMock();
/** @var ModelUser|MockObject $userMock */
$userMock = $this->getMockBuilder(\Magento\User\Model\User::class)
->disableOriginalConstructor()
->setMethods(['getId', 'getLockExpires', 'getPassword'])
->getMock();
$eventObserverMock->expects($this->atLeastOnce())->method('getEvent')->willReturn($eventMock);
$eventMock->expects($this->once())->method('getPassword')->willReturn($password);
$eventMock->expects($this->once())->method('getUser')->willReturn($userMock);
$eventMock->expects($this->once())->method('getResult')->willReturn($authResult);
$userMock->expects($this->once())->method('getLockExpires')->willReturn($lockExpires);
try {
$this->model->execute($eventObserverMock);
} catch (UserLockedException $expected) {
return;
}
$this->fail('An expected exception has not been raised.');
}
public function testAdminAuthenticateUpdateLockingInfo()
{
$password = "myP@sw0rd";
$uid = 123;
$authResult = false;
$firstFailure = '1965-07-08 11:14:15.638276';
$numOfFailures = 5;
/** @var Observer|MockObject $eventObserverMock */
$eventObserverMock = $this->getMockBuilder(Observer::class)
->disableOriginalConstructor()
->setMethods([])
->getMock();
/** @var Event|MockObject */
$eventMock = $this->getMockBuilder(Event::class)
->disableOriginalConstructor()
->setMethods(['getPassword', 'getUser', 'getResult'])
->getMock();
/** @var ModelUser|MockObject $userMock */
$userMock = $this->getMockBuilder(\Magento\User\Model\User::class)
->disableOriginalConstructor()
->setMethods(['getId', 'getFailuresNum', 'getFirstFailure'])
->getMock();
$eventObserverMock->expects($this->atLeastOnce())->method('getEvent')->willReturn($eventMock);
$eventMock->expects($this->once())->method('getPassword')->willReturn($password);
$eventMock->expects($this->once())->method('getUser')->willReturn($userMock);
$eventMock->expects($this->once())->method('getResult')->willReturn($authResult);
$userMock->expects($this->once())->method('getId')->willReturn($uid);
$this->configInterfaceMock
->expects($this->atLeastOnce())
->method('getValue')
->willReturn(1);
$userMock->expects($this->once())->method('getFailuresNum')->willReturn($numOfFailures);
$userMock->expects($this->once())->method('getFirstFailure')->willReturn($firstFailure);
$this->userMock->expects($this->once())->method('updateFailure');
$this->model->execute($eventObserverMock);
}
}