Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
AuthTest.php
Go to the documentation of this file.
1 <?php
7 
10 
17 {
22  public function testFormForgotpasswordAction()
23  {
24  $this->dispatch('backend/admin/auth/forgotpassword');
25  $expected = 'Password Help';
26  $this->assertContains($expected, $this->getResponse()->getBody());
27  }
28 
35  public function testForgotpasswordAction()
36  {
37  $this->getRequest()->setPostValue('email', '[email protected]');
38  $this->dispatch('backend/admin/auth/forgotpassword');
39  $this->assertRedirect(
40  $this->equalTo(
41  Bootstrap::getObjectManager()->get(
42  \Magento\Backend\Helper\Data::class
43  )->getHomePageUrl()
44  )
45  );
46  }
47 
55  public function testEmailSendForgotPasswordAction()
56  {
58  $transportMock = Bootstrap::getObjectManager()->get(
59  TransportBuilderMock::class
60  );
61  $this->getRequest()->setPostValue('email', '[email protected]');
62  $this->dispatch('backend/admin/auth/forgotpassword');
63  $this->assertRedirect(
64  $this->equalTo(
65  Bootstrap::getObjectManager()->get(
66  \Magento\Backend\Helper\Data::class
67  )->getHomePageUrl()
68  )
69  );
70  $message = $transportMock->getSentMessage();
71  $this->assertNotEmpty($message);
72  $this->assertEquals(
73  __('Password Reset Confirmation for %1', ['John Doe'])->render(),
74  $message->getSubject()
75  );
76  }
77 
85  public function testResetPasswordAction()
86  {
88  $user = Bootstrap::getObjectManager()->create(
89  \Magento\User\Model\User::class
90  )->loadByUsername(
91  'dummy_username'
92  );
93  $this->assertNotEmpty($user->getId(), 'Broken fixture');
94  $resetPasswordToken = Bootstrap::getObjectManager()->get(
95  \Magento\User\Helper\Data::class
96  )->generateResetPasswordLinkToken();
97  $user->changeResetPasswordLinkToken($resetPasswordToken);
98  $user->save();
99 
100  $this->getRequest()->setQueryValue('token', $resetPasswordToken)->setQueryValue('id', $user->getId());
101  $this->dispatch('backend/admin/auth/resetpassword');
102 
103  $this->assertEquals('adminhtml', $this->getRequest()->getRouteName());
104  $this->assertEquals('auth', $this->getRequest()->getControllerName());
105  $this->assertEquals('resetpassword', $this->getRequest()->getActionName());
106  $this->assertTrue((bool)strpos($this->getResponse()->getBody(), $resetPasswordToken));
107  }
108 
114  {
115  $this->getRequest()->setQueryValue('token', 'dummy')->setQueryValue('id', 1);
116  $this->dispatch('backend/admin/auth/resetpassword');
117  $this->assertSessionMessages(
118  $this->equalTo(['Your password reset link has expired.']),
119  \Magento\Framework\Message\MessageInterface::TYPE_ERROR
120  );
121  $this->assertRedirect();
122  }
123 
130  public function testResetPasswordPostAction($password, $passwordConfirmation, $isPasswordChanged)
131  {
132  $objectManager = Bootstrap::getObjectManager();
133 
135  $user = $objectManager->create(\Magento\User\Model\User::class);
136  $user->loadByUsername('dummy_username');
137  $this->assertNotEmpty($user->getId(), 'Broken fixture');
138 
140  $helper = $objectManager->get(\Magento\User\Helper\Data::class);
141 
142  $resetPasswordToken = $helper->generateResetPasswordLinkToken();
143  $user->changeResetPasswordLinkToken($resetPasswordToken);
144  $user->save();
145  $oldPassword = $user->getPassword();
146 
147  $this->getRequest()->setQueryValue(
148  'token',
149  $resetPasswordToken
150  )->setQueryValue(
151  'id',
152  $user->getId()
153  )->setPostValue(
154  'password',
155  $password
156  )->setPostValue(
157  'confirmation',
158  $passwordConfirmation
159  );
160 
161  $this->dispatch('backend/admin/auth/resetpasswordpost');
162 
164  $backendHelper = $objectManager->get(\Magento\Backend\Helper\Data::class);
165  if ($isPasswordChanged) {
166  $this->assertRedirect($this->equalTo($backendHelper->getHomePageUrl()));
167  } else {
168  $this->assertRedirect(
169  $this->stringContains('backend/admin/auth/resetpassword')
170  );
171  }
172 
174  $user = $objectManager->create(\Magento\User\Model\User::class);
175  $user->loadByUsername('dummy_username');
176 
177  if ($isPasswordChanged) {
179  $encryptor = $objectManager->get(\Magento\Framework\Encryption\EncryptorInterface::class);
180  $this->assertTrue($encryptor->validateHash($password, $user->getPassword()));
181  } else {
182  $this->assertEquals($oldPassword, $user->getPassword());
183  }
184  }
185 
186  public function resetPasswordDataProvider()
187  {
188  $password = uniqid('123q');
189  return [
190  [$password, $password, true],
191  [$password, '', false],
192  [$password, $password . '123', false],
193  ['', '', false],
194  ['', $password, false]
195  ];
196  }
197 
203  public function testResetPasswordPostActionWithDummyToken()
204  {
205  $this->getRequest()->setQueryValue('token', 'dummy')->setQueryValue('id', 1);
206  $this->dispatch('backend/admin/auth/resetpasswordpost');
207  $this->assertSessionMessages(
208  $this->equalTo(['Your password reset link has expired.']),
209  \Magento\Framework\Message\MessageInterface::TYPE_ERROR
210  );
211 
212  $objectManager = Bootstrap::getObjectManager();
213 
215  $backendHelper = $objectManager->get(\Magento\Backend\Helper\Data::class);
216 
217  $this->assertRedirect($this->equalTo($backendHelper->getHomePageUrl()));
218  }
219 
225  public function testResetPasswordPostActionWithInvalidPassword()
226  {
227  $objectManager = Bootstrap::getObjectManager();
228 
229  $user = $objectManager->create(\Magento\User\Model\User::class);
230  $user->loadByUsername('dummy_username');
231  $resetPasswordToken = null;
232  if ($user->getId()) {
234  $userHelper = $objectManager->get(\Magento\User\Helper\Data::class);
235 
236  $resetPasswordToken = $userHelper->generateResetPasswordLinkToken();
237  $user->changeResetPasswordLinkToken($resetPasswordToken);
238  $user->save();
239  }
240 
241  $newDummyPassword = 'new_dummy_password2';
242 
243  $this->getRequest()->setQueryValue(
244  'token',
245  $resetPasswordToken
246  )->setQueryValue(
247  'id',
248  $user->getId()
249  )->setPostValue(
250  'password',
251  $newDummyPassword
252  )->setPostValue(
253  'confirmation',
254  'invalid'
255  );
256 
257  $this->dispatch('backend/admin/auth/resetpasswordpost');
258 
259  $this->assertSessionMessages(
260  $this->equalTo(['Your password confirmation must match your password.']),
261  \Magento\Framework\Message\MessageInterface::TYPE_ERROR
262  );
263  $this->assertRedirect();
264  }
265 
274  protected function prepareEmailMock($occurrenceNumber, $templateId, $sender)
275  {
276  $transportMock = $this->getMockBuilder(\Magento\Framework\Mail\TransportInterface::class)
277  ->setMethods(['sendMessage'])
278  ->getMockForAbstractClass();
279  $transportMock->expects($this->exactly($occurrenceNumber))
280  ->method('sendMessage');
281  $transportBuilderMock = $this->getMockBuilder(\Magento\Framework\Mail\Template\TransportBuilder::class)
282  ->disableOriginalConstructor()
283  ->setMethods(
284  [
285  'setTemplateModel',
286  'addTo',
287  'setFrom',
288  'setTemplateIdentifier',
289  'setTemplateVars',
290  'setTemplateOptions',
291  'getTransport'
292  ]
293  )
294  ->getMock();
295  $transportBuilderMock->method('setTemplateIdentifier')
296  ->with($templateId)
297  ->willReturnSelf();
298  $transportBuilderMock->method('setTemplateModel')
299  ->with(\Magento\Email\Model\BackendTemplate::class)
300  ->willReturnSelf();
301  $transportBuilderMock->method('setTemplateOptions')
302  ->willReturnSelf();
303  $transportBuilderMock->method('setTemplateVars')
304  ->willReturnSelf();
305  $transportBuilderMock->method('setFrom')
306  ->with($sender)
307  ->willReturnSelf();
308  $transportBuilderMock->method('addTo')
309  ->willReturnSelf();
310  $transportBuilderMock->expects($this->exactly($occurrenceNumber))
311  ->method('getTransport')
312  ->willReturn($transportMock);
313 
314  return $transportBuilderMock;
315  }
316 
323  protected function addMockToClass(
324  \PHPUnit_Framework_MockObject_MockObject $transportBuilderMock,
325  $originalClassName
326  ) {
327  $userMock = $this->_objectManager->create(
328  $originalClassName,
329  ['transportBuilder' => $transportBuilderMock]
330  );
331  $factoryMock = $this->getMockBuilder(\Magento\User\Model\UserFactory::class)
332  ->disableOriginalConstructor()
333  ->setMethods(
334  [
335  'create'
336  ]
337  )
338  ->getMock();
339  $factoryMock->method('create')
340  ->willReturn($userMock);
341  $this->_objectManager->addSharedInstance(
342  $factoryMock,
343  \Magento\User\Model\UserFactory::class
344  );
345  }
346 }
$helper
Definition: iframe.phtml:13
assertRedirect(\PHPUnit\Framework\Constraint\Constraint $urlConstraint=null)
$objectManager
Definition: bootstrap.php:17
__()
Definition: __.php:13
$message
$templateId
Definition: queue.php:15
$user
Definition: dummy_user.php:13
prepareEmailMock($occurrenceNumber, $templateId, $sender)
Definition: AuthTest.php:274
addMockToClass(\PHPUnit_Framework_MockObject_MockObject $transportBuilderMock, $originalClassName)
Definition: AuthTest.php:323
assertSessionMessages(\PHPUnit\Framework\Constraint\Constraint $constraint, $messageType=null, $messageManagerClass=\Magento\Framework\Message\Manager::class)