seed(RoleSeeder::class); } public function test_volunteer_only_user_sees_portal_context(): void { $user = User::factory()->volunteer()->create(); Sanctum::actingAs($user); $response = $this->getJson('/api/v1/auth/me'); $response->assertOk() ->assertJsonStructure([ 'data' => [ 'platform' => ['is_super_admin'], 'contexts' => ['available', 'default'], ], ]) ->assertJsonPath('data.platform.is_super_admin', false) ->assertJsonPath('data.contexts.available', ['portal']) ->assertJsonPath('data.contexts.default', 'portal'); } public function test_organizer_only_user_sees_organizer_context(): void { $user = User::factory()->orgAdmin()->create(); Sanctum::actingAs($user); $response = $this->getJson('/api/v1/auth/me'); $response->assertOk() ->assertJsonPath('data.platform.is_super_admin', false) ->assertJsonPath('data.contexts.available', ['organizer']) ->assertJsonPath('data.contexts.default', 'organizer'); } public function test_multi_role_user_sees_both_contexts_with_organizer_default(): void { $user = User::factory()->volunteerAndOrganizer()->create(); Sanctum::actingAs($user); $response = $this->getJson('/api/v1/auth/me'); $response->assertOk() ->assertJsonPath('data.contexts.available', ['portal', 'organizer']) ->assertJsonPath('data.contexts.default', 'organizer'); } public function test_super_admin_sees_organizer_context(): void { $user = User::factory()->superAdmin()->create(); Sanctum::actingAs($user); $response = $this->getJson('/api/v1/auth/me'); $response->assertOk() ->assertJsonPath('data.platform.is_super_admin', true) ->assertJsonPath('data.contexts.available', ['organizer']) ->assertJsonPath('data.contexts.default', 'organizer'); } public function test_organisations_emit_roles_array_in_addition_to_scalar_role(): void { $user = User::factory()->orgAdmin()->create(); Sanctum::actingAs($user); $response = $this->getJson('/api/v1/auth/me'); $response->assertOk() ->assertJsonPath('data.organisations.0.role', 'org_admin') ->assertJsonPath('data.organisations.0.roles', ['org_admin']); } }