configInterfaceMock = $this->getMockBuilder(\Magento\Backend\App\ConfigInterface::class) ->disableOriginalConstructor() ->setMethods([]) ->getMock(); $this->userMock = $this->getMockBuilder(\Magento\User\Model\ResourceModel\User::class) ->disableOriginalConstructor() ->setMethods([]) ->getMock(); $this->urlInterfaceMock = $this->getMockBuilder(\Magento\Backend\Model\UrlInterface::class) ->disableOriginalConstructor() ->setMethods([]) ->getMock(); $this->authSessionMock = $this->getMockBuilder(\Magento\Backend\Model\Auth\Session::class) ->disableOriginalConstructor() ->setMethods( [ 'setPciAdminUserIsPasswordExpired', 'unsPciAdminUserIsPasswordExpired', 'getPciAdminUserIsPasswordExpired', 'isLoggedIn', 'clearStorage' ] )->getMock(); $this->userFactoryMock = $this->getMockBuilder(\Magento\User\Model\UserFactory::class) ->disableOriginalConstructor() ->setMethods(['create']) ->getMock(); $this->encryptorMock = $this->getMockBuilder(\Magento\Framework\Encryption\EncryptorInterface::class) ->disableOriginalConstructor() ->setMethods([]) ->getMock(); $this->managerInterfaceMock = $this->getMockBuilder(\Magento\Framework\Message\ManagerInterface::class) ->disableOriginalConstructor() ->setMethods([]) ->getMock(); $this->messageInterfaceMock = $this->getMockBuilder(\Magento\Framework\Message\MessageInterface::class) ->disableOriginalConstructor() ->setMethods([]) ->getMock(); $this->eventManagerMock = $this->getMockBuilder(\Magento\Framework\Event\ManagerInterface::class) ->disableOriginalConstructor() ->setMethods([]) ->getMockForAbstractClass(); $helper = new ObjectManager($this); $this->observerConfig = $helper->getObject( \Magento\User\Model\Backend\Config\ObserverConfig::class, [ 'backendConfig' => $this->configInterfaceMock ] ); $this->model = $helper->getObject( \Magento\User\Observer\Backend\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|\PHPUnit_Framework_MockObject_MockObject $eventObserverMock */ $eventObserverMock = $this->getMockBuilder(\Magento\Framework\Event\Observer::class) ->disableOriginalConstructor() ->setMethods([]) ->getMock(); /** @var Event|\PHPUnit_Framework_MockObject_MockObject */ $eventMock = $this->getMockBuilder(\Magento\Framework\Event::class) ->disableOriginalConstructor() ->setMethods(['getPassword', 'getUser', 'getResult']) ->getMock(); /** @var ModelUser|\PHPUnit_Framework_MockObject_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|\PHPUnit_Framework_MockObject_MockObject $collectionMock */ $collectionMock = $this->getMockBuilder(\Magento\Framework\Message\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|\PHPUnit_Framework_MockObject_MockObject $eventObserverMock */ $eventObserverMock = $this->getMockBuilder(\Magento\Framework\Event\Observer::class) ->disableOriginalConstructor() ->setMethods([]) ->getMock(); /** @var Event|\PHPUnit_Framework_MockObject_MockObject */ $eventMock = $this->getMockBuilder(\Magento\Framework\Event::class) ->disableOriginalConstructor() ->setMethods(['getPassword', 'getUser', 'getResult']) ->getMock(); /** @var ModelUser|\PHPUnit_Framework_MockObject_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|\PHPUnit_Framework_MockObject_MockObject $eventObserverMock */ $eventObserverMock = $this->getMockBuilder(\Magento\Framework\Event\Observer::class) ->disableOriginalConstructor() ->setMethods([]) ->getMock(); /** @var Event|\PHPUnit_Framework_MockObject_MockObject */ $eventMock = $this->getMockBuilder(\Magento\Framework\Event::class) ->disableOriginalConstructor() ->setMethods(['getPassword', 'getUser', 'getResult']) ->getMock(); /** @var ModelUser|\PHPUnit_Framework_MockObject_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); } }