Skip to content

Commit 56fee0f

Browse files
committed
MC-35550: Persistent Shopping Cart - Clear Persistence on Sign Out - Not working
1 parent 48d7868 commit 56fee0f

File tree

2 files changed

+71
-25
lines changed

2 files changed

+71
-25
lines changed

app/code/Magento/Persistent/Observer/SynchronizePersistentOnLoginObserver.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@
1111

1212
/**
1313
* Persistent Session Observer
14+
*
15+
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
16+
* @SuppressWarnings(PHPMD.CookieAndSessionMisuse)
1417
*/
1518
class SynchronizePersistentOnLoginObserver implements ObserverInterface
1619
{
@@ -63,6 +66,8 @@ public function __construct(
6366
}
6467

6568
/**
69+
* Synchronize persistent session data with logged in customer
70+
*
6671
* @param Observer $observer
6772
* @return void
6873
* @SuppressWarnings(PHPMD.CyclomaticComplexity)
@@ -96,8 +101,9 @@ public function execute(Observer $observer)
96101
if (!$sessionModel->getId()) {
97102
/** @var \Magento\Persistent\Model\Session $sessionModel */
98103
$sessionModel = $this->_sessionFactory->create();
99-
$sessionModel->setCustomerId($customer->getId())->save();
104+
$sessionModel->setCustomerId($customer->getId());
100105
}
106+
$sessionModel->save();
101107
$this->_persistentSession->setSession($sessionModel);
102108
}
103109

dev/tests/integration/testsuite/Magento/Persistent/Observer/SynchronizePersistentOnLoginObserverTest.php

Lines changed: 64 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,35 @@
33
* Copyright © Magento, Inc. All rights reserved.
44
* See COPYING.txt for license details.
55
*/
6+
declare(strict_types=1);
7+
68
namespace Magento\Persistent\Observer;
79

10+
use DateTime;
11+
use DateTimeZone;
12+
use Magento\Customer\Api\CustomerRepositoryInterface;
13+
use Magento\Customer\Api\Data\CustomerInterface;
14+
use Magento\Framework\Event;
15+
use Magento\Framework\Event\Observer;
16+
use Magento\Framework\ObjectManagerInterface;
17+
use Magento\Persistent\Model\Session;
18+
use Magento\Persistent\Model\SessionFactory;
19+
use Magento\TestFramework\Helper\Bootstrap;
20+
use PHPUnit\Framework\TestCase;
21+
822
/**
923
* @magentoDataFixture Magento/Customer/_files/customer.php
24+
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
1025
*/
11-
class SynchronizePersistentOnLoginObserverTest extends \PHPUnit\Framework\TestCase
26+
class SynchronizePersistentOnLoginObserverTest extends TestCase
1227
{
1328
/**
14-
* @var \Magento\Persistent\Observer\SynchronizePersistentOnLoginObserver
29+
* @var SynchronizePersistentOnLoginObserver
1530
*/
1631
protected $_model;
1732

1833
/**
19-
* @var \Magento\Framework\ObjectManagerInterface
34+
* @var ObjectManagerInterface
2035
*/
2136
protected $_objectManager;
2237

@@ -30,45 +45,70 @@ class SynchronizePersistentOnLoginObserverTest extends \PHPUnit\Framework\TestCa
3045
*/
3146
protected $_customerSession;
3247

48+
/**
49+
* @var CustomerInterface
50+
*/
51+
private $customer;
52+
53+
/**
54+
* @inheritDoc
55+
*/
3356
protected function setUp(): void
3457
{
35-
$this->_objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
58+
$this->_objectManager = Bootstrap::getObjectManager();
3659
$this->_persistentSession = $this->_objectManager->get(\Magento\Persistent\Helper\Session::class);
3760
$this->_customerSession = $this->_objectManager->get(\Magento\Customer\Model\Session::class);
3861
$this->_model = $this->_objectManager->create(
39-
\Magento\Persistent\Observer\SynchronizePersistentOnLoginObserver::class,
62+
SynchronizePersistentOnLoginObserver::class,
4063
[
4164
'persistentSession' => $this->_persistentSession,
4265
'customerSession' => $this->_customerSession
4366
]
4467
);
68+
/** @var CustomerRepositoryInterface $customerRepository */
69+
$customerRepository = $this->_objectManager->create(CustomerRepositoryInterface::class);
70+
$this->customer = $customerRepository->getById(1);
4571
}
4672

4773
/**
48-
* @covers \Magento\Persistent\Observer\SynchronizePersistentOnLoginObserver::execute
74+
* Test that persistent session is created on customer login
4975
*/
50-
public function testSynchronizePersistentOnLogin()
76+
public function testSynchronizePersistentOnLogin(): void
5177
{
52-
$event = new \Magento\Framework\Event();
53-
$observer = new \Magento\Framework\Event\Observer(['event' => $event]);
54-
55-
/** @var \Magento\Customer\Api\CustomerRepositoryInterface $customerRepository */
56-
$customerRepository = $this->_objectManager->create(
57-
\Magento\Customer\Api\CustomerRepositoryInterface::class
58-
);
59-
60-
/** @var $customer \Magento\Customer\Api\Data\CustomerInterface */
61-
$customer = $customerRepository->getById(1);
62-
$event->setData('customer', $customer);
78+
$sessionModel = $this->_objectManager->create(Session::class);
79+
$sessionModel->loadByCustomerId($this->customer->getId());
80+
$this->assertNull($sessionModel->getCustomerId());
81+
$event = new Event();
82+
$observer = new Observer(['event' => $event]);
83+
$event->setData('customer', $this->customer);
6384
$this->_persistentSession->setRememberMeChecked(true);
6485
$this->_model->execute($observer);
65-
6686
// check that persistent session has been stored for Customer
67-
/** @var \Magento\Persistent\Model\Session $sessionModel */
68-
$sessionModel = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
69-
\Magento\Persistent\Model\Session::class
70-
);
87+
/** @var Session $sessionModel */
88+
$sessionModel = $this->_objectManager->create(Session::class);
89+
$sessionModel->loadByCustomerId($this->customer->getId());
90+
$this->assertEquals($this->customer->getId(), $sessionModel->getCustomerId());
91+
}
92+
93+
/**
94+
* Test that expired persistent session is renewed on customer login
95+
*/
96+
public function testExpiredPersistentSessionShouldBeRenewedOnLogin(): void
97+
{
98+
$lastUpdatedAt = (new DateTime('-1day'))->setTimezone(new DateTimeZone('UTC'))->format('Y-m-d H:i:s');
99+
/** @var Session $sessionModel */
100+
$sessionModel = $this->_objectManager->create(SessionFactory::class)->create();
101+
$sessionModel->setCustomerId($this->customer->getId());
102+
$sessionModel->setUpdatedAt($lastUpdatedAt);
103+
$sessionModel->save();
104+
$event = new Event();
105+
$observer = new Observer(['event' => $event]);
106+
$event->setData('customer', $this->customer);
107+
$this->_persistentSession->setRememberMeChecked(true);
108+
$this->_model->execute($observer);
109+
/** @var Session $sessionModel */
110+
$sessionModel = $this->_objectManager->create(Session::class);
71111
$sessionModel->loadByCustomerId(1);
72-
$this->assertEquals(1, $sessionModel->getCustomerId());
112+
$this->assertGreaterThan($lastUpdatedAt, $sessionModel->getUpdatedAt());
73113
}
74114
}

0 commit comments

Comments
 (0)