seed(RoleSeeder::class); $this->helper = User::factory()->create([ 'role' => User::ROLE_HELPER, 'status' => User::STATUS_ACTIVE, ]); $this->team = CollectionTeam::create([ 'name' => 'QC Team Alpha', 'status' => CollectionTeam::STATUS_ACTIVE, ]); } public function test_helper_can_get_current_assignment(): void { Sanctum::actingAs($this->helper); // No assignment initially $response = $this->getJson('/api/v1/helper/assignment'); $response->assertOk() ->assertJsonPath('data', null); // Assign helper TeamMember::create([ 'team_id' => $this->team->id, 'user_id' => $this->helper->id, 'role_in_team' => TeamMember::ROLE_HELPER, 'assigned_from' => now()->toDateString(), 'status' => TeamMember::STATUS_PENDING, ]); $response = $this->getJson('/api/v1/helper/assignment'); $response->assertOk() ->assertJsonPath('data.status', TeamMember::STATUS_PENDING) ->assertJsonPath('data.team.name', $this->team->name); } public function test_helper_can_accept_assignment(): void { Sanctum::actingAs($this->helper); TeamMember::create([ 'team_id' => $this->team->id, 'user_id' => $this->helper->id, 'role_in_team' => TeamMember::ROLE_HELPER, 'assigned_from' => now()->toDateString(), 'status' => TeamMember::STATUS_PENDING, ]); $response = $this->postJson('/api/v1/helper/assignment/accept'); $response->assertOk() ->assertJsonPath('data.status', TeamMember::STATUS_ACCEPTED); $this->assertDatabaseHas('team_members', [ 'user_id' => $this->helper->id, 'status' => TeamMember::STATUS_ACCEPTED, ]); } public function test_helper_can_reject_assignment(): void { Sanctum::actingAs($this->helper); TeamMember::create([ 'team_id' => $this->team->id, 'user_id' => $this->helper->id, 'role_in_team' => TeamMember::ROLE_HELPER, 'assigned_from' => now()->toDateString(), 'status' => TeamMember::STATUS_PENDING, ]); $response = $this->postJson('/api/v1/helper/assignment/reject'); $response->assertOk() ->assertJsonPath('data.status', TeamMember::STATUS_REJECTED); $this->assertDatabaseHas('team_members', [ 'user_id' => $this->helper->id, 'status' => TeamMember::STATUS_REJECTED, ]); } public function test_helper_can_get_assignment_history(): void { Sanctum::actingAs($this->helper); // Create 2 past assignments TeamMember::create([ 'team_id' => $this->team->id, 'user_id' => $this->helper->id, 'role_in_team' => TeamMember::ROLE_HELPER, 'assigned_from' => now()->subDays(2)->toDateString(), 'assigned_until' => now()->subDays(2)->toDateString(), 'status' => TeamMember::STATUS_ACCEPTED, ]); TeamMember::create([ 'team_id' => $this->team->id, 'user_id' => $this->helper->id, 'role_in_team' => TeamMember::ROLE_HELPER, 'assigned_from' => now()->subDays(1)->toDateString(), 'assigned_until' => now()->subDays(1)->toDateString(), 'status' => TeamMember::STATUS_REJECTED, ]); $response = $this->getJson('/api/v1/helper/history'); $response->assertOk() ->assertJsonCount(2, 'data'); } public function test_non_helper_blocked_from_helper_endpoints(): void { $driver = User::factory()->create([ 'role' => User::ROLE_DRIVER, 'status' => User::STATUS_ACTIVE, ]); Sanctum::actingAs($driver); $this->getJson('/api/v1/helper/assignment')->assertStatus(403); } }