Skip to content

Commit 721d228

Browse files
committed
Merge remote-tracking branch 'origin/MAGETWO-52593' into BUGS
2 parents 092f01f + 80c52cb commit 721d228

File tree

3 files changed

+157
-0
lines changed

3 files changed

+157
-0
lines changed
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
<?php
2+
/**
3+
* Copyright © 2016 Magento. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Customer\CustomerData\Plugin;
7+
8+
use Magento\Customer\Model\Session;
9+
use Magento\Framework\App\Response\Http;
10+
use Magento\Framework\Stdlib\Cookie\CookieMetadataFactory;
11+
use Magento\Framework\Stdlib\Cookie\PhpCookieManager;
12+
13+
class SessionChecker
14+
{
15+
/**
16+
* @var PhpCookieManager
17+
*/
18+
private $cookieManager;
19+
20+
/**
21+
* @var CookieMetadataFactory
22+
*/
23+
private $cookieMetadataFactory;
24+
25+
/**
26+
* @var Session
27+
*/
28+
private $session;
29+
30+
/**
31+
* @param PhpCookieManager $cookieManager
32+
* @param CookieMetadataFactory $cookieMetadataFactory
33+
* @param Session $session
34+
*/
35+
public function __construct(
36+
PhpCookieManager $cookieManager,
37+
CookieMetadataFactory $cookieMetadataFactory,
38+
Session $session
39+
) {
40+
$this->cookieManager = $cookieManager;
41+
$this->cookieMetadataFactory = $cookieMetadataFactory;
42+
$this->session = $session;
43+
}
44+
45+
/**
46+
* Delete frontend session cookie if customer session is expired
47+
*
48+
* @param Http $response
49+
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
50+
* @return void
51+
*/
52+
public function beforeSendVary(Http $response)
53+
{
54+
if (!$this->session->isLoggedIn()) {
55+
$metadata = $this->cookieMetadataFactory->createCookieMetadata();
56+
$metadata->setPath('/');
57+
$this->cookieManager->deleteCookie('mage-cache-sessid', $metadata);
58+
}
59+
}
60+
}
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
<?php
2+
/**
3+
* Copyright © 2016 Magento. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Customer\Test\Unit\CustomerData\Plugin;
7+
8+
use Magento\Customer\CustomerData\Plugin\SessionChecker;
9+
10+
class SessionCheckerTest extends \PHPUnit_Framework_TestCase
11+
{
12+
/**
13+
* @var SessionChecker
14+
*/
15+
protected $plugin;
16+
17+
/**
18+
* @var \Magento\Framework\Stdlib\Cookie\PhpCookieManager|\PHPUnit_Framework_MockObject_MockObject
19+
*/
20+
protected $cookieManager;
21+
22+
/**
23+
* @var \Magento\Framework\Stdlib\Cookie\CookieMetadataFactory|\PHPUnit_Framework_MockObject_MockObject
24+
*/
25+
protected $metadataFactory;
26+
27+
/**
28+
* @var \Magento\Framework\Stdlib\Cookie\CookieMetadata|\PHPUnit_Framework_MockObject_MockObject
29+
*/
30+
protected $metadata;
31+
32+
/**
33+
* @var \Magento\Customer\Model\Session|\PHPUnit_Framework_MockObject_MockObject
34+
*/
35+
protected $session;
36+
37+
/**
38+
* @var \Magento\Framework\App\Response\Http|\PHPUnit_Framework_MockObject_MockObject
39+
*/
40+
protected $response;
41+
42+
public function setUp()
43+
{
44+
$this->cookieManager = $this->getMockBuilder('Magento\Framework\Stdlib\Cookie\PhpCookieManager')
45+
->disableOriginalConstructor()
46+
->getMock();
47+
$this->metadataFactory = $this->getMockBuilder('Magento\Framework\Stdlib\Cookie\CookieMetadataFactory')
48+
->disableOriginalConstructor()
49+
->getMock();
50+
$this->metadata = $this->getMockBuilder('Magento\Framework\Stdlib\Cookie\CookieMetadata')
51+
->disableOriginalConstructor()
52+
->getMock();
53+
$this->session = $this->getMockBuilder('Magento\Customer\Model\Session')
54+
->disableOriginalConstructor()
55+
->getMock();
56+
$this->response = $this->getMockBuilder('Magento\Framework\App\Response\Http')
57+
->disableOriginalConstructor()
58+
->getMock();
59+
60+
$this->plugin = new SessionChecker($this->cookieManager, $this->metadataFactory, $this->session);
61+
}
62+
63+
/**
64+
* @param bool $result
65+
* @param string $callCount
66+
* @return void
67+
* @dataProvider testAfterIsLoggedInDataProvider
68+
*/
69+
public function testBeforeSendVary($result, $callCount)
70+
{
71+
$this->session->expects($this->once())
72+
->method('isLoggedIn')
73+
->willReturn($result);
74+
75+
$this->metadataFactory->expects($this->{$callCount}())
76+
->method('createCookieMetadata')
77+
->willReturn($this->metadata);
78+
$this->metadata->expects($this->{$callCount}())
79+
->method('setPath')
80+
->with('/');
81+
$this->cookieManager->expects($this->{$callCount}())
82+
->method('deleteCookie')
83+
->with('mage-cache-sessid', $this->metadata);
84+
$this->plugin->beforeSendVary($this->response);
85+
}
86+
87+
public function testAfterIsLoggedInDataProvider()
88+
{
89+
return [
90+
[false, 'once'],
91+
[true, 'never']
92+
];
93+
}
94+
}

app/code/Magento/Customer/etc/frontend/di.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,4 +57,7 @@
5757
<type name="Magento\Checkout\Block\Cart\Sidebar">
5858
<plugin name="customer_cart" type="\Magento\Customer\Model\Cart\ConfigPlugin" />
5959
</type>
60+
<type name="Magento\Framework\App\Response\Http">
61+
<plugin name="session_checker" type="Magento\Customer\CustomerData\Plugin\SessionChecker" />
62+
</type>
6063
</config>

0 commit comments

Comments
 (0)