Skip to content

Commit e174556

Browse files
MC-15006: Incorrect Prolong responses
- check if session already exists in prolong action
1 parent 605ec6f commit e174556

File tree

2 files changed

+53
-17
lines changed

2 files changed

+53
-17
lines changed

setup/src/Magento/Setup/Controller/Session.php

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -52,23 +52,28 @@ public function prolongAction()
5252
try {
5353
if ($this->serviceManager->get(\Magento\Framework\App\DeploymentConfig::class)->isAvailable()) {
5454
$objectManager = $this->objectManagerProvider->get();
55-
/** @var \Magento\Framework\App\State $adminAppState */
56-
$adminAppState = $objectManager->get(\Magento\Framework\App\State::class);
57-
$adminAppState->setAreaCode(\Magento\Framework\App\Area::AREA_ADMINHTML);
58-
$sessionConfig = $objectManager->get(\Magento\Backend\Model\Session\AdminConfig::class);
59-
/** @var \Magento\Backend\Model\Url $backendUrl */
60-
$backendUrl = $objectManager->get(\Magento\Backend\Model\Url::class);
61-
$urlPath = parse_url($backendUrl->getBaseUrl(), PHP_URL_PATH);
62-
$cookiePath = $urlPath . 'setup';
63-
$sessionConfig->setCookiePath($cookiePath);
6455
/* @var \Magento\Backend\Model\Auth\Session $session */
65-
$session = $objectManager->create(
66-
\Magento\Backend\Model\Auth\Session::class,
67-
[
68-
'sessionConfig' => $sessionConfig,
69-
'appState' => $adminAppState
70-
]
71-
);
56+
$session = $objectManager->get(\Magento\Backend\Model\Auth\Session::class);
57+
// check if session was already set in \Magento\Setup\Mvc\Bootstrap\InitParamListener::authPreDispatch
58+
if (!$session->isSessionExists()) {
59+
/** @var \Magento\Framework\App\State $adminAppState */
60+
$adminAppState = $objectManager->get(\Magento\Framework\App\State::class);
61+
$adminAppState->setAreaCode(\Magento\Framework\App\Area::AREA_ADMINHTML);
62+
$sessionConfig = $objectManager->get(\Magento\Backend\Model\Session\AdminConfig::class);
63+
/** @var \Magento\Backend\Model\Url $backendUrl */
64+
$backendUrl = $objectManager->get(\Magento\Backend\Model\Url::class);
65+
$urlPath = parse_url($backendUrl->getBaseUrl(), PHP_URL_PATH);
66+
$cookiePath = $urlPath . 'setup';
67+
$sessionConfig->setCookiePath($cookiePath);
68+
/* @var \Magento\Backend\Model\Auth\Session $session */
69+
$session = $objectManager->create(
70+
\Magento\Backend\Model\Auth\Session::class,
71+
[
72+
'sessionConfig' => $sessionConfig,
73+
'appState' => $adminAppState
74+
]
75+
);
76+
}
7277
$session->prolong();
7378
return new \Zend\View\Model\JsonModel(['success' => true]);
7479
}

setup/src/Magento/Setup/Test/Unit/Controller/SessionTest.php

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,12 @@ public function testUnloginAction()
4848
$this->createPartialMock(\Magento\Framework\App\DeploymentConfig::class, ['isAvailable']);
4949
$deployConfigMock->expects($this->once())->method('isAvailable')->will($this->returnValue(true));
5050

51+
$sessionMock = $this->createPartialMock(
52+
\Magento\Backend\Model\Auth\Session::class,
53+
['prolong', 'isSessionExists']
54+
);
55+
$sessionMock->expects($this->once())->method('isSessionExists')->will($this->returnValue(false));
56+
5157
$stateMock = $this->createPartialMock(\Magento\Framework\App\State::class, ['setAreaCode']);
5258
$stateMock->expects($this->once())->method('setAreaCode');
5359

@@ -57,6 +63,7 @@ public function testUnloginAction()
5763
$urlMock = $this->createMock(\Magento\Backend\Model\Url::class);
5864

5965
$returnValueMap = [
66+
[\Magento\Backend\Model\Auth\Session::class, $sessionMock],
6067
[\Magento\Framework\App\State::class, $stateMock],
6168
[\Magento\Backend\Model\Session\AdminConfig::class, $sessionConfigMock],
6269
[\Magento\Backend\Model\Url::class, $urlMock]
@@ -68,7 +75,6 @@ public function testUnloginAction()
6875
->method('get')
6976
->will($this->returnValueMap($returnValueMap));
7077

71-
$sessionMock = $this->createPartialMock(\Magento\Backend\Model\Auth\Session::class, ['prolong']);
7278
$this->objectManager->expects($this->once())
7379
->method('create')
7480
->will($this->returnValue($sessionMock));
@@ -87,4 +93,29 @@ public function testIndexAction()
8793
$viewModel = $controller->unloginAction();
8894
$this->assertInstanceOf(\Zend\View\Model\ViewModel::class, $viewModel);
8995
}
96+
97+
/**
98+
* @covers \Magento\Setup\Controller\SystemConfig::prolongAction
99+
*/
100+
public function testProlongActionWithExistingSession()
101+
{
102+
$this->objectManagerProvider->expects($this->once())->method('get')->will(
103+
$this->returnValue($this->objectManager)
104+
);
105+
$deployConfigMock =
106+
$this->createPartialMock(\Magento\Framework\App\DeploymentConfig::class, ['isAvailable']);
107+
$deployConfigMock->expects($this->once())->method('isAvailable')->will($this->returnValue(true));
108+
$sessionMock = $this->createPartialMock(
109+
\Magento\Backend\Model\Auth\Session::class,
110+
['prolong', 'isSessionExists']
111+
);
112+
$sessionMock->expects($this->once())->method('isSessionExists')->will($this->returnValue(true));
113+
114+
$this->serviceManager->expects($this->once())->method('get')->will($this->returnValue($deployConfigMock));
115+
$this->objectManager->expects($this->once())
116+
->method('get')
117+
->will($this->returnValue($sessionMock));
118+
$controller = new Session($this->serviceManager, $this->objectManagerProvider);
119+
$this->assertEquals(new \Zend\View\Model\JsonModel(['success' => true]), $controller->prolongAction());
120+
}
90121
}

0 commit comments

Comments
 (0)