Skip to content

Commit f206661

Browse files
committed
ACP2E-3813: Updating products using the Mass Action, resulted in an unexpected system logout
1 parent 768b444 commit f206661

File tree

3 files changed

+93
-58
lines changed

3 files changed

+93
-58
lines changed

app/design/adminhtml/Magento/backend/i18n/en_US.csv

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -549,4 +549,4 @@ Dashboard,Dashboard
549549
"Email to a Friend","Email to a Friend"
550550
"Invalid data type","Invalid data type"
551551
"Invalid value provided for attribute %1","Invalid value provided for attribute %1"
552-
552+
"The current session size exceeds configured maximum session size, consider increasing the configured value.","The current session size exceeds configured maximum session size, consider increasing the configured value."

lib/internal/Magento/Framework/Session/SaveHandler.php

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
<?php
22
/**
3-
* Copyright © Magento, Inc. All rights reserved.
4-
* See COPYING.txt for license details.
3+
* Copyright 2013 Adobe
4+
* All Rights Reserved.
55
*/
6-
76
namespace Magento\Framework\Session;
87

98
use Magento\Framework\App\Area;
@@ -17,7 +16,6 @@
1716
use Psr\Log\LoggerInterface;
1817

1918
/**
20-
* Magento session save handler.
2119
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
2220
*/
2321
class SaveHandler implements SaveHandlerInterface, ResetAfterRequestInterface
@@ -128,11 +126,22 @@ public function read($sessionId): string
128126
$sessionSize = $sessionData !== null ? strlen($sessionData) : 0;
129127

130128
if ($sessionMaxSize !== null && $sessionMaxSize < $sessionSize) {
131-
$sessionData = '';
132-
if ($this->appState->getAreaCode() === Area::AREA_FRONTEND) {
133-
$this->messageManager->addErrorMessage(
134-
__('There is an error. Please Contact store administrator.')
135-
);
129+
switch ($this->appState->getAreaCode()) {
130+
case Area::AREA_ADMINHTML:
131+
$this->messageManager->addNoticeMessage(
132+
__(
133+
'The current session size exceeds configured maximum session size,'
134+
. ' consider increasing the configured value.'
135+
)
136+
);
137+
break;
138+
case Area::AREA_FRONTEND:
139+
$this->messageManager->addErrorMessage(
140+
__('There is an error. Please Contact store administrator.')
141+
);
142+
//clear session data for all areas other than adminhtml
143+
default:
144+
$sessionData = '';
136145
}
137146
}
138147

lib/internal/Magento/Framework/Session/Test/Unit/SaveHandlerTest.php

Lines changed: 74 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,97 +1,88 @@
11
<?php
22
/**
3-
* Copyright © Magento, Inc. All rights reserved.
4-
* See COPYING.txt for license details.
3+
* Copyright 2021 Adobe
4+
* All Rights Reserved.
55
*/
66
declare(strict_types=1);
77

8-
/**
9-
* Test class for \Magento\Framework\Session\SaveHandler
10-
*/
11-
128
namespace Magento\Framework\Session\Test\Unit;
139

10+
use Magento\Framework\App\Area as AppArea;
11+
use Magento\Framework\App\State as AppState;
12+
use Magento\Framework\Message\ManagerInterface;
1413
use Magento\Framework\Session\Config\ConfigInterface;
1514
use Magento\Framework\Session\SaveHandler;
1615
use Magento\Framework\Session\SaveHandlerFactory;
1716
use Magento\Framework\Session\SaveHandlerInterface;
1817
use Magento\Framework\Session\SessionMaxSizeConfig;
19-
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
2018
use PHPUnit\Framework\MockObject\MockObject;
2119
use PHPUnit\Framework\TestCase;
20+
use Psr\Log\LoggerInterface;
2221

2322
/**
2423
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
2524
*/
2625
class SaveHandlerTest extends TestCase
2726
{
28-
/**
29-
* @var ObjectManager
30-
*/
31-
protected $helper;
32-
3327
/**
3428
* @var SaveHandler
3529
*/
36-
protected $saveHandler;
30+
private $saveHandler;
3731

3832
/**
3933
* @var SaveHandlerFactory|MockObject
4034
*/
41-
protected $saveHandlerFactoryMock;
35+
private $saveHandlerFactoryMock;
4236

4337
/**
4438
* @var SaveHandlerInterface|MockObject
4539
*/
46-
protected $saveHandlerAdapterMock;
40+
private $saveHandlerAdapterMock;
4741

4842
/**
4943
* @var ConfigInterface|MockObject
5044
*/
51-
protected $configMock;
45+
private $configMock;
5246

5347
/**
5448
* @var SessionMaxSizeConfig|MockObject
5549
*/
56-
protected $sessionMaxSizeConfigMock;
57-
58-
protected function setUp(): void
59-
{
60-
$this->configMock = $this->getMockBuilder(ConfigInterface::class)
61-
->disableOriginalConstructor()
62-
->getMockForAbstractClass();
50+
private $sessionMaxSizeConfigMock;
6351

64-
$this->sessionMaxSizeConfigMock = $this->getMockBuilder(SaveHandlerFactory::class)
65-
->disableOriginalConstructor()
66-
->addMethods(['getSessionMaxSize'])
67-
->getMock();
52+
/**
53+
* @var ManagerInterface|MockObject
54+
*/
55+
private $messageManagerMock;
6856

69-
$this->saveHandlerAdapterMock = $this->getMockBuilder(SaveHandlerInterface::class)
70-
->disableOriginalConstructor()
71-
->onlyMethods(['write'])
72-
->getMockForAbstractClass();
57+
/**
58+
* @var AppState|MockObject
59+
*/
60+
private $appStateMock;
7361

62+
protected function setUp(): void
63+
{
64+
$this->configMock = $this->createMock(ConfigInterface::class);
65+
$this->sessionMaxSizeConfigMock = $this->createMock(SessionMaxSizeConfig::class);
66+
$this->saveHandlerAdapterMock = $this->createMock(SaveHandlerInterface::class);
7467
$this->saveHandlerAdapterMock->expects($this->any())
7568
->method('write')
7669
->willReturn(true);
77-
78-
$this->saveHandlerFactoryMock = $this->getMockBuilder(SaveHandlerFactory::class)
79-
->disableOriginalConstructor()
80-
->onlyMethods(['create'])
81-
->getMock();
82-
70+
$this->saveHandlerFactoryMock = $this->createMock(SaveHandlerFactory::class);
8371
$this->saveHandlerFactoryMock->expects($this->any())
8472
->method('create')
8573
->willReturn($this->saveHandlerAdapterMock);
86-
87-
$this->helper = new ObjectManager($this);
88-
$this->saveHandler = $this->helper->getObject(
89-
SaveHandler::class,
90-
[
91-
'saveHandlerFactory' => $this->saveHandlerFactoryMock,
92-
'sessionConfig' => $this->configMock,
93-
'sessionMaxSizeConfig' => $this->sessionMaxSizeConfigMock,
94-
]
74+
$loggerMock = $this->createMock(LoggerInterface::class);
75+
$this->messageManagerMock = $this->createMock(ManagerInterface::class);
76+
$this->appStateMock = $this->createMock(AppState::class);
77+
78+
$this->saveHandler = new SaveHandler(
79+
$this->saveHandlerFactoryMock,
80+
$this->configMock,
81+
$loggerMock,
82+
$this->sessionMaxSizeConfigMock,
83+
SaveHandlerInterface::DEFAULT_HANDLER,
84+
$this->messageManagerMock,
85+
$this->appStateMock
9586
);
9687
}
9788

@@ -146,7 +137,14 @@ public function testReadMoreThanSessionMaxSize(): void
146137
->with('test_session_id')
147138
->willReturn('test_session_data');
148139

149-
$this->assertEquals(null, $this->saveHandler->read("test_session_id"));
140+
$this->appStateMock->expects($this->once())
141+
->method('getAreaCode')
142+
->willReturn(AppArea::AREA_FRONTEND);
143+
$this->messageManagerMock->expects($this->once())
144+
->method('addErrorMessage')
145+
->willReturnSelf();
146+
147+
$this->assertEmpty($this->saveHandler->read('test_session_id'));
150148
}
151149

152150
public function testReadSessionMaxZero(): void
@@ -162,6 +160,34 @@ public function testReadSessionMaxZero(): void
162160
->with('test_session_id')
163161
->willReturn('test_session_data');
164162

165-
$this->assertEquals(null, $this->saveHandler->read("test_session_id"));
163+
$this->appStateMock->expects($this->once())
164+
->method('getAreaCode')
165+
->willReturn(AppArea::AREA_FRONTEND);
166+
$this->messageManagerMock->expects($this->once())
167+
->method('addErrorMessage')
168+
->willReturnSelf();
169+
170+
$this->assertEmpty($this->saveHandler->read('test_session_id'));
171+
}
172+
173+
public function testReadMoreThanSessionMaxSizeAdmin(): void
174+
{
175+
$this->sessionMaxSizeConfigMock->expects($this->once())
176+
->method('getSessionMaxSize')
177+
->willReturn(1);
178+
179+
$this->saveHandlerAdapterMock->expects($this->once())
180+
->method('read')
181+
->with('test_session_id')
182+
->willReturn('test_session_data');
183+
184+
$this->appStateMock->expects($this->once())
185+
->method('getAreaCode')
186+
->willReturn(AppArea::AREA_ADMINHTML);
187+
$this->messageManagerMock->expects($this->once())
188+
->method('addNoticeMessage')
189+
->willReturnSelf();
190+
191+
$this->assertEquals('test_session_data', $this->saveHandler->read('test_session_id'));
166192
}
167193
}

0 commit comments

Comments
 (0)