Files
2026-10-09 08:21:06 +02:00

106 lines
2.6 KiB
PHP

<?php
use App\Events\Role\Created;
use App\Events\Role\Deleted;
use App\Events\Role\Updated;
use App\Models\Permission;
use App\Models\Role;
use App\Repositories\Role\EloquentRole;
use Facades\Tests\Setup\RoleFactory;
use Facades\Tests\Setup\UserFactory;
use Illuminate\Foundation\Testing\RefreshDatabase;
uses(RefreshDatabase::class);
beforeEach(function () {
$this->repo = app(EloquentRole::class);
});
test('all', function () {
$roles = Role::factory()->times(4)->create();
$this->assertEquals(
$roles->toArray(),
$this->repo->all()->toArray()
);
});
test('get all with users count', function () {
$roleA = RoleFactory::create();
$roleB = RoleFactory::create();
$roleC = RoleFactory::create();
UserFactory::role($roleA)->create();
UserFactory::role($roleA)->create();
UserFactory::role($roleB)->create();
$roleA->users_count = 2;
$roleB->users_count = 1;
$roleC->users_count = 0;
$this->assertEquals(
[$roleA->toArray(), $roleB->toArray(), $roleC->toArray()],
$this->repo->getAllWithUsersCount()->toArray()
);
});
test('create', function () {
Event::fake([
Created::class,
]);
$data = ['name' => 'foo', 'display_name' => 'Foo'];
$role = $this->repo->create($data);
$this->assertDatabaseHas('roles', $data + ['id' => $role->id]);
Event::assertDispatched(Created::class);
});
test('update', function () {
Event::fake([
Updated::class,
]);
$role = Role::factory()->create();
$data = ['name' => 'foo', 'display_name' => 'Foo'];
$this->repo->update($role->id, $data);
$this->assertDatabaseHas('roles', $data + ['id' => $role->id]);
Event::assertDispatched(Updated::class);
});
test('delete role', function () {
Event::fake([
Deleted::class,
]);
$role = Role::factory()->create();
$this->repo->delete($role->id);
$this->assertDatabaseMissing('roles', ['id' => $role->id]);
Event::assertDispatched(Deleted::class);
});
test('update permissions', function () {
$role = Role::factory()->create();
$permissions = Permission::factory()->times(2)->create();
$this->repo->updatePermissions($role->id, $permissions->pluck('id')->toArray());
$this->assertDatabaseHas('permission_role', ['role_id' => $role->id, 'permission_id' => $permissions[0]->id]);
$this->assertDatabaseHas('permission_role', ['role_id' => $role->id, 'permission_id' => $permissions[1]->id]);
});
test('lists', function () {
$roles = Role::factory()->times(4)->create();
$roles = $roles->pluck('display_name', 'id');
$this->assertEquals($roles->toArray(), $this->repo->lists()->toArray());
});