feat(authorization): establish many-to-many relationship between roles and menus, add migration and seeder updates
This commit is contained in:
@@ -17,7 +17,7 @@ class AuthorizationSeederTest extends TestCase
|
||||
$this->seed(AuthorizationSeeder::class);
|
||||
|
||||
$this->assertSame(
|
||||
['admin', 'tenant_admin', 'user'],
|
||||
['admin', 'adminapp', 'tenant_admin', 'user'],
|
||||
Role::query()->orderBy('codigo')->pluck('codigo')->all()
|
||||
);
|
||||
$this->assertCount(22, Permission::query()->get());
|
||||
@@ -28,10 +28,12 @@ class AuthorizationSeederTest extends TestCase
|
||||
$this->seed(AuthorizationSeeder::class);
|
||||
|
||||
$admin = Role::query()->where('codigo', 'admin')->firstOrFail();
|
||||
$appAdmin = Role::query()->where('codigo', 'adminapp')->firstOrFail();
|
||||
$tenantAdmin = Role::query()->where('codigo', 'tenant_admin')->firstOrFail();
|
||||
$user = Role::query()->where('codigo', 'user')->firstOrFail();
|
||||
|
||||
$this->assertCount(22, $admin->permissions);
|
||||
$this->assertCount(0, $appAdmin->permissions);
|
||||
$this->assertCount(21, $tenantAdmin->permissions);
|
||||
$this->assertFalse($tenantAdmin->permissions->contains('codigo', 'roles.gestionar'));
|
||||
$this->assertCount(0, $user->permissions);
|
||||
@@ -42,7 +44,7 @@ class AuthorizationSeederTest extends TestCase
|
||||
$this->seed(AuthorizationSeeder::class);
|
||||
$this->seed(AuthorizationSeeder::class);
|
||||
|
||||
$this->assertCount(3, Role::query()->get());
|
||||
$this->assertCount(4, Role::query()->get());
|
||||
$this->assertCount(22, Permission::query()->get());
|
||||
$this->assertDatabaseCount('roles_permisos', 43);
|
||||
}
|
||||
|
||||
@@ -4,8 +4,10 @@ namespace Tests\Feature\Seeders;
|
||||
|
||||
use App\Domains\Attachable\Enums\AttachmentType;
|
||||
use App\Domains\Attachable\Models\Attachment;
|
||||
use App\Domains\Authorization\Models\Role;
|
||||
use App\Domains\Menu\Models\Menu;
|
||||
use App\Domains\Tenant\Models\Tenant;
|
||||
use Database\Seeders\AuthorizationSeeder;
|
||||
use Database\Seeders\MenuSeeder;
|
||||
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||
use Tests\TestCase;
|
||||
@@ -45,6 +47,48 @@ class MenuSeederTest extends TestCase
|
||||
}
|
||||
}
|
||||
|
||||
public function test_it_assigns_menus_to_the_expected_roles(): void
|
||||
{
|
||||
$this->seed(AuthorizationSeeder::class);
|
||||
$this->seed(MenuSeeder::class);
|
||||
|
||||
$allMenuCodes = Menu::query()
|
||||
->orderBy('code')
|
||||
->pluck('code')
|
||||
->all();
|
||||
$userMenuCodes = Menu::query()
|
||||
->where('code', 'not like', 'admin.%')
|
||||
->orderBy('code')
|
||||
->pluck('code')
|
||||
->all();
|
||||
|
||||
foreach (['admin', 'adminapp'] as $roleCode) {
|
||||
$roleMenuCodes = Role::query()
|
||||
->where('codigo', $roleCode)
|
||||
->firstOrFail()
|
||||
->menus()
|
||||
->orderBy('menues.code')
|
||||
->pluck('menues.code')
|
||||
->all();
|
||||
|
||||
$this->assertSame($allMenuCodes, $roleMenuCodes);
|
||||
}
|
||||
|
||||
$userRoleMenuCodes = Role::query()
|
||||
->where('codigo', 'user')
|
||||
->firstOrFail()
|
||||
->menus()
|
||||
->orderBy('menues.code')
|
||||
->pluck('menues.code')
|
||||
->all();
|
||||
|
||||
$this->assertSame($userMenuCodes, $userRoleMenuCodes);
|
||||
$this->assertDatabaseCount(
|
||||
'menues_roles',
|
||||
(count($allMenuCodes) * 2) + count($userMenuCodes)
|
||||
);
|
||||
}
|
||||
|
||||
public function test_it_seeds_the_account_menu_hierarchy(): void
|
||||
{
|
||||
$tenant = $this->createTenant('account_tenant');
|
||||
|
||||
Reference in New Issue
Block a user