Files
KanbanGit/tests/Feature/Api/AssignedTicketsApiTest.php
T

114 lines
3.8 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([
'name' => 'Hidden User',
]);
$visibleProject = Project::factory()->create([
'key' => 'VIS',
'name' => 'Visible project',
]);
$hiddenProject = Project::factory()->create([
'key' => 'HID',
'name' => 'Hidden project',
]);
$this->syncProjectPermissions($visibleProject, $viewer, ['view']);
Ticket::factory()->create([
'assignee_user_id' => $assignee->id,
'project_id' => $hiddenProject->id,
'sequence_number' => 1,
'ticket_key' => 'HID-1',
'title' => 'Hidden ticket',
]);
$this->withApplicationKey($viewer)
->getJson(route('api.users.assigned-tickets', $assignee))
->assertOk()
->assertJsonPath('data', [])
->assertJsonPath('meta.assignee', null);
}
}