‪TYPO3CMS  10.4
RedirectHandlerTest.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /*
6  * This file is part of the TYPO3 CMS project.
7  *
8  * It is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License, either version 2
10  * of the License, or any later version.
11  *
12  * For the full copyright and license information, please read the
13  * LICENSE.txt file that was distributed with this source code.
14  *
15  * The TYPO3 project - inspiring people to share!
16  */
17 
19 
20 use Generator;
21 use Psr\Http\Message\ServerRequestInterface;
28 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
29 
33 class ‪RedirectHandlerTest extends UnitTestCase
34 {
40  protected ‪$resetSingletonInstances = true;
41 
45  protected ‪$subject;
46 
50  protected ‪$typo3Request;
51 
56 
60  protected ‪$redirectModeHandler;
61 
65  protected ‪$context;
66 
67  protected function ‪setUp(): void
68  {
69  parent::setUp();
70 
71  $this->serverRequestHandler = $this->prophesize(ServerRequestHandler::class);
72  $this->redirectModeHandler = $this->prophesize(RedirectModeHandler::class);
73  $this->context = $this->prophesize(Context::class);
74 
75  ‪$GLOBALS['TSFE'] = $this->prophesize(TypoScriptFrontendController::class)->reveal();
76 
77  $this->subject = new ‪RedirectHandler(
78  $this->serverRequestHandler->reveal(),
79  $this->redirectModeHandler->reveal(),
80  $this->context->reveal()
81  );
82  }
83 
90  public function ‪processShouldReturnStringForLoginTypeLogout(string $expect, string $redirectMode): void
91  {
92  $this->redirectModeHandler->redirectModeLogout(0)->willReturn('');
93 
94  self::assertEquals($expect, $this->subject->processRedirect('logout', new ‪RedirectConfiguration($redirectMode, '', 0, '', 0, 0), ''));
95  }
96 
97  public function ‪loginTypeLogoutDataProvider(): Generator
98  {
99  yield 'empty string on empty redirect mode' => ['', ''];
100  yield 'empty string on redirect mode logout' => ['', 'logout'];
101  }
102 
112  string $expected,
113  array $redirectModes,
114  array $body,
115  bool $userLoggedIn
116  ): void {
117  $this->‪setUserLoggedIn($userLoggedIn);
118 
119  $this->serverRequestHandler
120  ->getRedirectUrlRequestParam()
121  ->willReturn($body['return_url'] ?? '');
122 
123  $configuration = ‪RedirectConfiguration::fromSettings(['redirectMode' => $redirectModes]);
124  self::assertEquals($expected, $this->subject->getLogoutFormRedirectUrl($configuration, 13, false));
125  }
126 
127  public function ‪getLogoutRedirectUrlDataProvider(): Generator
128  {
129  yield 'empty redirect mode should return empty returnUrl' => ['', [], [], false];
130  yield 'redirect mode getpost should return param return_url' => [
131  'https://dummy.url',
132  ['getpost'],
133  ['return_url' => 'https://dummy.url'],
134  false
135  ];
136  yield 'redirect mode getpost,logout should return param return_url on not logged in user' => [
137  'https://dummy.url/3',
138  ['getpost', 'logout'],
139  ['return_url' => 'https://dummy.url/3'],
140  false
141  ];
142  }
143 
148  ): void {
149  $this->‪setUserLoggedIn(true);
150 
151  $this->subject = new ‪RedirectHandler(
152  $this->serverRequestHandler->reveal(),
153  $this->redirectModeHandler->reveal(),
154  $this->context->reveal()
155  );
156 
157  $this->serverRequestHandler
158  ->getRedirectUrlRequestParam()
159  ->willReturn([]);
160 
161  $this->redirectModeHandler
162  ->redirectModeLogout(3)
163  ->willReturn('https://logout.url');
164 
165  $configuration = ‪RedirectConfiguration::fromSettings(['redirectMode' => ['logout']]);
166  self::assertEquals('https://logout.url', $this->subject->getLogoutFormRedirectUrl($configuration, 3, false));
167  }
168 
169  protected function ‪setUserLoggedIn(bool $userLoggedIn): void
170  {
171  $this->context
172  ->getPropertyFromAspect('frontend.user', 'isLoggedIn')
173  ->willReturn($userLoggedIn);
174  }
175 
176  public function ‪getLoginFormRedirectUrlDataProvider(): array
177  {
178  return [
179  'redirect disabled' => [
180  'no url',
181  'getpost',
182  true,
183  '',
184  ],
185  'redirect enabled, GET/POST redirect mode not configured' => [
186  'https://redirect.url',
187  'login',
188  false,
189  '',
190  ],
191  'redirect enabled, GET/POST redirect mode configured' => [
192  'https://redirect.url',
193  'login,getpost',
194  false,
195  'https://redirect.url',
196  ],
197  ];
198  }
199 
205  string $redirectUrl,
206  string $redirectMode,
207  bool $redirectDisabled,
208  string $expected
209  ) {
210  $this->subject = new ‪RedirectHandler(
211  $this->serverRequestHandler->reveal(),
212  $this->redirectModeHandler->reveal(),
213  $this->context->reveal()
214  );
215 
216  $this->serverRequestHandler->getRedirectUrlRequestParam()->willReturn($redirectUrl);
217  $configuration = ‪RedirectConfiguration::fromSettings(['redirectMode' => $redirectMode]);
218  self::assertEquals($expected, $this->subject->getLoginFormRedirectUrl($configuration, $redirectDisabled));
219  }
220 }
‪TYPO3\CMS\FrontendLogin\Tests\Unit\Redirect\RedirectHandlerTest\$resetSingletonInstances
‪bool $resetSingletonInstances
Definition: RedirectHandlerTest.php:39
‪TYPO3\CMS\FrontendLogin\Redirect\RedirectModeHandler
Definition: RedirectModeHandler.php:34
‪TYPO3\CMS\FrontendLogin\Tests\Unit\Redirect\RedirectHandlerTest\getLogoutRedirectUrlShouldReturnAlternativeRedirectUrl
‪getLogoutRedirectUrlShouldReturnAlternativeRedirectUrl(string $expected, array $redirectModes, array $body, bool $userLoggedIn)
Definition: RedirectHandlerTest.php:105
‪TYPO3\CMS\FrontendLogin\Tests\Unit\Redirect\RedirectHandlerTest\getLoginFormRedirectUrlDataProvider
‪getLoginFormRedirectUrlDataProvider()
Definition: RedirectHandlerTest.php:170
‪TYPO3\CMS\FrontendLogin\Tests\Unit\Redirect\RedirectHandlerTest\$redirectModeHandler
‪RedirectModeHandler $redirectModeHandler
Definition: RedirectHandlerTest.php:55
‪TYPO3\CMS\FrontendLogin\Redirect\ServerRequestHandler
Definition: ServerRequestHandler.php:29
‪TYPO3\CMS\FrontendLogin\Tests\Unit\Redirect\RedirectHandlerTest\loginTypeLogoutDataProvider
‪loginTypeLogoutDataProvider()
Definition: RedirectHandlerTest.php:91
‪TYPO3\CMS\FrontendLogin\Tests\Unit\Redirect\RedirectHandlerTest\getLoginFormRedirectUrlReturnsExpectedValue
‪getLoginFormRedirectUrlReturnsExpectedValue(string $redirectUrl, string $redirectMode, bool $redirectDisabled, string $expected)
Definition: RedirectHandlerTest.php:198
‪TYPO3\CMS\FrontendLogin\Tests\Unit\Redirect\RedirectHandlerTest\$subject
‪RedirectHandler $subject
Definition: RedirectHandlerTest.php:43
‪TYPO3\CMS\FrontendLogin\Tests\Unit\Redirect\RedirectHandlerTest
Definition: RedirectHandlerTest.php:34
‪TYPO3\CMS\Core\Context\Context
Definition: Context.php:53
‪TYPO3\CMS\FrontendLogin\Tests\Unit\Redirect\RedirectHandlerTest\getLogoutRedirectUrlDataProvider
‪getLogoutRedirectUrlDataProvider()
Definition: RedirectHandlerTest.php:121
‪TYPO3\CMS\FrontendLogin\Tests\Unit\Redirect\RedirectHandlerTest\setUserLoggedIn
‪setUserLoggedIn(bool $userLoggedIn)
Definition: RedirectHandlerTest.php:163
‪TYPO3\CMS\FrontendLogin\Tests\Unit\Redirect\RedirectHandlerTest\getLogoutRedirectUrlShouldReturnAlternativeRedirectUrlForLoggedInUserAndRedirectPageLogoutSet
‪getLogoutRedirectUrlShouldReturnAlternativeRedirectUrlForLoggedInUserAndRedirectPageLogoutSet()
Definition: RedirectHandlerTest.php:141
‪TYPO3\CMS\FrontendLogin\Tests\Unit\Redirect\RedirectHandlerTest\setUp
‪setUp()
Definition: RedirectHandlerTest.php:61
‪TYPO3\CMS\FrontendLogin\Tests\Unit\Redirect\RedirectHandlerTest\$serverRequestHandler
‪ServerRequestHandler $serverRequestHandler
Definition: RedirectHandlerTest.php:51
‪TYPO3\CMS\FrontendLogin\Tests\Unit\Redirect\RedirectHandlerTest\$context
‪Prophecy Prophecy ObjectProphecy Context $context
Definition: RedirectHandlerTest.php:59
‪TYPO3\CMS\FrontendLogin\Tests\Unit\Redirect\RedirectHandlerTest\$typo3Request
‪ServerRequestInterface $typo3Request
Definition: RedirectHandlerTest.php:47
‪TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController
Definition: TypoScriptFrontendController.php:98
‪TYPO3\CMS\FrontendLogin\Tests\Unit\Redirect
Definition: RedirectHandlerTest.php:18
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:5
‪TYPO3\CMS\FrontendLogin\Tests\Unit\Redirect\RedirectHandlerTest\processShouldReturnStringForLoginTypeLogout
‪processShouldReturnStringForLoginTypeLogout(string $expect, string $redirectMode)
Definition: RedirectHandlerTest.php:84
‪TYPO3\CMS\FrontendLogin\Configuration\RedirectConfiguration\fromSettings
‪static static fromSettings(array $settings)
Definition: RedirectConfiguration.php:99
‪TYPO3\CMS\FrontendLogin\Configuration\RedirectConfiguration
Definition: RedirectConfiguration.php:28
‪TYPO3\CMS\FrontendLogin\Redirect\RedirectHandler
Definition: RedirectHandler.php:30