Skip to content

Commit 5414b0b

Browse files
author
Dale Sikkema
committed
MAGETWO-37230: replace 'forwarded' parameter with flag
- add unit tests
1 parent a1dd507 commit 5414b0b

File tree

3 files changed

+92
-33
lines changed

3 files changed

+92
-33
lines changed

app/code/Magento/Backend/App/Action/Plugin/Authentication.php

Lines changed: 15 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -110,41 +110,23 @@ protected function _processNotLoggedInUser(\Magento\Framework\App\RequestInterfa
110110
}
111111
if (!$isRedirectNeeded && !$request->isForwarded()) {
112112
if ($request->getParam('isIframe')) {
113-
$request->setForwarded(
114-
true
115-
)->setRouteName(
116-
'adminhtml'
117-
)->setControllerName(
118-
'auth'
119-
)->setActionName(
120-
'deniedIframe'
121-
)->setDispatched(
122-
false
123-
);
113+
$request->setForwarded(true)
114+
->setRouteName('adminhtml')
115+
->setControllerName('auth')
116+
->setActionName('deniedIframe')
117+
->setDispatched(false);
124118
} elseif ($request->getParam('isAjax')) {
125-
$request->setForwarded(
126-
true
127-
)->setRouteName(
128-
'adminhtml'
129-
)->setControllerName(
130-
'auth'
131-
)->setActionName(
132-
'deniedJson'
133-
)->setDispatched(
134-
false
135-
);
119+
$request->setForwarded(true)
120+
->setRouteName('adminhtml')
121+
->setControllerName('auth')
122+
->setActionName('deniedJson')
123+
->setDispatched(false);
136124
} else {
137-
$request->setForwarded(
138-
true
139-
)->setRouteName(
140-
'adminhtml'
141-
)->setControllerName(
142-
'auth'
143-
)->setActionName(
144-
'login'
145-
)->setDispatched(
146-
false
147-
);
125+
$request->setForwarded(true)
126+
->setRouteName('adminhtml')
127+
->setControllerName('auth')
128+
->setActionName('login')
129+
->setDispatched(false);
148130
}
149131
}
150132
}

app/code/Magento/Backend/Test/Unit/App/Action/Plugin/AuthenticationTest.php

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,4 +84,79 @@ public function testAroundDispatchProlongStorage()
8484

8585
$this->assertEquals($expectedResult, $this->plugin->aroundDispatch($subject, $proceed, $request));
8686
}
87+
88+
/**
89+
* Calls aroundDispatch to access protected method _processNotLoggedInUser
90+
*
91+
* Data provider supplies different possibilities of request parameters and properties
92+
* @dataProvider userNotLoggedInRequest
93+
*/
94+
public function testProcessNotLoggedInUser($isIFrameParam, $isAjaxParam, $isForwardedFlag)
95+
{
96+
$subject = $this->getMockBuilder('Magento\Backend\Controller\Adminhtml\Index')
97+
->disableOriginalConstructor()
98+
->getMock();
99+
$request = $this->getMockBuilder('Magento\Framework\App\Request\Http')
100+
->disableOriginalConstructor()
101+
->getMock();
102+
$storage = $this->getMockBuilder('Magento\Backend\Model\Auth\Session')
103+
->disableOriginalConstructor()
104+
->getMock();
105+
106+
// Stubs to control the flow of execution in aroundDispatch
107+
$this->auth->expects($this->any())->method('getAuthStorage')->will($this->returnValue($storage));
108+
$request->expects($this->once())->method('getActionName')->will($this->returnValue('non/open/action/name'));
109+
$this->auth->expects($this->any())->method('getUser')->willReturn(false);
110+
$this->auth->expects($this->once())->method('isLoggedIn')->will($this->returnValue(false));
111+
$request->expects($this->any())->method('getPost')->willReturn(false);
112+
113+
// Test cases and expectations based on provided data
114+
$request->expects($this->once())->method('isForwarded')->willReturn($isForwardedFlag);
115+
$getParamCalls = 0;
116+
$actionName = '';
117+
118+
// If forwarded flag is set, getParam never gets called
119+
if (!$isForwardedFlag) {
120+
if ($isIFrameParam) {
121+
$getParamCalls = 1;
122+
$actionName = 'deniedIframe';
123+
} else if ($isAjaxParam) {
124+
$getParamCalls = 2;
125+
$actionName = 'deniedJson';
126+
} else {
127+
$getParamCalls = 2;
128+
$actionName = 'login';
129+
}
130+
}
131+
132+
$requestParams = [
133+
['isIframe', null, $isIFrameParam],
134+
['isAjax', null, $isAjaxParam]
135+
];
136+
137+
$setterCalls = $isForwardedFlag ? 0 : 1;
138+
$request->expects($this->exactly($getParamCalls))->method('getParam')->willReturnMap($requestParams);
139+
$request->expects($this->exactly($setterCalls))->method('setForwarded')->with(true)->willReturnSelf();
140+
$request->expects($this->exactly($setterCalls))->method('setRouteName')->with('adminhtml')->willReturnSelf();
141+
$request->expects($this->exactly($setterCalls))->method('setControllerName')->with('auth')->willReturnSelf();
142+
$request->expects($this->exactly($setterCalls))->method('setActionName')->with($actionName)->willReturnSelf();
143+
$request->expects($this->exactly($setterCalls))->method('setDispatched')->with(false)->willReturnSelf();
144+
145+
$expectedResult = 'expectedResult';
146+
$proceed = function ($request) use ($expectedResult)
147+
{
148+
return $expectedResult;
149+
};
150+
$this->assertEquals($expectedResult, $this->plugin->aroundDispatch($subject, $proceed, $request));
151+
}
152+
153+
public function userNotLoggedInRequest()
154+
{
155+
return [
156+
'iFrame' => [true, false, false],
157+
'Ajax' => [false, true, false],
158+
'Neither iFrame nor Ajax' => [false, false, false],
159+
'Forwarded request' => [true, true, true]
160+
];
161+
}
87162
}

lib/internal/Magento/Framework/HTTP/PhpEnvironment/Request.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -699,6 +699,7 @@ public function getBaseUrl()
699699

700700
/**
701701
* @return bool
702+
* @codeCoverageIgnore
702703
*/
703704
public function isForwarded()
704705
{
@@ -708,6 +709,7 @@ public function isForwarded()
708709
/**
709710
* @param bool $forwarded
710711
* @return $this
712+
* @codeCoverageIgnore
711713
*/
712714
public function setForwarded($forwarded)
713715
{

0 commit comments

Comments
 (0)