82 lines
2.1 KiB
PHP
82 lines
2.1 KiB
PHP
<?php
|
|
|
|
namespace Tests\Fakes;
|
|
|
|
use App\Email\EmailConfirmationToken\CreateEmailConfirmationTokenDto;
|
|
use App\Email\EmailConfirmationToken\EmailConfirmationToken;
|
|
use App\Email\EmailConfirmationToken\EmailConfirmationTokenRepository;
|
|
use App\User\User;
|
|
use App\User\UserRepository;
|
|
|
|
class FakeEmailConfirmationTokenRepository implements EmailConfirmationTokenRepository
|
|
{
|
|
/**
|
|
* @var EmailConfirmationToken[]
|
|
*/
|
|
private array $existingTokens = [];
|
|
|
|
public function __construct(
|
|
private UserRepository $userRepo,
|
|
) {}
|
|
|
|
public function create(
|
|
CreateEmailConfirmationTokenDto $dto,
|
|
): EmailConfirmationToken {
|
|
$id = $this->nextId();
|
|
$token = new EmailConfirmationToken(
|
|
id: $id,
|
|
user: $dto->user,
|
|
availableTo: $dto->availableTo,
|
|
token: bin2hex(random_bytes(32)),
|
|
);
|
|
$this->existingTokens[$id] = $token;
|
|
|
|
return $this->copy($token);
|
|
}
|
|
|
|
public function findByToken(string $token): ?EmailConfirmationToken
|
|
{
|
|
foreach ($this->existingTokens as $existing) {
|
|
if ($existing->getToken() === $token) {
|
|
return $this->copy($existing);
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
public function findByUser(User $user): ?EmailConfirmationToken
|
|
{
|
|
foreach ($this->existingTokens as $existing) {
|
|
if ($existing->getUser()->getId() === $user->getId()) {
|
|
return $this->copy($existing);
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
public function delete(int $id): void
|
|
{
|
|
unset($this->existingTokens[$id]);
|
|
}
|
|
|
|
private function copy(
|
|
EmailConfirmationToken $token,
|
|
): EmailConfirmationToken {
|
|
$user = $this->userRepo->find($token->getUser()->getId())
|
|
?? $token->getUser();
|
|
|
|
return new EmailConfirmationToken(
|
|
id: $token->getId(),
|
|
user: $user,
|
|
availableTo: $token->getAvailableTo(),
|
|
token: $token->getToken(),
|
|
);
|
|
}
|
|
|
|
private function nextId(): int
|
|
{
|
|
return count($this->existingTokens) + 1;
|
|
}
|
|
}
|