pelican-vehikl 2046fa453a
Pest Test Improvements (#1137)
Co-authored-by: Lance Pioch <git@lance.sh>
Co-authored-by: RMartinOscar <40749467+RMartinOscar@users.noreply.github.com>
2025-04-28 10:20:33 -04:00

68 lines
2.2 KiB
PHP

<?php
use App\Enums\RolePermissionModels;
use App\Filament\Admin\Resources\NodeResource\Pages\ListNodes;
use App\Models\Node;
use App\Models\Permission;
use App\Models\Role;
use App\Models\Server;
use Filament\Actions\CreateAction;
use Filament\Tables\Actions\CreateAction as TableCreateAction;
use function Pest\Livewire\livewire;
it('root admin can see all nodes', function () {
[$admin] = generateTestAccount([]);
$admin = $admin->syncRoles(Role::getRootAdmin());
$nodes = Node::all();
$this->actingAs($admin);
livewire(ListNodes::class)
->assertSuccessful()
->assertCountTableRecords($nodes->count())
->assertCanSeeTableRecords($nodes);
});
it('non root admin cannot see any nodes', function () {
$role = Role::factory()->create(['name' => 'Egg Viewer', 'guard_name' => 'web']);
// Egg Permission is on purpose, we check the wrong permissions.
$permission = Permission::factory()->create(['name' => RolePermissionModels::Egg->viewAny(), 'guard_name' => 'web']);
$role->permissions()->attach($permission);
[$user] = generateTestAccount();
$this->actingAs($user);
livewire(ListNodes::class)
->assertForbidden();
});
it('non root admin with permissions can see nodes', function () {
$role = Role::factory()->create(['name' => 'Node Viewer', 'guard_name' => 'web']);
$permission = Permission::factory()->create(['name' => RolePermissionModels::Node->viewAny(), 'guard_name' => 'web']);
$role->permissions()->attach($permission);
[$user] = generateTestAccount();
$nodes = Node::all();
$user = $user->syncRoles($role);
$this->actingAs($user);
livewire(ListNodes::class)
->assertSuccessful()
->assertCountTableRecords($nodes->count())
->assertCanSeeTableRecords($nodes);
});
it('displays the create button in the table instead of the header when 0 nodes', function () {
[$admin] = generateTestAccount([]);
$admin = $admin->syncRoles(Role::getRootAdmin());
// Nuke servers & nodes
Server::truncate();
Node::truncate();
$this->actingAs($admin);
livewire(ListNodes::class)
->assertSuccessful()
->assertHeaderMissing(CreateAction::class)
->assertActionExists(TableCreateAction::class);
});