Files
datahub/backend/test/Cases/Unit/Model/UserRoleTest.php
T

108 lines
3.1 KiB
PHP
Raw Normal View History

2026-03-09 10:15:43 +08:00
<?php
declare(strict_types=1);
namespace HyperfTest\Cases\Unit\Model;
use App\Model\Role;
use App\Model\User;
use PHPUnit\Framework\TestCase;
/**
* @internal
* @coversNothing
*/
class UserRoleTest extends TestCase
{
protected function runInCoroutine(callable $callback): void
{
2026-03-09 13:36:24 +08:00
if (\Swoole\Coroutine::getCid() > 0) {
$callback();
return;
}
2026-03-09 10:15:43 +08:00
$exception = null;
\Swoole\Coroutine\run(static function () use ($callback, &$exception): void {
try {
$callback();
} catch (\Throwable $e) {
$exception = $e;
}
});
if ($exception) {
throw $exception;
}
}
protected function createUserWithRole(string $role_name): User
{
$role = Role::query()->where('name', $role_name)->firstOrFail();
$suffix = bin2hex(random_bytes(4));
return User::query()->create([
'username' => 'role_test_' . $suffix,
'password' => 'Pass_' . $suffix,
'email' => 'role_test_' . $suffix . '@example.com',
'status' => 1,
'role_id' => $role->id,
]);
}
public function test_user_belongs_to_role(): void
{
$this->runInCoroutine(function (): void {
$user = $this->createUserWithRole('administrator');
$this->assertNotNull($user->role);
$this->assertSame('administrator', $user->role->name);
});
}
public function test_is_administrator(): void
{
$this->runInCoroutine(function (): void {
$user = $this->createUserWithRole('administrator');
$this->assertTrue($user->isAdministrator());
$this->assertFalse($user->isDeveloper());
$this->assertFalse($user->isAccessor());
});
}
public function test_is_developer(): void
{
$this->runInCoroutine(function (): void {
$user = $this->createUserWithRole('developer');
$this->assertFalse($user->isAdministrator());
$this->assertTrue($user->isDeveloper());
$this->assertFalse($user->isAccessor());
});
}
public function test_is_accessor(): void
{
$this->runInCoroutine(function (): void {
$user = $this->createUserWithRole('accessor');
$this->assertFalse($user->isAdministrator());
$this->assertFalse($user->isDeveloper());
$this->assertTrue($user->isAccessor());
});
}
public function test_user_without_role(): void
{
$this->runInCoroutine(function (): void {
$suffix = bin2hex(random_bytes(4));
$user = User::query()->create([
'username' => 'no_role_' . $suffix,
'password' => 'Pass_' . $suffix,
'email' => 'no_role_' . $suffix . '@example.com',
'status' => 1,
]);
$this->assertNull($user->role);
$this->assertFalse($user->isAdministrator());
$this->assertFalse($user->isDeveloper());
$this->assertFalse($user->isAccessor());
});
}
}