‪TYPO3CMS  11.5
LoginProviderResolverTest.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 
24 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
25 
26 class ‪LoginProviderResolverTest extends UnitTestCase
27 {
28  protected function ‪setUp(): void
29  {
30  parent::setUp();
31  unset(‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['backend']['loginProviders']);
32  }
33 
38  {
39  $this->expectException(\RuntimeException::class);
40  $this->expectExceptionCode(1433417281);
42  }
43 
48  {
49  $this->expectException(\RuntimeException::class);
50  $this->expectExceptionCode(1433417281);
51  ‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['backend']['loginProviders'] = 'foo';
53  }
54 
59  {
60  $this->expectException(\RuntimeException::class);
61  $this->expectExceptionCode(1433417281);
62  ‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['backend']['loginProviders'] = [];
64  }
65 
70  {
71  $this->expectException(\RuntimeException::class);
72  $this->expectExceptionCode(1433416043);
73  ‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['backend']['loginProviders'] = [
74  1433419736 => [],
75  ];
77  }
78 
83  {
84  $this->expectException(\RuntimeException::class);
85  $this->expectExceptionCode(1460977275);
86  ‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['backend']['loginProviders'] = [
87  1433419736 => [
88  'provider' => \stdClass::class,
89  ],
90  ];
92  }
93 
98  {
99  $this->expectException(\RuntimeException::class);
100  $this->expectExceptionCode(1433416044);
101  ‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['backend']['loginProviders'] = [
102  1433419736 => [
103  'provider' => UsernamePasswordLoginProvider::class,
104  'sorting' => 30,
105  'icon-class' => 'foo',
106  ],
107  ];
109  }
110 
115  {
116  $this->expectException(\RuntimeException::class);
117  $this->expectExceptionCode(1433416045);
118  ‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['backend']['loginProviders'] = [
119  1433419736 => [
120  'provider' => UsernamePasswordLoginProvider::class,
121  'sorting' => 30,
122  'label' => 'foo',
123  ],
124  ];
126  }
127 
132  {
133  $this->expectException(\RuntimeException::class);
134  $this->expectExceptionCode(1433416046);
135  ‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['backend']['loginProviders'] = [
136  1433419736 => [
137  'provider' => UsernamePasswordLoginProvider::class,
138  'label' => 'foo',
139  'icon-class' => 'foo',
140  ],
141  ];
143  }
144 
149  {
150  $loginProviders = [
151  1433419736 => [
152  'provider' => UsernamePasswordLoginProvider::class,
153  'sorting' => 30,
154  'label' => 'foo',
155  'icon-class' => 'foo',
156  ],
157  ];
158 
159  ‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['backend']['loginProviders'] = $loginProviders;
160  $loginProviders[1433419736]['label'] = 'provided-by-constructor-argument';
161 
162  self::assertEquals(
163  'provided-by-constructor-argument',
164  (new ‪LoginProviderResolver($loginProviders))->getLoginProviderConfigurationByIdentifier('1433419736')['label']
165  );
166  }
167 
171  public function ‪hasLoginProviderTest(): void
172  {
173  $subject = (new ‪LoginProviderResolver($this->‪getDefaultLoginProviders()));
174 
175  self::assertFalse($subject->hasLoginProvider('123321123'));
176  self::assertTrue($subject->hasLoginProvider('123456789'));
177  self::assertTrue($subject->hasLoginProvider('987654321'));
178  }
179 
184  {
185  $subject = (new ‪LoginProviderResolver($this->‪getDefaultLoginProviders()));
186 
187  self::assertNotEmpty($subject->getLoginProviderConfigurationByIdentifier('123456789'));
188  self::assertEquals(
189  30,
190  $subject->getLoginProviderConfigurationByIdentifier('987654321')['sorting']
191  );
192  }
193 
197  public function ‪getLoginProvidersTest(): void
198  {
199  $resolvedLoginProviders = (new ‪LoginProviderResolver($this->‪getDefaultLoginProviders()))->getLoginProviders();
200 
201  self::assertCount(2, $resolvedLoginProviders);
202  // sorting is applied 987654321 is now first
203  self::assertEquals('bar', array_shift($resolvedLoginProviders)['label']);
204  }
205 
210  {
211  $subject = (new ‪LoginProviderResolver($this->‪getDefaultLoginProviders()));
212  self::assertEquals('987654321', $subject->getPrimaryLoginProviderIdentifier());
213  }
214 
219  {
220  $subject = (new ‪LoginProviderResolver($this->‪getDefaultLoginProviders()));
221 
222  // First provider is returned on "empty" request
223  self::assertEquals(
224  '987654321',
225  $subject->resolveLoginProviderIdentifierFromRequest(
226  new ‪ServerRequest(new ‪Uri('https://example.com')),
227  'be_lastLoginProvider'
228  )
229  );
230 
231  // First provider is returned on invalid request
232  self::assertEquals(
233  '987654321',
234  $subject->resolveLoginProviderIdentifierFromRequest(
235  (new ‪ServerRequest(new ‪Uri('https://example.com')))
236  ->withQueryParams(['loginProvider' => '1212121212']),
237  'be_lastLoginProvider'
238  )
239  );
240 
241  // query params contain provider
242  self::assertEquals(
243  '123456789',
244  $subject->resolveLoginProviderIdentifierFromRequest(
245  (new ‪ServerRequest(new ‪Uri('https://example.com')))
246  ->withQueryParams(['loginProvider' => '123456789']),
247  'be_lastLoginProvider'
248  )
249  );
250 
251  // cookie contains provider
252  self::assertEquals(
253  '123456789',
254  $subject->resolveLoginProviderIdentifierFromRequest(
255  (new ‪ServerRequest(new ‪Uri('https://example.com')))
256  ->withCookieParams(['be_lastLoginProvider' => '123456789']),
257  'be_lastLoginProvider'
258  )
259  );
260 
261  // query params and cookie contain provider - query params precedes
262  self::assertEquals(
263  '123456789',
264  $subject->resolveLoginProviderIdentifierFromRequest(
265  (new ‪ServerRequest(new ‪Uri('https://example.com')))
266  ->withQueryParams(['loginProvider' => '123456789'])
267  ->withCookieParams(['be_lastLoginProvider' => '121212121']),
268  'be_lastLoginProvider'
269  )
270  );
271  }
272 
273  protected function ‪getDefaultLoginProviders(): array
274  {
275  return [
276  '123456789' => [
277  'provider' => UsernamePasswordLoginProvider::class,
278  'sorting' => 20,
279  'label' => 'foo',
280  'icon-class' => 'foo',
281  ],
282  '987654321' => [
283  'provider' => UsernamePasswordLoginProvider::class,
284  'sorting' => 30,
285  'label' => 'bar',
286  'icon-class' => 'bar',
287  ],
288  ];
289  }
290 }
‪TYPO3\CMS\Backend\Tests\Unit\LoginProvider\LoginProviderResolverTest\getPrimaryLoginProviderIdentifierTest
‪getPrimaryLoginProviderIdentifierTest()
Definition: LoginProviderResolverTest.php:209
‪TYPO3\CMS\Backend\Tests\Unit\LoginProvider\LoginProviderResolverTest\validateAndSortLoginProvidersDetectsNonArrayProviderConfiguration
‪validateAndSortLoginProvidersDetectsNonArrayProviderConfiguration()
Definition: LoginProviderResolverTest.php:47
‪TYPO3\CMS\Backend\Tests\Unit\LoginProvider\LoginProviderResolverTest\getLoginProviderConfigurationByIdentifierTest
‪getLoginProviderConfigurationByIdentifierTest()
Definition: LoginProviderResolverTest.php:183
‪TYPO3\CMS\Backend\Tests\Unit\LoginProvider\LoginProviderResolverTest\getDefaultLoginProviders
‪getDefaultLoginProviders()
Definition: LoginProviderResolverTest.php:273
‪TYPO3\CMS\Backend\Tests\Unit\LoginProvider\LoginProviderResolverTest\setUp
‪setUp()
Definition: LoginProviderResolverTest.php:28
‪TYPO3\CMS\Core\Http\Uri
Definition: Uri.php:29
‪TYPO3\CMS\Backend\LoginProvider\LoginProviderResolver
Definition: LoginProviderResolver.php:37
‪TYPO3\CMS\Backend\Tests\Unit\LoginProvider\LoginProviderResolverTest\validateAndSortLoginProvidersDetectsMissingSorting
‪validateAndSortLoginProvidersDetectsMissingSorting()
Definition: LoginProviderResolverTest.php:131
‪TYPO3\CMS\Backend\Tests\Unit\LoginProvider\LoginProviderResolverTest
Definition: LoginProviderResolverTest.php:27
‪TYPO3\CMS\Backend\LoginProvider\UsernamePasswordLoginProvider
Definition: UsernamePasswordLoginProvider.php:29
‪TYPO3\CMS\Core\Http\ServerRequest
Definition: ServerRequest.php:37
‪TYPO3\CMS\Backend\Tests\Unit\LoginProvider\LoginProviderResolverTest\validateAndSortLoginProvidersDetectsMissingProviderConfiguration
‪validateAndSortLoginProvidersDetectsMissingProviderConfiguration()
Definition: LoginProviderResolverTest.php:37
‪TYPO3\CMS\Backend\Tests\Unit\LoginProvider\LoginProviderResolverTest\validateAndSortLoginProvidersDetectsMissingConfigurationForProvider
‪validateAndSortLoginProvidersDetectsMissingConfigurationForProvider()
Definition: LoginProviderResolverTest.php:69
‪TYPO3\CMS\Backend\Tests\Unit\LoginProvider\LoginProviderResolverTest\resolveLoginProviderIdentifierFromRequestTest
‪resolveLoginProviderIdentifierFromRequestTest()
Definition: LoginProviderResolverTest.php:218
‪TYPO3\CMS\Backend\Tests\Unit\LoginProvider\LoginProviderResolverTest\validateAndSortLoginProvidersDetectsIfNoProviderIsRegistered
‪validateAndSortLoginProvidersDetectsIfNoProviderIsRegistered()
Definition: LoginProviderResolverTest.php:58
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:25
‪TYPO3\CMS\Backend\Tests\Unit\LoginProvider\LoginProviderResolverTest\loginProviderResolverRespectsConstructorArgument
‪loginProviderResolverRespectsConstructorArgument()
Definition: LoginProviderResolverTest.php:148
‪TYPO3\CMS\Backend\Tests\Unit\LoginProvider
Definition: LoginProviderResolverTest.php:18
‪TYPO3\CMS\Backend\Tests\Unit\LoginProvider\LoginProviderResolverTest\validateAndSortLoginProvidersDetectsMissingLabel
‪validateAndSortLoginProvidersDetectsMissingLabel()
Definition: LoginProviderResolverTest.php:97
‪TYPO3\CMS\Backend\Tests\Unit\LoginProvider\LoginProviderResolverTest\hasLoginProviderTest
‪hasLoginProviderTest()
Definition: LoginProviderResolverTest.php:171
‪TYPO3\CMS\Backend\Tests\Unit\LoginProvider\LoginProviderResolverTest\validateAndSortLoginProvidersDetectsMissingIconClass
‪validateAndSortLoginProvidersDetectsMissingIconClass()
Definition: LoginProviderResolverTest.php:114
‪TYPO3\CMS\Backend\Tests\Unit\LoginProvider\LoginProviderResolverTest\validateAndSortLoginProvidersDetectsWrongProvider
‪validateAndSortLoginProvidersDetectsWrongProvider()
Definition: LoginProviderResolverTest.php:82
‪TYPO3\CMS\Backend\Tests\Unit\LoginProvider\LoginProviderResolverTest\getLoginProvidersTest
‪getLoginProvidersTest()
Definition: LoginProviderResolverTest.php:197