3
3
* Copyright © Magento, Inc. All rights reserved.
4
4
* See COPYING.txt for license details.
5
5
*/
6
+ declare (strict_types=1 );
7
+
6
8
namespace Magento \Persistent \Observer ;
7
9
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
+
8
22
/**
9
23
* @magentoDataFixture Magento/Customer/_files/customer.php
24
+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
10
25
*/
11
- class SynchronizePersistentOnLoginObserverTest extends \ PHPUnit \ Framework \ TestCase
26
+ class SynchronizePersistentOnLoginObserverTest extends TestCase
12
27
{
13
28
/**
14
- * @var \Magento\Persistent\Observer\ SynchronizePersistentOnLoginObserver
29
+ * @var SynchronizePersistentOnLoginObserver
15
30
*/
16
31
protected $ _model ;
17
32
18
33
/**
19
- * @var \Magento\Framework\ ObjectManagerInterface
34
+ * @var ObjectManagerInterface
20
35
*/
21
36
protected $ _objectManager ;
22
37
@@ -30,45 +45,70 @@ class SynchronizePersistentOnLoginObserverTest extends \PHPUnit\Framework\TestCa
30
45
*/
31
46
protected $ _customerSession ;
32
47
48
+ /**
49
+ * @var CustomerInterface
50
+ */
51
+ private $ customer ;
52
+
53
+ /**
54
+ * @inheritDoc
55
+ */
33
56
protected function setUp (): void
34
57
{
35
- $ this ->_objectManager = \ Magento \ TestFramework \ Helper \ Bootstrap::getObjectManager ();
58
+ $ this ->_objectManager = Bootstrap::getObjectManager ();
36
59
$ this ->_persistentSession = $ this ->_objectManager ->get (\Magento \Persistent \Helper \Session::class);
37
60
$ this ->_customerSession = $ this ->_objectManager ->get (\Magento \Customer \Model \Session::class);
38
61
$ this ->_model = $ this ->_objectManager ->create (
39
- \ Magento \ Persistent \ Observer \ SynchronizePersistentOnLoginObserver::class,
62
+ SynchronizePersistentOnLoginObserver::class,
40
63
[
41
64
'persistentSession ' => $ this ->_persistentSession ,
42
65
'customerSession ' => $ this ->_customerSession
43
66
]
44
67
);
68
+ /** @var CustomerRepositoryInterface $customerRepository */
69
+ $ customerRepository = $ this ->_objectManager ->create (CustomerRepositoryInterface::class);
70
+ $ this ->customer = $ customerRepository ->getById (1 );
45
71
}
46
72
47
73
/**
48
- * @covers \Magento\Persistent\Observer\SynchronizePersistentOnLoginObserver::execute
74
+ * Test that persistent session is created on customer login
49
75
*/
50
- public function testSynchronizePersistentOnLogin ()
76
+ public function testSynchronizePersistentOnLogin (): void
51
77
{
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 );
63
84
$ this ->_persistentSession ->setRememberMeChecked (true );
64
85
$ this ->_model ->execute ($ observer );
65
-
66
86
// 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);
71
111
$ sessionModel ->loadByCustomerId (1 );
72
- $ this ->assertEquals ( 1 , $ sessionModel ->getCustomerId ());
112
+ $ this ->assertGreaterThan ( $ lastUpdatedAt , $ sessionModel ->getUpdatedAt ());
73
113
}
74
114
}
0 commit comments