‪TYPO3CMS  10.4
FrontendLoginControllerTest.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 Prophecy\Argument;
27 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
28 
32 class ‪FrontendLoginControllerTest extends UnitTestCase
33 {
34  protected ‪$resetSingletonInstances = true;
35 
39  protected ‪$language;
40 
41  public function ‪setUp(): void
42  {
43  $site = new ‪Site('test', 1, [
44  'identifier' => 'test',
45  'rootPageId' => 1,
46  'base' => '/',
47  'languages' => [
48  [
49  'languageId' => 0,
50  'locale' => 'en_US',
51  'typo3Language' => 'en',
52  'base' => '/',
53  ],
54  ]
55  ]);
56  $this->language = $site->getLanguageById(0);
57  parent::setUp();
58  }
59 
60  /*************************
61  * Test concerning getPreserveGetVars
62  *************************/
63 
68  {
69  return [
70  'special get var id is not preserved' => [
71  [
72  'id' => 42,
73  ],
74  '',
75  [],
76  ],
77  'simple additional parameter is not preserved if not specified in preservedGETvars' => [
78  [
79  'id' => 42,
80  'special' => 23,
81  ],
82  '',
83  [],
84  ],
85  'all params except ignored ones are preserved if preservedGETvars is set to "all"' => [
86  [
87  'id' => 42,
88  'special1' => 23,
89  'special2' => [
90  'foo' => 'bar',
91  ],
92  'tx_felogin_pi1' => [
93  'forgot' => 1,
94  ],
95  ],
96  'all',
97  [
98  'special1' => 23,
99  'special2' => [
100  'foo' => 'bar',
101  ],
102  ]
103  ],
104  'preserve single parameter' => [
105  [
106  'L' => 42,
107  ],
108  'L',
109  [
110  'L' => 42,
111  ],
112  ],
113  'preserve whole parameter array' => [
114  [
115  'L' => 3,
116  'tx_someext' => [
117  'foo' => 'simple',
118  'bar' => [
119  'baz' => 'simple',
120  ],
121  ],
122  ],
123  'L,tx_someext',
124  [
125  'L' => 3,
126  'tx_someext' => [
127  'foo' => 'simple',
128  'bar' => [
129  'baz' => 'simple',
130  ],
131  ],
132  ],
133  ],
134  'preserve part of sub array' => [
135  [
136  'L' => 3,
137  'tx_someext' => [
138  'foo' => 'simple',
139  'bar' => [
140  'baz' => 'simple',
141  ],
142  ],
143  ],
144  'L,tx_someext[bar]',
145  [
146  'L' => 3,
147  'tx_someext' => [
148  'bar' => [
149  'baz' => 'simple',
150  ],
151  ],
152  ],
153  ],
154  'preserve keys on different levels' => [
155  [
156  'L' => 3,
157  'no-preserve' => 'whatever',
158  'tx_ext2' => [
159  'foo' => 'simple',
160  ],
161  'tx_ext3' => [
162  'bar' => [
163  'baz' => 'simple',
164  ],
165  'go-away' => '',
166  ],
167  ],
168  'L,tx_ext2,tx_ext3[bar]',
169  [
170  'L' => 3,
171  'tx_ext2' => [
172  'foo' => 'simple',
173  ],
174  'tx_ext3' => [
175  'bar' => [
176  'baz' => 'simple',
177  ],
178  ],
179  ],
180  ],
181  'preserved value that does not exist in get' => [
182  [],
183  'L,foo%5Bbar%5D',
184  [],
185  ],
186  ];
187  }
188 
196  public function ‪getPreserveGetVarsReturnsCorrectResult(array $getArray, $preserveVars, $expected)
197  {
198  $_GET = $getArray;
199  $subject = $this->getAccessibleMock(FrontendLoginController::class, ['dummy'], ['_', $this->createMock(TypoScriptFrontendController::class)]);
200  $subject->cObj = $this->createMock(ContentObjectRenderer::class);
201  $subject->conf['preserveGETvars'] = $preserveVars;
202  self::assertSame($expected, $subject->_call('getPreserveGetVars'));
203  }
204 
206  {
207  return [
208  'Simple casing' => [
209  [
210  'username' => 'Holy',
211  'lastname' => 'Wood',
212  ],
213  [
214  'username.' => [
215  'case' => 'upper'
216  ]
217  ],
218  [
219  '###FEUSER_USERNAME###' => 'HOLY',
220  '###FEUSER_LASTNAME###' => 'Wood',
221  '###USER###' => 'HOLY'
222  ]
223  ],
224  'Default config applies' => [
225  [
226  'username' => 'Holy',
227  'lastname' => 'O" Mally',
228  ],
229  [
230  'username.' => [
231  'case' => 'upper'
232  ]
233  ],
234  [
235  '###FEUSER_USERNAME###' => 'HOLY',
236  '###FEUSER_LASTNAME###' => 'O&quot; Mally',
237  '###USER###' => 'HOLY'
238  ]
239  ],
240  'Specific config overrides default config' => [
241  [
242  'username' => 'Holy',
243  'lastname' => 'O" Mally',
244  ],
245  [
246  'username.' => [
247  'case' => 'upper'
248  ],
249  'lastname.' => [
250  'htmlSpecialChars' => '0'
251  ]
252  ],
253  [
254  '###FEUSER_USERNAME###' => 'HOLY',
255  '###FEUSER_LASTNAME###' => 'O" Mally',
256  '###USER###' => 'HOLY'
257  ]
258  ],
259  'No given user returns empty array' => [
260  null,
261  [
262  'username.' => [
263  'case' => 'upper'
264  ],
265  'lastname.' => [
266  'htmlSpecialChars' => '0'
267  ]
268  ],
269  []
270  ],
271  ];
272  }
273 
278  public function ‪processUserFieldsRespectsDefaultConfigurationForStdWrap($userRecord, $fieldConf, $expectedMarkers)
279  {
280  $tsfe = $this->prophesize(TypoScriptFrontendController::class);
281  $tsfe->fe_user = new \stdClass();
282  $tsfe->fe_user->user = $userRecord;
283  $tsfe->getLanguage(Argument::any())->willReturn($this->language);
284  $conf = ['userfields.' => $fieldConf];
285  $subject = $this->getAccessibleMock(FrontendLoginController::class, ['dummy'], [null, $tsfe->reveal()]);
286  $subject->cObj = new ‪ContentObjectRenderer();
287  $subject->_set('conf', $conf);
288  self::assertEquals($expectedMarkers, $subject->_call('getUserFieldMarkers'));
289  }
290 
295  {
296  $tsfe = $this->prophesize(TypoScriptFrontendController::class);
297  $tsfe->getLanguage(Argument::any())->willReturn($this->language);
298  $conf = [
299  'redirectMode' => 'refererDomains',
300  'domains' => 'example.com'
301  ];
302  $subject = $this->getAccessibleMock(FrontendLoginController::class, ['dummy'], [null, $tsfe->reveal()]);
303  $subject->_set('conf', $conf);
304  $subject->_set('logintype', ‪LoginType::LOGIN);
305  $subject->_set('referer', 'http://www.example.com/snafu');
306  $subject->_set('userIsLoggedIn', true);
307  self::assertSame(['http://www.example.com/snafu'], $subject->_call('processRedirect'));
308  }
309 }
‪TYPO3\CMS\Felogin\Tests\Unit\Controller\FrontendLoginControllerTest\setUp
‪setUp()
Definition: FrontendLoginControllerTest.php:40
‪TYPO3\CMS\Felogin\Tests\Unit\Controller\FrontendLoginControllerTest\processUserFieldsRespectsDefaultConfigurationForStdWrapDataProvider
‪processUserFieldsRespectsDefaultConfigurationForStdWrapDataProvider()
Definition: FrontendLoginControllerTest.php:204
‪TYPO3\CMS\Felogin\Controller\FrontendLoginController
Definition: FrontendLoginController.php:45
‪TYPO3\CMS\Core\Authentication\LoginType
Definition: LoginType.php:26
‪TYPO3\CMS\Core\Site\Entity\Site
Definition: Site.php:40
‪TYPO3\CMS\Core\Site\Entity\SiteLanguage
Definition: SiteLanguage.php:26
‪TYPO3\CMS\Felogin\Tests\Unit\Controller\FrontendLoginControllerTest\processUserFieldsRespectsDefaultConfigurationForStdWrap
‪processUserFieldsRespectsDefaultConfigurationForStdWrap($userRecord, $fieldConf, $expectedMarkers)
Definition: FrontendLoginControllerTest.php:277
‪TYPO3\CMS\Felogin\Tests\Unit\Controller\FrontendLoginControllerTest\processRedirectReferrerDomainsMatchesDomains
‪processRedirectReferrerDomainsMatchesDomains()
Definition: FrontendLoginControllerTest.php:293
‪TYPO3\CMS\Felogin\Tests\Unit\Controller
Definition: AbstractLoginControllerTest.php:18
‪TYPO3\CMS\Felogin\Tests\Unit\Controller\FrontendLoginControllerTest\getPreserveGetVarsReturnsCorrectResult
‪getPreserveGetVarsReturnsCorrectResult(array $getArray, $preserveVars, $expected)
Definition: FrontendLoginControllerTest.php:195
‪TYPO3\CMS\Felogin\Tests\Unit\Controller\FrontendLoginControllerTest\$language
‪SiteLanguage $language
Definition: FrontendLoginControllerTest.php:38
‪TYPO3\CMS\Felogin\Tests\Unit\Controller\FrontendLoginControllerTest\getPreserveGetVarsReturnsCorrectResultDataProvider
‪array getPreserveGetVarsReturnsCorrectResultDataProvider()
Definition: FrontendLoginControllerTest.php:66
‪TYPO3\CMS\Core\Authentication\LoginType\LOGIN
‪const LOGIN
Definition: LoginType.php:30
‪TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController
Definition: TypoScriptFrontendController.php:98
‪TYPO3\CMS\Felogin\Tests\Unit\Controller\FrontendLoginControllerTest\$resetSingletonInstances
‪$resetSingletonInstances
Definition: FrontendLoginControllerTest.php:34
‪TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer
Definition: ContentObjectRenderer.php:97
‪TYPO3\CMS\Felogin\Tests\Unit\Controller\FrontendLoginControllerTest
Definition: FrontendLoginControllerTest.php:33