61 $this->securityConfigMock = $this->getMockBuilder(\
Magento\Security\Model\ConfigInterface::class)
62 ->setMethods([
'getScopeByEventType'])
63 ->disableOriginalConstructor()
64 ->getMockForAbstractClass();
65 $this->securityConfigMock->expects($this->any())
66 ->method(
'getScopeByEventType')
74 $this->collectionFactoryMock = $this->createPartialMock(
79 $this->collectionMock = $this->createPartialMock(
81 [
'addFieldToFilter',
'filterLastItem',
'getFirstItem']
84 $this->dateTimeMock = $this->getMockBuilder(DateTime::class)
85 ->disableOriginalConstructor()
88 $this->remoteAddressMock = $this->getMockBuilder(RemoteAddress::class)
89 ->disableOriginalConstructor()
92 $this->model = $this->objectManager->getObject(
93 \
Magento\Security\Model\SecurityChecker\Frequency::class,
95 'securityConfig' => $this->securityConfigMock,
96 'collectionFactory' => $this->collectionFactoryMock,
97 'dateTime' => $this->dateTimeMock,
98 'remoteAddress' => $this->remoteAddressMock
108 public function testCheck($securityEventType, $requestsMethod)
110 $limitTimeBetweenPasswordResetRequests = 600;
113 $this->
prepareTestCheck($requestsMethod, $limitTimeBetweenPasswordResetRequests);
115 $this->dateTimeMock->expects($this->once())
116 ->method(
'gmtTimestamp')
117 ->willReturn($timestamp);
120 $record = $this->objectManager->getObject(\
Magento\Security\Model\PasswordResetRequestEvent::class);
121 $record->setCreatedAt(
122 date(
"Y-m-d H:i:s", $timestamp - $limitTimeBetweenPasswordResetRequests)
125 $this->collectionMock->expects($this->once())
126 ->method(
'getFirstItem')
127 ->willReturn($record);
129 $this->model->check($securityEventType);
138 public function testCheckException($securityEventType, $requestsMethod)
140 $limitTimeBetweenPasswordResetRequests = 600;
143 $this->
prepareTestCheck($requestsMethod, $limitTimeBetweenPasswordResetRequests);
145 $this->dateTimeMock->expects($this->once())
146 ->method(
'gmtTimestamp')
147 ->willReturn($timestamp);
150 $record = $this->objectManager->getObject(\
Magento\Security\Model\PasswordResetRequestEvent::class);
151 $record->setCreatedAt(
152 date(
"Y-m-d H:i:s", $timestamp - $limitTimeBetweenPasswordResetRequests + 1)
155 $this->collectionMock->expects($this->once())
156 ->method(
'getFirstItem')
157 ->willReturn($record);
159 $this->model->check($securityEventType);
161 $this->expectExceptionMessage(
162 'We received too many requests for password resets. ' 175 \Magento\Security\Model\Config\Source\ResetMethod::OPTION_BY_IP_AND_EMAIL
179 \Magento\Security\Model\Config\Source\ResetMethod::OPTION_BY_IP
183 \Magento\Security\Model\Config\Source\ResetMethod::OPTION_BY_EMAIL
187 \Magento\Security\Model\Config\Source\ResetMethod::OPTION_BY_IP_AND_EMAIL
191 \Magento\Security\Model\Config\Source\ResetMethod::OPTION_BY_IP
195 \Magento\Security\Model\Config\Source\ResetMethod::OPTION_BY_EMAIL
204 protected function prepareTestCheck($requestsMethod, $limitTimeBetweenPasswordResetRequests)
206 $this->remoteAddressMock->expects($this->once())
207 ->method(
'getRemoteAddress')
208 ->will($this->returnValue(12345));
210 $this->securityConfigMock->expects($this->any())
211 ->method(
'getPasswordResetProtectionType')
212 ->will($this->returnValue($requestsMethod));
214 $this->securityConfigMock->expects($this->once())
215 ->method(
'getMinTimeBetweenPasswordResetRequests')
216 ->will($this->returnValue($limitTimeBetweenPasswordResetRequests));
218 $this->securityConfigMock->expects($this->any())
219 ->method(
'getCustomerServiceEmail')
222 $this->collectionFactoryMock->expects($this->once())
224 ->willReturn($this->collectionMock);
226 $this->collectionMock->expects($this->any())
227 ->method(
'addFieldToFilter')
230 $this->collectionMock->expects($this->once())
231 ->method(
'filterLastItem')
dataProviderSecurityEventTypeWithRequestsMethod()
const CUSTOMER_PASSWORD_RESET_REQUEST
const ADMIN_PASSWORD_RESET_REQUEST
prepareTestCheck($requestsMethod, $limitTimeBetweenPasswordResetRequests)