Hide assignee metadata when no visible assigned tickets exist

This commit is contained in:
2026-04-24 09:37:53 +00:00
parent bf0e50464a
commit ae00f1fc44
4 changed files with 56 additions and 4 deletions
@@ -18,10 +18,14 @@ class UserAssignedTicketController extends ApiController
{
$viewer = $this->authenticatedUser($request);
$assignedTickets = $this->listAssignedTicketsByVisibleProject->handle($viewer, $user);
return response()->json([
'data' => $this->listAssignedTicketsByVisibleProject->handle($viewer, $user),
'data' => $assignedTickets,
'meta' => [
'assignee' => UserResource::make($user)->resolve(),
'assignee' => $assignedTickets === []
? null
: UserResource::make($user)->resolve(),
],
]);
}
+9 -2
View File
@@ -1643,7 +1643,7 @@
}
},
"AssignedTicketsPayload": {
"description": "Tickets assigned to a user grouped by projects visible to the authenticated application key owner.",
"description": "Tickets assigned to a user grouped by projects visible to the authenticated application key owner. meta.assignee is null when no visible assigned tickets exist.",
"content": {
"application/json": {
"schema": {
@@ -1844,7 +1844,14 @@
"type": "object",
"properties": {
"assignee": {
"$ref": "#/components/schemas/User"
"anyOf": [
{
"$ref": "#/components/schemas/User"
},
{
"type": "null"
}
]
}
},
"required": ["assignee"]
@@ -77,4 +77,37 @@ class AssignedTicketsApiTest extends TestCase
->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);
}
}
@@ -83,5 +83,13 @@ class OpenApiDocumentationTest extends TestCase
$this->assertArrayHasKey('UserGitConnectionRequest', $document['components']['schemas']);
$this->assertArrayHasKey('AssignedTicketsPayloadEnvelope', $document['components']['schemas']);
$this->assertArrayHasKey('AssignedTicketsProjectGroup', $document['components']['schemas']);
$assigneeSchema = $document['components']['schemas']['AssignedTicketsPayloadEnvelope']['properties']['meta']['properties']['assignee'] ?? null;
$this->assertIsArray($assigneeSchema);
$this->assertSame([
['$ref' => '#/components/schemas/User'],
['type' => 'null'],
], $assigneeSchema['anyOf'] ?? null);
}
}