death-notifier/src/test/php/com/fwdekker/deathnotifier/UserManagerTest.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);
}
}