create(); $this->actingAs($admin, 'admin'); session(['activeProfileType' => Admin::class, 'activeProfileId' => $admin->id]); $response = Livewire::test(\App\Http\Livewire\Posts\Manage::class); $response->assertStatus(200); } /** * Test central bank (level 0) can access posts management * * @test */ public function central_bank_can_access_posts_management() { $bank = Bank::factory()->create(['level' => 0]); $this->actingAs($bank, 'bank'); session(['activeProfileType' => Bank::class, 'activeProfileId' => $bank->id]); $response = Livewire::test(\App\Http\Livewire\Posts\Manage::class); $response->assertStatus(200); } /** * Test regular bank (level 1) CANNOT access posts management * * @test */ public function regular_bank_cannot_access_posts_management() { $bank = Bank::factory()->create(['level' => 1]); $this->actingAs($bank, 'bank'); session(['activeProfileType' => Bank::class, 'activeProfileId' => $bank->id]); $response = Livewire::test(\App\Http\Livewire\Posts\Manage::class); $response->assertStatus(403); } /** * Test user CANNOT access posts management * * @test */ public function user_cannot_access_posts_management() { $user = User::factory()->create(); $this->actingAs($user, 'web'); session(['activeProfileType' => User::class, 'activeProfileId' => $user->id]); $response = Livewire::test(\App\Http\Livewire\Posts\Manage::class); $response->assertStatus(403); } /** * Test organization CANNOT access posts management * * @test */ public function organization_cannot_access_posts_management() { $user = User::factory()->create(); $organization = Organization::factory()->create(); $organization->users()->attach($user->id); $this->actingAs($user, 'web'); $this->actingAs($organization, 'organization'); session(['activeProfileType' => Organization::class, 'activeProfileId' => $organization->id]); $response = Livewire::test(\App\Http\Livewire\Posts\Manage::class); $response->assertStatus(403); } /** * Test web user CANNOT access posts via cross-guard attack (targeting admin profile) * * @test */ public function web_user_cannot_access_posts_via_cross_guard_admin_attack() { $user = User::factory()->create(); $admin = Admin::factory()->create(); $admin->users()->attach($user->id); // User is linked to admin // User authenticated on 'web' guard $this->actingAs($user, 'web'); // Malicious: manipulate session to target admin profile session(['activeProfileType' => Admin::class, 'activeProfileId' => $admin->id]); $response = Livewire::test(\App\Http\Livewire\Posts\Manage::class); // Should be blocked by ProfileAuthorizationHelper (cross-guard validation) $response->assertStatus(403); } /** * Test web user CANNOT access posts via cross-guard attack (targeting bank profile) * * @test */ public function web_user_cannot_access_posts_via_cross_guard_bank_attack() { $user = User::factory()->create(); $bank = Bank::factory()->create(['level' => 0]); $bank->managers()->attach($user->id); // User is manager of bank // User authenticated on 'web' guard $this->actingAs($user, 'web'); // Malicious: manipulate session to target bank profile session(['activeProfileType' => Bank::class, 'activeProfileId' => $bank->id]); $response = Livewire::test(\App\Http\Livewire\Posts\Manage::class); // Should be blocked by ProfileAuthorizationHelper (cross-guard validation) $response->assertStatus(403); } /** * Test unauthenticated user CANNOT access posts management * * @test */ public function unauthenticated_user_cannot_access_posts_management() { $admin = Admin::factory()->create(); // Not authenticated session(['activeProfileType' => Admin::class, 'activeProfileId' => $admin->id]); $response = Livewire::test(\App\Http\Livewire\Posts\Manage::class); // Should return 401 (not authenticated) $response->assertStatus(401); } /** * Test admin CANNOT access posts when session has no active profile * * @test */ public function admin_cannot_access_posts_without_active_profile() { $admin = Admin::factory()->create(); $this->actingAs($admin, 'admin'); // NO session activeProfileType/activeProfileId set $response = Livewire::test(\App\Http\Livewire\Posts\Manage::class); $response->assertStatus(403); } /** * Test admin CANNOT access posts when session has invalid profile ID * * @test */ public function admin_cannot_access_posts_with_invalid_profile_id() { $admin = Admin::factory()->create(); $this->actingAs($admin, 'admin'); session(['activeProfileType' => Admin::class, 'activeProfileId' => 99999]); // Non-existent ID $response = Livewire::test(\App\Http\Livewire\Posts\Manage::class); $response->assertStatus(403); } /** * Test admin CANNOT access posts management for different admin profile (IDOR) * * @test */ public function admin_cannot_access_posts_as_different_admin() { $admin1 = Admin::factory()->create(); $admin2 = Admin::factory()->create(); // Authenticated as admin1 $this->actingAs($admin1, 'admin'); // Malicious: manipulate session to target admin2 profile session(['activeProfileType' => Admin::class, 'activeProfileId' => $admin2->id]); $response = Livewire::test(\App\Http\Livewire\Posts\Manage::class); // Should be blocked by ProfileAuthorizationHelper (different admin) $response->assertStatus(403); } }