diff --git a/src/Database/Repository/UserDeletedRepository.php b/src/Database/Repository/UserDeletedRepository.php index 5dad404d89..72f3c1cfe8 100644 --- a/src/Database/Repository/UserDeletedRepository.php +++ b/src/Database/Repository/UserDeletedRepository.php @@ -9,8 +9,13 @@ declare(strict_types=1); namespace Friendica\Database\Repository; +use Exception; use Friendica\Database\Database; +use Friendica\Database\DatabaseException; +/** + * Repository for deleted users + */ final class UserDeletedRepository { private Database $database; @@ -20,6 +25,25 @@ final class UserDeletedRepository $this->database = $database; } + /** + * Insert a deleted user by username. + * + * @throws \Exception If the username could not be inserted + */ + public function insertByUsername(string $username): void + { + $result = $this->database->insert('userd', ['username' => $username]); + + if ($result === false) { + throw new Exception(sprintf('Error while inserting username `%s` as deleted user.', $username)); + } + } + + /** + * Check if a deleted username exists. + * + * @throws \Exception + */ public function existsByUsername(string $username): bool { return $this->database->exists('userd', ['username' => $username]); diff --git a/tests/Unit/Database/Repository/UserDeletedRepositoryTest.php b/tests/Unit/Database/Repository/UserDeletedRepositoryTest.php index e1b818d7d3..d4d1c793e9 100644 --- a/tests/Unit/Database/Repository/UserDeletedRepositoryTest.php +++ b/tests/Unit/Database/Repository/UserDeletedRepositoryTest.php @@ -9,12 +9,40 @@ declare(strict_types=1); namespace Friendica\Test\Unit\Database\Repository; +use Exception; use Friendica\Database\Database; use Friendica\Database\Repository\UserDeletedRepository; use PHPUnit\Framework\TestCase; class UserDeletedRepositoryTest extends TestCase { + public function testInsertByUsernameReturnsFalse(): void + { + $database = $this->createMock(Database::class); + $database->expects($this->once())->method('insert')->willReturnMap([ + ['userd', ['username' => 'test'], 0, true], + ]); + + $repo = new UserDeletedRepository($database); + + $repo->insertByUsername('test'); + } + + public function testInsertByUsernameThrowsException(): void + { + $database = $this->createMock(Database::class); + $database->expects($this->once())->method('insert')->willReturnMap([ + ['userd', ['username' => 'test'], 0, false], + ]); + + $repo = new UserDeletedRepository($database); + + $this->expectException(Exception::class); + $this->expectExceptionMessage('Error while inserting username `test` as deleted user.'); + + $repo->insertByUsername('test'); + } + public function testExistsByUsernameReturnsTrue(): void { $database = $this->createStub(Database::class);