'admin']); // Create a regular user $this->user = User::factory()->create([ 'status' => 'active', 'user_type' => 'admin', ]); // Assign admin role $this->user->assignRole('admin'); // Create a project $this->project = Project::create([ 'name' => 'Test Skyline Project', 'code' => 'PRJ-2026-001', 'description' => 'A test skyline project', 'client_name' => 'Demo Client', 'location' => 'San Francisco, CA', 'status' => \Modules\ProjectManagement\Enums\ProjectStatus::InProgress, 'contract_value' => 500000.00, 'contract_duration' => 12, 'start_date' => now()->format('Y-m-d'), 'target_end_date' => now()->addMonths(12)->format('Y-m-d'), 'completion_percentage' => 15.00, 'total_capitalization' => 0.00, ]); } public function test_guest_cannot_access_dashboard(): void { $response = $this->get('/dashboard'); $response->assertRedirect('/login'); } public function test_authenticated_user_can_access_dashboard_global(): void { $response = $this->actingAs($this->user)->get('/dashboard'); $response->assertStatus(200); // Assert Inertia page and props exist $response->assertInertia(fn ($page) => $page ->component('Dashboard') ->has('projects') ->has('selectedProject', null) ->has('weather') ->has('activities') ->has('blockers') ->has('resources') ); } public function test_authenticated_user_can_filter_dashboard_by_project(): void { $response = $this->actingAs($this->user)->get('/dashboard?project=' . $this->project->ulid); $response->assertStatus(200); // Assert Inertia page and project data are populated $response->assertInertia(fn ($page) => $page ->component('Dashboard') ->has('projects') ->where('selectedProject.ulid', $this->project->ulid) ->where('selectedProject.name', 'Test Skyline Project') ->has('weather') ->has('activities') ->has('blockers') ->has('resources') ); } public function test_contractor_user_can_access_dashboard(): void { $contractor = \Modules\ContractorManagement\Models\Contractor::create([ 'company_name' => 'Acme Contractors', 'contact_person' => 'John Builder', 'email' => 'john@acme.test', 'phone' => '1234567890', 'status' => 'active', ]); $contractorRole = Role::firstOrCreate(['name' => 'Contractor Admin']); $contractorUser = User::factory()->create([ 'status' => 'active', 'user_type' => 'contractor', 'contractor_id' => $contractor->id, ]); $contractorUser->assignRole($contractorRole); $response = $this->actingAs($contractorUser)->get('/dashboard'); $response->assertStatus(200); } }