105 lines
3.5 KiB
PHP
105 lines
3.5 KiB
PHP
<?php
|
|
|
|
namespace Tests\Feature\Api;
|
|
|
|
use App\Models\Project;
|
|
use App\Models\Ticket;
|
|
use App\Models\User;
|
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
|
use Tests\TestCase;
|
|
|
|
class AssignedTicketsApiTest extends TestCase
|
|
{
|
|
use RefreshDatabase;
|
|
|
|
public function test_assigned_tickets_are_grouped_by_visible_project(): void
|
|
{
|
|
$viewer = User::factory()->create();
|
|
$assignee = User::factory()->create([
|
|
'name' => 'Assigned User',
|
|
]);
|
|
$otherAssignee = User::factory()->create();
|
|
|
|
$olderProject = Project::factory()->create([
|
|
'key' => 'OLD',
|
|
'name' => 'Older project',
|
|
]);
|
|
$newerProject = Project::factory()->create([
|
|
'key' => 'NEW',
|
|
'name' => 'Newer project',
|
|
]);
|
|
$hiddenProject = Project::factory()->create([
|
|
'key' => 'HID',
|
|
'name' => 'Hidden project',
|
|
]);
|
|
|
|
$this->syncProjectPermissions($olderProject, $viewer, ['view']);
|
|
$this->syncProjectPermissions($newerProject, $viewer, ['view']);
|
|
|
|
Ticket::factory()->create([
|
|
'assignee_user_id' => $assignee->id,
|
|
'project_id' => $olderProject->id,
|
|
'sequence_number' => 1,
|
|
'ticket_key' => 'OLD-1',
|
|
'title' => 'Older visible ticket',
|
|
]);
|
|
Ticket::factory()->create([
|
|
'assignee_user_id' => $assignee->id,
|
|
'project_id' => $newerProject->id,
|
|
'sequence_number' => 2,
|
|
'ticket_key' => 'NEW-2',
|
|
'title' => 'Newer visible ticket',
|
|
]);
|
|
Ticket::factory()->create([
|
|
'assignee_user_id' => $assignee->id,
|
|
'project_id' => $hiddenProject->id,
|
|
'sequence_number' => 1,
|
|
'ticket_key' => 'HID-1',
|
|
'title' => 'Hidden ticket',
|
|
]);
|
|
Ticket::factory()->create([
|
|
'assignee_user_id' => $otherAssignee->id,
|
|
'project_id' => $olderProject->id,
|
|
'sequence_number' => 3,
|
|
'ticket_key' => 'OLD-3',
|
|
'title' => 'Other user ticket',
|
|
]);
|
|
|
|
$this->withApplicationKey($viewer)
|
|
->getJson(route('api.users.assigned-tickets', $assignee))
|
|
->assertOk()
|
|
->assertJsonPath('meta.assignee.name', 'Assigned User')
|
|
->assertJsonPath('data.0.project.name', 'Newer project')
|
|
->assertJsonPath('data.0.tickets.0.ticket_key', 'NEW-2')
|
|
->assertJsonCount(1, 'data.0.tickets')
|
|
->assertJsonPath('data.1.project.name', 'Older project')
|
|
->assertJsonPath('data.1.tickets.0.ticket_key', 'OLD-1')
|
|
->assertJsonCount(1, 'data.1.tickets')
|
|
->assertJsonCount(2, 'data');
|
|
}
|
|
|
|
public function test_assignee_metadata_is_hidden_when_no_visible_assigned_tickets_exist(): void
|
|
{
|
|
$viewer = User::factory()->create();
|
|
$assignee = User::factory()->create([
|
|
'email' => 'assignee@example.test',
|
|
'name' => 'Hidden Assignee',
|
|
]);
|
|
$hiddenProject = Project::factory()->create();
|
|
|
|
Ticket::factory()->create([
|
|
'assignee_user_id' => $assignee->id,
|
|
'project_id' => $hiddenProject->id,
|
|
'sequence_number' => 42,
|
|
'ticket_key' => 'HID-42',
|
|
'title' => 'Invisible assignment',
|
|
]);
|
|
|
|
$this->withApplicationKey($viewer)
|
|
->getJson(route('api.users.assigned-tickets', $assignee))
|
|
->assertOk()
|
|
->assertJsonPath('data', [])
|
|
->assertJsonPath('meta.assignee', null);
|
|
}
|
|
}
|