|
14 | 14 | use Magento\Framework\Exception\State\ExpiredException;
|
15 | 15 | use Magento\Framework\Reflection\DataObjectProcessor;
|
16 | 16 | use Magento\Framework\Session\SessionManagerInterface;
|
| 17 | +use Magento\Framework\Stdlib\DateTime; |
17 | 18 | use Magento\Framework\Url as UrlBuilder;
|
18 | 19 | use Magento\Store\Model\StoreManagerInterface;
|
19 | 20 | use Magento\TestFramework\Helper\Bootstrap;
|
@@ -113,6 +114,10 @@ protected function tearDown(): void
|
113 | 114 | $customerRegistry->remove(1);
|
114 | 115 | $addressRegistry->remove(1);
|
115 | 116 | $addressRegistry->remove(2);
|
| 117 | + /** @var \Magento\Customer\Model\ResourceModel\Visitor $resourceModel */ |
| 118 | + $resourceModel = $this->objectManager->get(\Magento\Customer\Model\ResourceModel\Visitor::class); |
| 119 | + $resourceModel->getConnection()->delete($resourceModel->getMainTable()); |
| 120 | + parent::tearDown(); |
116 | 121 | }
|
117 | 122 |
|
118 | 123 | /**
|
@@ -158,19 +163,52 @@ public function testChangePassword()
|
158 | 163 | {
|
159 | 164 | /** @var SessionManagerInterface $session */
|
160 | 165 | $session = $this->objectManager->get(SessionManagerInterface::class);
|
161 |
| - $oldSessionId = $session->getSessionId(); |
162 |
| - $session->setTestData('test'); |
| 166 | + $time = time(); |
| 167 | + |
| 168 | + $session->start(); |
| 169 | + $guessSessionId = $session->getSessionId(); |
| 170 | + $this->createVisitorSession($guessSessionId); |
| 171 | + $session->setTestData('guest_session_data'); |
| 172 | + |
| 173 | + // open new session |
| 174 | + $activeSessionId = uniqid("active-$time-"); |
| 175 | + $this->startNewSession($activeSessionId); |
| 176 | + $this->createVisitorSession($activeSessionId, 1); |
| 177 | + $session->setTestData('customer_session_data_1'); |
| 178 | + |
| 179 | + // open new session |
| 180 | + $currentSessionId = uniqid("current-$time-"); |
| 181 | + $this->startNewSession($currentSessionId); |
| 182 | + $this->createVisitorSession($currentSessionId, 1); |
| 183 | + $session->setTestData('customer_session_data_current'); |
| 184 | + |
| 185 | + // change password |
163 | 186 | $this-> accountManagement-> changePassword( '[email protected]', 'password', 'new_Password123');
|
164 |
| - |
165 |
| - $this->assertTrue( |
166 |
| - $oldSessionId !== $session->getSessionId(), |
167 |
| - 'Customer session id wasn\'t regenerated after change password' |
| 187 | + $this->assertEquals( |
| 188 | + $currentSessionId, |
| 189 | + $session->getSessionId(), |
| 190 | + 'Current session was renewed' |
168 | 191 | );
|
169 | 192 |
|
170 |
| - $session->destroy(); |
171 |
| - $session->setSessionId($oldSessionId); |
| 193 | + // open customer active session |
| 194 | + $this->startNewSession($activeSessionId); |
| 195 | + $this->assertNull($session->getTestData(), 'Customer active session data wasn\'t cleaned up'); |
| 196 | + |
| 197 | + // open customer current session |
| 198 | + $this->startNewSession($currentSessionId); |
| 199 | + $this->assertEquals( |
| 200 | + 'customer_session_data_current', |
| 201 | + $session->getTestData(), |
| 202 | + 'Customer current session data was cleaned up' |
| 203 | + ); |
172 | 204 |
|
173 |
| - $this->assertNull($session->getTestData(), 'Customer session data wasn\'t cleaned'); |
| 205 | + // open guess session |
| 206 | + $this->startNewSession($guessSessionId); |
| 207 | + $this->assertEquals( |
| 208 | + 'guest_session_data', |
| 209 | + $session->getTestData(), |
| 210 | + 'Guest session data was cleaned up' |
| 211 | + ); |
174 | 212 |
|
175 | 213 | $this-> accountManagement-> authenticate( '[email protected]', 'new_Password123');
|
176 | 214 | }
|
@@ -392,11 +430,58 @@ public function testValidateResetPasswordLinkTokenAmbiguous()
|
392 | 430 | */
|
393 | 431 | public function testResetPassword()
|
394 | 432 | {
|
| 433 | + /** @var SessionManagerInterface $session */ |
| 434 | + $session = $this->objectManager->get(SessionManagerInterface::class); |
| 435 | + $time = time(); |
| 436 | + |
| 437 | + $session->start(); |
| 438 | + $guessSessionId = $session->getSessionId(); |
| 439 | + $this->createVisitorSession($guessSessionId); |
| 440 | + $session->setTestData('guest_session_data'); |
| 441 | + |
| 442 | + // open new session |
| 443 | + $activeSessionId = uniqid("active-$time-"); |
| 444 | + $this->startNewSession($activeSessionId); |
| 445 | + $this->createVisitorSession($activeSessionId, 1); |
| 446 | + $session->setTestData('customer_session_data_1'); |
| 447 | + |
| 448 | + // open new session |
| 449 | + $currentSessionId = uniqid("current-$time-"); |
| 450 | + $this->startNewSession($currentSessionId); |
| 451 | + $this->createVisitorSession($currentSessionId, 1); |
| 452 | + $session->setTestData('customer_session_data_current'); |
| 453 | + |
395 | 454 | $resetToken = 'lsdj579slkj5987slkj595lkj';
|
396 | 455 | $password = 'new_Password123';
|
397 | 456 |
|
398 | 457 | $this->setResetPasswordData($resetToken, 'Y-m-d H:i:s');
|
399 | 458 | $this-> assertTrue( $this-> accountManagement-> resetPassword( '[email protected]', $resetToken, $password));
|
| 459 | + |
| 460 | + $this->assertEquals( |
| 461 | + $currentSessionId, |
| 462 | + $session->getSessionId(), |
| 463 | + 'Current session was renewed' |
| 464 | + ); |
| 465 | + |
| 466 | + // open customer active session |
| 467 | + $this->startNewSession($activeSessionId); |
| 468 | + $this->assertNull($session->getTestData(), 'Customer active session data wasn\'t cleaned up'); |
| 469 | + |
| 470 | + // open customer current session |
| 471 | + $this->startNewSession($currentSessionId); |
| 472 | + $this->assertEquals( |
| 473 | + 'customer_session_data_current', |
| 474 | + $session->getTestData(), |
| 475 | + 'Customer current session data was cleaned up' |
| 476 | + ); |
| 477 | + |
| 478 | + // open guess session |
| 479 | + $this->startNewSession($guessSessionId); |
| 480 | + $this->assertEquals( |
| 481 | + 'guest_session_data', |
| 482 | + $session->getTestData(), |
| 483 | + 'Guest session data was cleaned up' |
| 484 | + ); |
400 | 485 | }
|
401 | 486 |
|
402 | 487 | /**
|
@@ -727,4 +812,35 @@ protected function setResetPasswordData(
|
727 | 812 | $customerModel->setRpTokenCreatedAt(date($date));
|
728 | 813 | $customerModel->save();
|
729 | 814 | }
|
| 815 | + |
| 816 | + /** |
| 817 | + * @param string $sessionId |
| 818 | + */ |
| 819 | + private function startNewSession(string $sessionId): void |
| 820 | + { |
| 821 | + /** @var SessionManagerInterface $session */ |
| 822 | + $session = $this->objectManager->get(SessionManagerInterface::class); |
| 823 | + // close session and cleanup session variable |
| 824 | + $session->writeClose(); |
| 825 | + $session->clearStorage(); |
| 826 | + // open new session |
| 827 | + $session->setSessionId($sessionId); |
| 828 | + $session->start(); |
| 829 | + } |
| 830 | + |
| 831 | + /** |
| 832 | + * @param string $sessionId |
| 833 | + * @param int|null $customerId |
| 834 | + * @return Visitor |
| 835 | + */ |
| 836 | + private function createVisitorSession(string $sessionId, ?int $customerId = null): Visitor |
| 837 | + { |
| 838 | + /** @var Visitor $visitor */ |
| 839 | + $visitor = Bootstrap::getObjectManager()->create(Visitor::class); |
| 840 | + $visitor->setCustomerId($customerId); |
| 841 | + $visitor->setSessionId($sessionId); |
| 842 | + $visitor->setLastVisitAt((new \DateTime())->format(DateTime::DATETIME_PHP_FORMAT)); |
| 843 | + $visitor->save(); |
| 844 | + return $visitor; |
| 845 | + } |
730 | 846 | }
|
0 commit comments