144 lines
4.4 KiB
PHP
144 lines
4.4 KiB
PHP
<?php
|
|
|
|
namespace Tests\Feature\Api\V1\Helper;
|
|
|
|
use App\Models\CollectionTeam;
|
|
use App\Models\TeamMember;
|
|
use App\Models\User;
|
|
use Database\Seeders\RoleSeeder;
|
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
|
use Laravel\Sanctum\Sanctum;
|
|
use Tests\TestCase;
|
|
|
|
class HelperAssignmentTest extends TestCase
|
|
{
|
|
use RefreshDatabase;
|
|
|
|
private User $helper;
|
|
private CollectionTeam $team;
|
|
|
|
protected function setUp(): void
|
|
{
|
|
parent::setUp();
|
|
$this->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);
|
|
}
|
|
}
|