Add application API keys
linter / quality (pull_request) Successful in 1m19s
tests / ci (8.4) (pull_request) Successful in 1m32s

This commit is contained in:
2026-04-20 19:58:24 +02:00
parent a6a4615ad5
commit bf0e50464a
31 changed files with 1124 additions and 46 deletions
@@ -0,0 +1,80 @@
<?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');
}
}