‪TYPO3CMS  11.5
FrontendUserRepositoryTest.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 
25 use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
26 
27 class ‪FrontendUserRepositoryTest extends FunctionalTestCase
28 {
29  protected ‪$coreExtensionsToLoad = ['felogin'];
31 
32  protected function ‪setUp(): void
33  {
34  parent::setUp();
35 
36  $context = new ‪Context();
37  ‪$GLOBALS['TSFE'] = $this->getMockBuilder(TypoScriptFrontendController::class)
38  ->disableOriginalConstructor()
39  ->getMock()
40  ;
41 
42  ‪$GLOBALS['TSFE']->fe_user = new ‪FrontendUserAuthentication();
43 
44  $this->repository = new ‪FrontendUserRepository(
45  new ‪UserService(),
46  $context
47  );
48 
49  $this->importCSVDataSet(__DIR__ . '/../../Fixtures/fe_users.csv');
50  }
51 
55  public function ‪getTable(): void
56  {
57  self::assertSame('fe_users', $this->repository->getTable());
58  }
59 
63  public function ‪findEmailByUsernameOrEmailOnPages(): void
64  {
65  self::assertNull($this->repository->findEmailByUsernameOrEmailOnPages(''));
66  self::assertNull($this->repository->findEmailByUsernameOrEmailOnPages('non-existent-email-or-username'));
67  self::assertNull($this->repository->findEmailByUsernameOrEmailOnPages('user-with-username-without-email'));
68  self::assertNull($this->repository->findEmailByUsernameOrEmailOnPages('foobar', [99]));
69 
70  self::assertSame('foo@bar.baz', $this->repository->findEmailByUsernameOrEmailOnPages('foobar'));
71  self::assertSame('foo@bar.baz', $this->repository->findEmailByUsernameOrEmailOnPages('foo@bar.baz'));
72  }
73 
77  public function ‪existsUserWithHash(): void
78  {
79  self::assertFalse($this->repository->existsUserWithHash('non-existent-hash'));
80  self::assertTrue($this->repository->existsUserWithHash('cf8edd6fa435b4a9fcbb953f81bd84f2'));
81  }
82 
87  public function ‪fetchUserInformationByEmail(string $emailAddress, array $expected): void
88  {
89  // strval() is used since not all of the DBMS return an integer for the "uid" field
90  self::assertSame($expected, array_map('strval', $this->repository->fetchUserInformationByEmail($emailAddress)));
91  }
92 
94  {
95  return [
96  'foo@bar.baz' => [
97  'foo@bar.baz',
98  [
99  'uid' => '1',
100  'username' => 'foobar',
101  'email' => 'foo@bar.baz',
102  'first_name' => '',
103  'middle_name' => '',
104  'last_name' => '',
105  ],
106  ],
107  '' => [
108  '',
109  [
110  'uid' => '2',
111  'username' => 'user-with-username-without-email',
112  'email' => '',
113  'first_name' => '',
114  'middle_name' => '',
115  'last_name' => '',
116  ],
117  ],
118  'non existing user' => [
119  'non-existing@user.com',
120  [],
121  ],
122  ];
123  }
124 
128  public function ‪findOneByForgotPasswordHash(): void
129  {
130  self::assertNull($this->repository->findOneByForgotPasswordHash(''));
131  self::assertNull($this->repository->findOneByForgotPasswordHash('non-existent-hash'));
132  self::assertIsArray($this->repository->findOneByForgotPasswordHash('cf8edd6fa435b4a9fcbb953f81bd84f2'));
133  }
134 
138  public function ‪findRedirectIdPageByUserId(): void
139  {
140  self::assertNull($this->repository->findRedirectIdPageByUserId(99));
141  self::assertSame(10, $this->repository->findRedirectIdPageByUserId(1));
142  }
143 
147  public function ‪updateForgotHashForUserByEmail(): void
148  {
149  $email = 'foo@bar.baz';
150  $newPasswordHash = 'new-hash';
151 
152  $this->repository->updateForgotHashForUserByEmail($email, $newPasswordHash);
153 
154  $queryBuilder = $this->getConnectionPool()
155  ->getConnectionForTable('fe_users')
156  ->createQueryBuilder();
157 
158  $query = $queryBuilder
159  ->select('felogin_forgotHash')
160  ->from('fe_users')
161  ->where($queryBuilder->expr()->eq(
162  'email',
163  $queryBuilder->createNamedParameter($email)
164  ))
165  ;
166 
167  self::assertSame($newPasswordHash, $query->executeQuery()->fetchOne());
168  }
169 
173  public function ‪updatePasswordAndInvalidateHash(): void
174  {
175  $this->repository->updatePasswordAndInvalidateHash('cf8edd6fa435b4a9fcbb953f81bd84f2', 'new-password');
176 
177  $queryBuilder = $this->getConnectionPool()
178  ->getConnectionForTable('fe_users')
179  ->createQueryBuilder();
180 
181  $query = $queryBuilder
182  ->select('*')
183  ->from('fe_users')
184  ->where($queryBuilder->expr()->eq(
185  'uid',
186  $queryBuilder->createNamedParameter(1)
187  ))
188  ;
189 
190  $user = $query->executeQuery()->fetchAssociative();
191 
192  self::assertSame('new-password', $user['password']);
193  self::assertSame('', $user['felogin_forgotHash']);
194  }
195 }
‪TYPO3\CMS\FrontendLogin\Tests\Functional\Domain\Repository\FrontendUserRepositoryTest\updatePasswordAndInvalidateHash
‪updatePasswordAndInvalidateHash()
Definition: FrontendUserRepositoryTest.php:173
‪TYPO3\CMS\FrontendLogin\Tests\Functional\Domain\Repository\FrontendUserRepositoryTest\fetchUserInformationByEmailDataProvider
‪fetchUserInformationByEmailDataProvider()
Definition: FrontendUserRepositoryTest.php:93
‪TYPO3\CMS\FrontendLogin\Tests\Functional\Domain\Repository\FrontendUserRepositoryTest\getTable
‪getTable()
Definition: FrontendUserRepositoryTest.php:55
‪TYPO3\CMS\FrontendLogin\Domain\Repository\FrontendUserRepository
Definition: FrontendUserRepository.php:30
‪TYPO3\CMS\FrontendLogin\Tests\Functional\Domain\Repository\FrontendUserRepositoryTest\findOneByForgotPasswordHash
‪findOneByForgotPasswordHash()
Definition: FrontendUserRepositoryTest.php:128
‪TYPO3\CMS\FrontendLogin\Tests\Functional\Domain\Repository\FrontendUserRepositoryTest\$repository
‪FrontendUserRepository $repository
Definition: FrontendUserRepositoryTest.php:30
‪TYPO3\CMS\FrontendLogin\Tests\Functional\Domain\Repository\FrontendUserRepositoryTest\existsUserWithHash
‪existsUserWithHash()
Definition: FrontendUserRepositoryTest.php:77
‪TYPO3\CMS\FrontendLogin\Tests\Functional\Domain\Repository\FrontendUserRepositoryTest\$coreExtensionsToLoad
‪$coreExtensionsToLoad
Definition: FrontendUserRepositoryTest.php:29
‪TYPO3\CMS\FrontendLogin\Tests\Functional\Domain\Repository\FrontendUserRepositoryTest\fetchUserInformationByEmail
‪fetchUserInformationByEmail(string $emailAddress, array $expected)
Definition: FrontendUserRepositoryTest.php:87
‪TYPO3\CMS\Core\Context\Context
Definition: Context.php:53
‪TYPO3\CMS\FrontendLogin\Service\UserService
Definition: UserService.php:26
‪TYPO3\CMS\FrontendLogin\Tests\Functional\Domain\Repository\FrontendUserRepositoryTest
Definition: FrontendUserRepositoryTest.php:28
‪TYPO3\CMS\FrontendLogin\Tests\Functional\Domain\Repository\FrontendUserRepositoryTest\findRedirectIdPageByUserId
‪findRedirectIdPageByUserId()
Definition: FrontendUserRepositoryTest.php:138
‪TYPO3\CMS\FrontendLogin\Tests\Functional\Domain\Repository\FrontendUserRepositoryTest\setUp
‪setUp()
Definition: FrontendUserRepositoryTest.php:32
‪TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController
Definition: TypoScriptFrontendController.php:104
‪TYPO3\CMS\FrontendLogin\Tests\Functional\Domain\Repository\FrontendUserRepositoryTest\updateForgotHashForUserByEmail
‪updateForgotHashForUserByEmail()
Definition: FrontendUserRepositoryTest.php:147
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:25
‪TYPO3\CMS\Frontend\Authentication\FrontendUserAuthentication
Definition: FrontendUserAuthentication.php:32
‪TYPO3\CMS\FrontendLogin\Tests\Functional\Domain\Repository\FrontendUserRepositoryTest\findEmailByUsernameOrEmailOnPages
‪findEmailByUsernameOrEmailOnPages()
Definition: FrontendUserRepositoryTest.php:63
‪TYPO3\CMS\FrontendLogin\Tests\Functional\Domain\Repository
Definition: FrontendUserGroupRepositoryTest.php:18