RoutePermissionMiddlewareTest.php 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. <?php
  2. namespace Tests\Feature;
  3. use App\Models\Permission;
  4. use App\Models\Role;
  5. use App\Models\User;
  6. use Database\Seeders\RbacSeeder;
  7. use Illuminate\Foundation\Testing\RefreshDatabase;
  8. use Tests\TestCase;
  9. class RoutePermissionMiddlewareTest extends TestCase
  10. {
  11. use RefreshDatabase;
  12. protected function setUp(): void
  13. {
  14. parent::setUp();
  15. $this->seed(RbacSeeder::class);
  16. }
  17. public function test_mapped_auth_route_requires_permission_for_rbac_user(): void
  18. {
  19. $role = Role::query()->create([
  20. 'slug' => 'no_orders',
  21. 'name' => 'No orders',
  22. 'is_system' => false,
  23. 'is_active' => true,
  24. ]);
  25. $user = User::factory()->create(['role' => $role->slug, 'role_id' => $role->id]);
  26. $this->actingAs($user)
  27. ->get(route('order.index'))
  28. ->assertForbidden();
  29. }
  30. public function test_mapped_auth_route_allows_permission_for_rbac_user(): void
  31. {
  32. $permission = Permission::query()->where('slug', 'orders.view')->firstOrFail();
  33. $role = Role::query()->create([
  34. 'slug' => 'orders_viewer',
  35. 'name' => 'Orders viewer',
  36. 'is_system' => false,
  37. 'is_active' => true,
  38. ]);
  39. $role->permissions()->sync([
  40. $permission->id => ['effect' => 'allow'],
  41. ]);
  42. $user = User::factory()->create(['role' => $role->slug, 'role_id' => $role->id]);
  43. $this->actingAs($user)
  44. ->get(route('order.index'))
  45. ->assertOk();
  46. }
  47. }