Goal-Calibration/tests/Unit/User/UseCases/CreateUserTest.php

61 lines
1.7 KiB
PHP

<?php
namespace Tests\Unit\User\UseCases;
use App\Exceptions\BadRequestException;
use App\User\User;
use App\User\UseCases\CreateUser;
use App\User\UseCases\CreateUserRequest;
use Tests\Fakes\FakeUserRepository;
use PHPUnit\Framework\TestCase;
class CreateUserTest extends TestCase
{
public function test_create_user(): void
{
$userRepo = new FakeUserRepository();
$useCase = new CreateUser($userRepo);
$useCase->execute(new CreateUserRequest(
email: 'test@test.com',
));
$user = $userRepo->find(0);
$this->assertInstanceOf(User::class, $user);
$this->assertEquals('test@test.com', $user->getEmail());
}
public function test_throws_if_email_is_null(): void
{
$userRepo = new FakeUserRepository();
$useCase = new CreateUser($userRepo);
$this->expectException(BadRequestException::class);
$this->expectExceptionMessage('email is required');
$useCase->execute(new CreateUserRequest(
email: null,
));
}
public function test_is_admin_defaults_to_false(): void
{
$userRepo = new FakeUserRepository();
$useCase = new CreateUser($userRepo);
$useCase->execute(new CreateUserRequest(
email: 'test@test.com',
));
$user = $userRepo->find(0);
$this->assertFalse($user->isAdmin());
}
public function test_is_admin_can_be_set_true(): void
{
$userRepo = new FakeUserRepository();
$useCase = new CreateUser($userRepo);
$useCase->execute(new CreateUserRequest(
email: 'test@test.com',
isAdmin: true,
));
$user = $userRepo->find(0);
$this->assertTrue($user->isAdmin());
}
}