worker = Worker::create([ 'name' => 'Rahul Sharma', 'email' => 'rahul@example.com', 'phone' => '+971501234567', 'password' => bcrypt('password'), 'nationality' => 'Indian', 'age' => 25, 'salary' => 1500, 'availability' => 'Immediate', 'experience' => 'Not Specified', 'religion' => 'Not Specified', 'bio' => 'Test', 'verified' => true, 'status' => 'active', 'api_token' => 'worker-test-token', ]); // Create passport document to prevent pending 404 WorkerDocument::create([ 'worker_id' => $this->worker->id, 'type' => 'passport', 'number' => '123456', 'file_path' => 'passports/test.pdf', ]); // 2. Create an employer $this->employer = User::create([ 'name' => 'Employer One', 'email' => 'emp1@example.com', 'password' => bcrypt('password'), 'role' => 'employer', 'api_token' => 'employer-test-token', ]); EmployerProfile::create([ 'user_id' => $this->employer->id, 'company_name' => 'Ahmad Tech Ltd', 'nationality' => 'UAE', 'city' => 'Dubai', 'phone' => '+971 50 123 4567', 'address' => 'Dubai, UAE', ]); // 3. Create job post $this->job = JobPost::create([ 'employer_id' => $this->employer->id, 'title' => 'Test Job', 'location' => 'Dubai', 'salary' => 2500, 'workers_needed' => 1, 'job_type' => 'Full Time', 'start_date' => now()->subMonths(4)->toDateString(), 'description' => 'Test Job Description', 'status' => 'active', ]); } public function test_worker_login_and_profile_returns_review_data() { // Create an Employer review of this Worker Review::create([ 'employer_id' => $this->employer->id, 'worker_id' => $this->worker->id, 'rating' => 4, 'comment' => 'Good worker', ]); // Create a Worker review of this Employer EmployerReview::create([ 'worker_id' => $this->worker->id, 'employer_id' => $this->employer->id, 'job_id' => $this->job->id, 'rating' => 5, 'title' => 'Nice place', 'comment' => 'Great experience', ]); // Act: Worker login $response = $this->postJson('/api/workers/login', [ 'phone' => '+971501234567', 'password' => 'password' ]); $response->assertStatus(200); $workerData = $response->json('data.worker'); $this->assertEquals(4.0, $workerData['rating']); $this->assertEquals(1, $workerData['reviews_count']); $this->assertCount(1, $workerData['reviews']); $this->assertEquals('Good worker', $workerData['reviews'][0]['comment']); $this->assertEquals('Employer One', $workerData['reviews'][0]['employer']['name']); $this->assertCount(1, $workerData['employer_reviews']); $this->assertEquals('Great experience', $workerData['employer_reviews'][0]['comment']); $this->assertEquals('Employer One', $workerData['employer_reviews'][0]['employer']['name']); // Act: Get worker profile $token = $response->json('data.token'); $profileResponse = $this->withHeaders([ 'Authorization' => 'Bearer ' . $token, ])->getJson('/api/workers/profile'); $profileResponse->assertStatus(200); $profileWorker = $profileResponse->json('data.worker'); $this->assertEquals(4.0, $profileWorker['rating']); $this->assertEquals(1, $profileWorker['reviews_count']); } public function test_worker_dashboard_and_employers_list_includes_employer_review_stats() { // Hired job offer to establish relationship JobOffer::create([ 'employer_id' => $this->employer->id, 'worker_id' => $this->worker->id, 'work_date' => now()->subDays(10), 'location' => 'Dubai', 'salary' => 2500, 'status' => 'accepted', 'notes' => 'Current Active Job', ]); // Submit worker review of employer EmployerReview::create([ 'worker_id' => $this->worker->id, 'employer_id' => $this->employer->id, 'job_id' => $this->job->id, 'rating' => 5, 'title' => 'Fantastic', 'comment' => 'Very good', ]); // Act: Get dashboard $dashboardResponse = $this->withHeaders([ 'Authorization' => 'Bearer worker-test-token', ])->getJson('/api/workers/dashboard'); $dashboardResponse->assertStatus(200); $currentEmp = $dashboardResponse->json('data.current_employer'); $this->assertEquals(5.0, $currentEmp['rating']); $this->assertEquals(1, $currentEmp['reviews_count']); $this->assertCount(1, $currentEmp['reviews']); $this->assertEquals('Very good', $currentEmp['reviews'][0]['comment']); // Act: Get employers list $employersResponse = $this->withHeaders([ 'Authorization' => 'Bearer worker-test-token', ])->getJson('/api/workers/employers'); $employersResponse->assertStatus(200); $listEmp = $employersResponse->json('data.employers.0.employer'); $this->assertEquals(5.0, $listEmp['rating']); $this->assertEquals(1, $listEmp['reviews_count']); $this->assertCount(1, $listEmp['reviews']); } public function test_employer_profile_returns_review_data() { // Submit review of employer EmployerReview::create([ 'worker_id' => $this->worker->id, 'employer_id' => $this->employer->id, 'job_id' => $this->job->id, 'rating' => 5, 'title' => 'Nice place', 'comment' => 'Great experience', ]); // Act: Get employer profile $response = $this->withHeaders([ 'Authorization' => 'Bearer employer-test-token', ])->getJson('/api/employers/profile'); $response->assertStatus(200); $profile = $response->json('data.profile'); $this->assertEquals(5.0, $profile['rating']); $this->assertEquals(1, $profile['reviews_count']); $this->assertCount(1, $profile['reviews']); $this->assertEquals('Great experience', $profile['reviews'][0]['comment']); $this->assertEquals('Rahul Sharma', $profile['reviews'][0]['worker']['name']); } }