File: /home/petsclubcc/magento/vendor/magento/module-security/Test/Unit/Model/SecurityManagerTest.php
<?php
/**
* Copyright © 2016 Magento. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Security\Test\Unit\Model;
use Magento\Framework\Stdlib\DateTime\DateTime;
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
use Magento\Security\Model\ConfigInterface;
use Magento\Framework\HTTP\PhpEnvironment\RemoteAddress;
use Magento\Security\Model\SecurityManager;
/**
* Test class for \Magento\Security\Model\SecurityManager testing
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
*/
class SecurityManagerTest extends \PHPUnit_Framework_TestCase
{
/** @var \Magento\Security\Model\SecurityManager */
protected $model;
/** @var ConfigInterface */
protected $securityConfigMock;
/** @var \Magento\Security\Model\ResourceModel\PasswordResetRequestEvent\CollectionFactory */
protected $passwordResetRequestEventCollectionFactoryMock;
/** @var \Magento\Security\Model\ResourceModel\PasswordResetRequestEvent\Collection */
protected $passwordResetRequestEventCollectionMock;
/** @var \Magento\Security\Model\PasswordResetRequestEventFactory */
protected $passwordResetRequestEventFactoryMock;
/** @var \Magento\Security\Model\PasswordResetRequestEvent */
protected $passwordResetRequestEventMock;
/** @var \Magento\Framework\TestFramework\Unit\Helper\ObjectManager */
protected $objectManager;
/**
* @var \Magento\Framework\Event\ManagerInterface|\PHPUnit_Framework_MockObject_MockObject
*/
protected $eventManagerMock;
/**
* @var DateTime
*/
protected $dateTimeMock;
/*
* @var RemoteAddress
*/
protected $remoteAddressMock;
/**
* Init mocks for tests
* @return void
*/
public function setUp()
{
$this->objectManager = new ObjectManager($this);
$this->securityConfigMock = $this->getMockBuilder(\Magento\Security\Model\ConfigInterface::class)
->disableOriginalConstructor()
->getMock();
$this->passwordResetRequestEventCollectionFactoryMock = $this->getMock(
\Magento\Security\Model\ResourceModel\PasswordResetRequestEvent\CollectionFactory::class,
['create'],
[],
'',
false
);
$this->passwordResetRequestEventCollectionMock = $this->getMock(
\Magento\Security\Model\ResourceModel\PasswordResetRequestEvent\Collection::class,
['deleteRecordsOlderThen'],
[],
'',
false
);
$this->passwordResetRequestEventFactoryMock = $this->getMock(
\Magento\Security\Model\PasswordResetRequestEventFactory::class,
['create'],
[],
'',
false
);
$this->passwordResetRequestEventMock = $this->getMock(
\Magento\Security\Model\PasswordResetRequestEvent::class,
['setRequestType', 'setAccountReference', 'setIp', 'save'],
[],
'',
false
);
$securityChecker = $this->getMock(
\Magento\Security\Model\SecurityChecker\SecurityCheckerInterface::class,
[],
[],
'',
false
);
$this->eventManagerMock = $this->getMockForAbstractClass(
\Magento\Framework\Event\ManagerInterface::class,
[],
'',
false,
true,
true,
['dispatch']
);
$this->dateTimeMock = $this->getMockBuilder(DateTime::class)
->disableOriginalConstructor()
->getMock();
$this->remoteAddressMock = $this->getMockBuilder(RemoteAddress::class)
->disableOriginalConstructor()
->getMock();
$this->model = $this->objectManager->getObject(
SecurityManager::class,
[
'securityConfig' => $this->securityConfigMock,
'passwordResetRequestEventFactory' => $this->passwordResetRequestEventFactoryMock,
'passwordResetRequestEventCollectionFactory' => $this->passwordResetRequestEventCollectionFactoryMock,
'eventManager' => $this->eventManagerMock,
'securityCheckers' => [$securityChecker],
'dateTime' => $this->dateTimeMock,
'remoteAddress' => $this->remoteAddressMock
]
);
}
/**
* @return void
*/
public function testConstructorException()
{
$securityChecker = $this->getMock(
'\Magento\Framework\Message\ManagerInterface',
[],
[],
'',
false
);
$this->setExpectedException(
'\Magento\Framework\Exception\LocalizedException',
__('Incorrect Security Checker class. It has to implement SecurityCheckerInterface')
);
$this->model->__construct(
$this->securityConfigMock,
$this->passwordResetRequestEventFactoryMock,
$this->passwordResetRequestEventCollectionFactoryMock,
$this->eventManagerMock,
$this->dateTimeMock,
$this->remoteAddressMock,
[$securityChecker]
);
}
/**
* @return void
*/
public function testPerformSecurityCheck()
{
$requestType = \Magento\Security\Model\PasswordResetRequestEvent::CUSTOMER_PASSWORD_RESET_REQUEST;
$accountReference = \Magento\Security\Model\Config\Source\ResetMethod::OPTION_BY_IP_AND_EMAIL;
$longIp = 12345;
$this->remoteAddressMock->expects($this->once())
->method('getRemoteAddress')
->will($this->returnValue($longIp));
$this->passwordResetRequestEventFactoryMock->expects($this->once())
->method('create')
->willReturn($this->passwordResetRequestEventMock);
$this->passwordResetRequestEventMock->expects($this->once())
->method('setRequestType')
->with($requestType)
->willReturnSelf();
$this->passwordResetRequestEventMock->expects($this->once())
->method('setAccountReference')
->with($accountReference)
->willReturnSelf();
$this->passwordResetRequestEventMock->expects($this->once())
->method('setIp')
->with($longIp)
->willReturnSelf();
$this->passwordResetRequestEventMock->expects($this->once())
->method('save')
->willReturnSelf();
$this->model->performSecurityCheck($requestType, $accountReference);
}
/**
* @return void
*/
public function testCleanExpiredRecords()
{
$timestamp = time();
$this->passwordResetRequestEventCollectionFactoryMock->expects($this->once())
->method('create')
->willReturn($this->passwordResetRequestEventCollectionMock);
$this->dateTimeMock->expects($this->once())
->method('gmtTimestamp')
->willReturn($timestamp);
$this->passwordResetRequestEventCollectionMock->expects($this->once())
->method('deleteRecordsOlderThen')
->with(
$timestamp - \Magento\Security\Model\SecurityManager::SECURITY_CONTROL_RECORDS_LIFE_TIME
)
->willReturnSelf();
$this->model->cleanExpiredRecords();
}
}