Add display_name (unique) and email_confirmed_at columns plus matching getters, DTO fields, repo methods (findByDisplayName, update), and migration. Existing auth tests updated to construct User with the new params.
98 lines
2.3 KiB
PHP
98 lines
2.3 KiB
PHP
<?php
|
|
|
|
namespace Tests\Fakes;
|
|
|
|
use App\Shared\ValueObject\EmailAddress;
|
|
use App\User\CreateUserDto;
|
|
use App\User\User;
|
|
use App\User\UserRepository;
|
|
use RuntimeException;
|
|
|
|
class FakeUserRepository implements UserRepository
|
|
{
|
|
/**
|
|
* @var User[]
|
|
*/
|
|
private array $existingUsers = [];
|
|
|
|
public function create(CreateUserDto $dto): User
|
|
{
|
|
$id = $this->getNextId();
|
|
$user = new User(
|
|
id: $id,
|
|
email: $dto->email,
|
|
displayName: $dto->displayName,
|
|
passwordHash: $dto->passwordHash,
|
|
isAdmin: $dto->isAdmin,
|
|
emailConfirmedAt: $dto->emailConfirmedAt,
|
|
);
|
|
$this->existingUsers[$id] = $user;
|
|
|
|
return $this->copy($user);
|
|
}
|
|
|
|
public function find(int $id): ?User
|
|
{
|
|
$user = $this->existingUsers[$id] ?? null;
|
|
if ($user === null) {
|
|
return null;
|
|
}
|
|
|
|
return $this->copy($user);
|
|
}
|
|
|
|
public function findByEmail(EmailAddress $email): ?User
|
|
{
|
|
foreach ($this->existingUsers as $user) {
|
|
if ($user->getEmail()->equals($email)) {
|
|
return $this->copy($user);
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
public function findByDisplayName(string $displayName): ?User
|
|
{
|
|
foreach ($this->existingUsers as $user) {
|
|
if ($user->getDisplayName() === $displayName) {
|
|
return $this->copy($user);
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* @throws RuntimeException
|
|
*/
|
|
public function update(User $user): User
|
|
{
|
|
$id = $user->getId();
|
|
if (! isset($this->existingUsers[$id])) {
|
|
throw new RuntimeException(
|
|
"User with id: $id does not exist"
|
|
);
|
|
}
|
|
$this->existingUsers[$id] = $user;
|
|
|
|
return $this->copy($user);
|
|
}
|
|
|
|
private function copy(User $user): User
|
|
{
|
|
return new User(
|
|
id: $user->getId(),
|
|
email: $user->getEmail(),
|
|
displayName: $user->getDisplayName(),
|
|
passwordHash: $user->getPasswordHash(),
|
|
isAdmin: $user->isAdmin(),
|
|
emailConfirmedAt: $user->getEmailConfirmedAt(),
|
|
);
|
|
}
|
|
|
|
private function getNextId(): int
|
|
{
|
|
return count($this->existingUsers) + 1;
|
|
}
|
|
}
|