67 lines
1.9 KiB
PHP
67 lines
1.9 KiB
PHP
<?php
|
|
|
|
namespace com\fwdekker\deathnotifier;
|
|
|
|
use com\fwdekker\deathnotifier\mailer\Mailer;
|
|
use com\fwdekker\deathnotifier\mailer\RegisterEmail;
|
|
use PHPUnit\Framework\MockObject\MockObject;
|
|
|
|
|
|
/**
|
|
* Unit tests for `UserManager`.
|
|
*/
|
|
class UserManagerTest extends DatabaseTestCase
|
|
{
|
|
private UserManager $user_manager;
|
|
private Mailer&MockObject $mailer;
|
|
|
|
|
|
public function getUserManager(): UserManager
|
|
{
|
|
return new UserManager($this->logger, $this->database->conn, $this->mailer);
|
|
}
|
|
|
|
|
|
public function setUp(): void
|
|
{
|
|
$this->mailer = $this->createMock(Mailer::class);
|
|
|
|
parent::setUp();
|
|
|
|
$this->user_manager = $this->getUserManager();
|
|
}
|
|
|
|
|
|
public function test_register_user_returns_an_unsatisfied_response_if_the_email_is_used(): void
|
|
{
|
|
$this->mailer->method("queue_email")->willReturn(Response::satisfied());
|
|
$this->user_manager->register_user("test@test.test", "password");
|
|
|
|
$response = $this->user_manager->register_user("test@test.test", "password");
|
|
|
|
self::assertFalse($response->satisfied);
|
|
}
|
|
|
|
public function test_register_user_returns_a_satisfied_response_if_the_email_is_unused(): void
|
|
{
|
|
$this->mailer->method("queue_email")->willReturn(Response::satisfied());
|
|
|
|
$response = $this->user_manager->register_user("test@test.test", "password");
|
|
|
|
self::assertTrue($response->satisfied);
|
|
}
|
|
|
|
public function test_register_user_sends_an_email_with_the_verification_token(): void
|
|
{
|
|
$this->mailer
|
|
->expects($this->once())
|
|
->method("queue_email")
|
|
->with($this->callback(fn($email) => $email instanceof RegisterEmail && $email->recipient === "test@test.test"))
|
|
->willReturn(Response::satisfied());
|
|
|
|
$response = $this->user_manager->register_user("test@test.test", "password");
|
|
|
|
self::assertTrue($response->satisfied);
|
|
}
|
|
}
|