‪TYPO3CMS  ‪main
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 
20 use PHPUnit\Framework\Attributes\Test;
25 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
26 
27 final class ‪LoginProviderResolverTest extends UnitTestCase
28 {
29  protected function ‪setUp(): void
30  {
31  parent::setUp();
32  unset(‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['backend']['loginProviders']);
33  }
34 
35  #[Test]
37  {
38  $this->expectException(\RuntimeException::class);
39  $this->expectExceptionCode(1433417281);
41  }
42 
43  #[Test]
45  {
46  $this->expectException(\RuntimeException::class);
47  $this->expectExceptionCode(1433417281);
48  ‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['backend']['loginProviders'] = 'foo';
50  }
51 
52  #[Test]
54  {
55  $this->expectException(\RuntimeException::class);
56  $this->expectExceptionCode(1433417281);
57  ‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['backend']['loginProviders'] = [];
59  }
60 
61  #[Test]
63  {
64  $this->expectException(\RuntimeException::class);
65  $this->expectExceptionCode(1433416043);
66  ‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['backend']['loginProviders'] = [
67  1433419736 => [],
68  ];
70  }
71 
72  #[Test]
74  {
75  $this->expectException(\RuntimeException::class);
76  $this->expectExceptionCode(1460977275);
77  ‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['backend']['loginProviders'] = [
78  1433419736 => [
79  'provider' => \stdClass::class,
80  ],
81  ];
83  }
84 
85  #[Test]
87  {
88  $this->expectException(\RuntimeException::class);
89  $this->expectExceptionCode(1433416044);
90  ‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['backend']['loginProviders'] = [
91  1433419736 => [
92  'provider' => UsernamePasswordLoginProvider::class,
93  'sorting' => 30,
94  'iconIdentifier' => 'foo',
95  ],
96  ];
98  }
99 
100  #[Test]
102  {
103  $this->expectException(\RuntimeException::class);
104  $this->expectExceptionCode(1433416045);
105  ‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['backend']['loginProviders'] = [
106  1433419736 => [
107  'provider' => UsernamePasswordLoginProvider::class,
108  'sorting' => 30,
109  'label' => 'foo',
110  ],
111  ];
113  }
114 
115  #[Test]
117  {
118  $this->expectException(\RuntimeException::class);
119  $this->expectExceptionCode(1433416046);
120  ‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['backend']['loginProviders'] = [
121  1433419736 => [
122  'provider' => UsernamePasswordLoginProvider::class,
123  'label' => 'foo',
124  'iconIdentifier' => 'foo',
125  ],
126  ];
128  }
129 
130  #[Test]
132  {
133  $loginProviders = [
134  1433419736 => [
135  'provider' => UsernamePasswordLoginProvider::class,
136  'sorting' => 30,
137  'label' => 'foo',
138  'iconIdentifier' => 'foo',
139  ],
140  ];
141 
142  ‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['backend']['loginProviders'] = $loginProviders;
143  $loginProviders[1433419736]['label'] = 'provided-by-constructor-argument';
144 
145  self::assertEquals(
146  'provided-by-constructor-argument',
147  (new ‪LoginProviderResolver($loginProviders))->getLoginProviderConfigurationByIdentifier('1433419736')['label']
148  );
149  }
150 
151  #[Test]
152  public function ‪hasLoginProviderTest(): void
153  {
154  $subject = (new ‪LoginProviderResolver($this->‪getDefaultLoginProviders()));
155 
156  self::assertFalse($subject->hasLoginProvider('123321123'));
157  self::assertTrue($subject->hasLoginProvider('123456789'));
158  self::assertTrue($subject->hasLoginProvider('987654321'));
159  }
160 
161  #[Test]
163  {
164  $subject = (new ‪LoginProviderResolver($this->‪getDefaultLoginProviders()));
165 
166  self::assertNotEmpty($subject->getLoginProviderConfigurationByIdentifier('123456789'));
167  self::assertEquals(
168  30,
169  $subject->getLoginProviderConfigurationByIdentifier('987654321')['sorting']
170  );
171  }
172 
173  #[Test]
174  public function ‪getLoginProvidersTest(): void
175  {
176  $resolvedLoginProviders = (new ‪LoginProviderResolver($this->‪getDefaultLoginProviders()))->getLoginProviders();
177 
178  self::assertCount(2, $resolvedLoginProviders);
179  // sorting is applied 987654321 is now first
180  self::assertEquals('bar', array_shift($resolvedLoginProviders)['label']);
181  }
182 
183  #[Test]
185  {
186  $subject = (new ‪LoginProviderResolver($this->‪getDefaultLoginProviders()));
187  self::assertEquals('987654321', $subject->getPrimaryLoginProviderIdentifier());
188  }
189 
190  #[Test]
192  {
193  $subject = (new ‪LoginProviderResolver($this->‪getDefaultLoginProviders()));
194 
195  // First provider is returned on "empty" request
196  self::assertEquals(
197  '987654321',
198  $subject->resolveLoginProviderIdentifierFromRequest(
199  new ‪ServerRequest(new ‪Uri('https://example.com')),
200  'be_lastLoginProvider'
201  )
202  );
203 
204  // First provider is returned on invalid request
205  self::assertEquals(
206  '987654321',
207  $subject->resolveLoginProviderIdentifierFromRequest(
208  (new ‪ServerRequest(new ‪Uri('https://example.com')))
209  ->withQueryParams(['loginProvider' => '1212121212']),
210  'be_lastLoginProvider'
211  )
212  );
213 
214  // query params contain provider
215  self::assertEquals(
216  '123456789',
217  $subject->resolveLoginProviderIdentifierFromRequest(
218  (new ‪ServerRequest(new ‪Uri('https://example.com')))
219  ->withQueryParams(['loginProvider' => '123456789']),
220  'be_lastLoginProvider'
221  )
222  );
223 
224  // cookie contains provider
225  self::assertEquals(
226  '123456789',
227  $subject->resolveLoginProviderIdentifierFromRequest(
228  (new ‪ServerRequest(new ‪Uri('https://example.com')))
229  ->withCookieParams(['be_lastLoginProvider' => '123456789']),
230  'be_lastLoginProvider'
231  )
232  );
233 
234  // query params and cookie contain provider - query params precedes
235  self::assertEquals(
236  '123456789',
237  $subject->resolveLoginProviderIdentifierFromRequest(
238  (new ‪ServerRequest(new ‪Uri('https://example.com')))
239  ->withQueryParams(['loginProvider' => '123456789'])
240  ->withCookieParams(['be_lastLoginProvider' => '121212121']),
241  'be_lastLoginProvider'
242  )
243  );
244  }
245 
246  protected function ‪getDefaultLoginProviders(): array
247  {
248  return [
249  '123456789' => [
250  'provider' => UsernamePasswordLoginProvider::class,
251  'sorting' => 20,
252  'label' => 'foo',
253  'iconIdentifier' => 'foo',
254  ],
255  '987654321' => [
256  'provider' => UsernamePasswordLoginProvider::class,
257  'sorting' => 30,
258  'label' => 'bar',
259  'iconIdentifier' => 'bar',
260  ],
261  ];
262  }
263 }
‪TYPO3\CMS\Backend\Tests\Unit\LoginProvider\LoginProviderResolverTest\getPrimaryLoginProviderIdentifierTest
‪getPrimaryLoginProviderIdentifierTest()
Definition: LoginProviderResolverTest.php:184
‪TYPO3\CMS\Backend\Tests\Unit\LoginProvider\LoginProviderResolverTest\validateAndSortLoginProvidersDetectsNonArrayProviderConfiguration
‪validateAndSortLoginProvidersDetectsNonArrayProviderConfiguration()
Definition: LoginProviderResolverTest.php:44
‪TYPO3\CMS\Backend\Tests\Unit\LoginProvider\LoginProviderResolverTest\getLoginProviderConfigurationByIdentifierTest
‪getLoginProviderConfigurationByIdentifierTest()
Definition: LoginProviderResolverTest.php:162
‪TYPO3\CMS\Backend\Tests\Unit\LoginProvider\LoginProviderResolverTest\getDefaultLoginProviders
‪getDefaultLoginProviders()
Definition: LoginProviderResolverTest.php:246
‪TYPO3\CMS\Backend\Tests\Unit\LoginProvider\LoginProviderResolverTest\setUp
‪setUp()
Definition: LoginProviderResolverTest.php:29
‪TYPO3\CMS\Core\Http\Uri
Definition: Uri.php:30
‪TYPO3\CMS\Backend\LoginProvider\LoginProviderResolver
Definition: LoginProviderResolver.php:37
‪TYPO3\CMS\Backend\Tests\Unit\LoginProvider\LoginProviderResolverTest\validateAndSortLoginProvidersDetectsMissingSorting
‪validateAndSortLoginProvidersDetectsMissingSorting()
Definition: LoginProviderResolverTest.php:116
‪TYPO3\CMS\Backend\Tests\Unit\LoginProvider\LoginProviderResolverTest
Definition: LoginProviderResolverTest.php:28
‪TYPO3\CMS\Backend\LoginProvider\UsernamePasswordLoginProvider
Definition: UsernamePasswordLoginProvider.php:32
‪TYPO3\CMS\Core\Http\ServerRequest
Definition: ServerRequest.php:39
‪TYPO3\CMS\Backend\Tests\Unit\LoginProvider\LoginProviderResolverTest\validateAndSortLoginProvidersDetectsMissingProviderConfiguration
‪validateAndSortLoginProvidersDetectsMissingProviderConfiguration()
Definition: LoginProviderResolverTest.php:36
‪TYPO3\CMS\Backend\Tests\Unit\LoginProvider\LoginProviderResolverTest\validateAndSortLoginProvidersDetectsMissingConfigurationForProvider
‪validateAndSortLoginProvidersDetectsMissingConfigurationForProvider()
Definition: LoginProviderResolverTest.php:62
‪TYPO3\CMS\Backend\Tests\Unit\LoginProvider\LoginProviderResolverTest\resolveLoginProviderIdentifierFromRequestTest
‪resolveLoginProviderIdentifierFromRequestTest()
Definition: LoginProviderResolverTest.php:191
‪TYPO3\CMS\Backend\Tests\Unit\LoginProvider\LoginProviderResolverTest\validateAndSortLoginProvidersDetectsIfNoProviderIsRegistered
‪validateAndSortLoginProvidersDetectsIfNoProviderIsRegistered()
Definition: LoginProviderResolverTest.php:53
‪$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:131
‪TYPO3\CMS\Backend\Tests\Unit\LoginProvider
Definition: LoginProviderResolverTest.php:18
‪TYPO3\CMS\Backend\Tests\Unit\LoginProvider\LoginProviderResolverTest\validateAndSortLoginProvidersDetectsMissingLabel
‪validateAndSortLoginProvidersDetectsMissingLabel()
Definition: LoginProviderResolverTest.php:86
‪TYPO3\CMS\Backend\Tests\Unit\LoginProvider\LoginProviderResolverTest\hasLoginProviderTest
‪hasLoginProviderTest()
Definition: LoginProviderResolverTest.php:152
‪TYPO3\CMS\Backend\Tests\Unit\LoginProvider\LoginProviderResolverTest\validateAndSortLoginProvidersDetectsMissingIconClass
‪validateAndSortLoginProvidersDetectsMissingIconClass()
Definition: LoginProviderResolverTest.php:101
‪TYPO3\CMS\Backend\Tests\Unit\LoginProvider\LoginProviderResolverTest\validateAndSortLoginProvidersDetectsWrongProvider
‪validateAndSortLoginProvidersDetectsWrongProvider()
Definition: LoginProviderResolverTest.php:73
‪TYPO3\CMS\Backend\Tests\Unit\LoginProvider\LoginProviderResolverTest\getLoginProvidersTest
‪getLoginProvidersTest()
Definition: LoginProviderResolverTest.php:174