diff --git a/app/Http/Controllers/Api/UserAssignedTicketController.php b/app/Http/Controllers/Api/UserAssignedTicketController.php index c750955..712b584 100644 --- a/app/Http/Controllers/Api/UserAssignedTicketController.php +++ b/app/Http/Controllers/Api/UserAssignedTicketController.php @@ -17,11 +17,14 @@ class UserAssignedTicketController extends ApiController public function __invoke(Request $request, User $user): JsonResponse { $viewer = $this->authenticatedUser($request); + $assignedTicketsByProject = $this->listAssignedTicketsByVisibleProject->handle($viewer, $user); return response()->json([ - 'data' => $this->listAssignedTicketsByVisibleProject->handle($viewer, $user), + 'data' => $assignedTicketsByProject, 'meta' => [ - 'assignee' => UserResource::make($user)->resolve(), + 'assignee' => $assignedTicketsByProject === [] + ? null + : UserResource::make($user)->resolve(), ], ]); } diff --git a/docs/openapi/kanbangit-api.openapi.json b/docs/openapi/kanbangit-api.openapi.json index 9a1a607..e1beb6f 100644 --- a/docs/openapi/kanbangit-api.openapi.json +++ b/docs/openapi/kanbangit-api.openapi.json @@ -1844,7 +1844,14 @@ "type": "object", "properties": { "assignee": { - "$ref": "#/components/schemas/User" + "oneOf": [ + { + "$ref": "#/components/schemas/User" + }, + { + "type": "null" + } + ] } }, "required": ["assignee"] diff --git a/tests/Feature/Api/AssignedTicketsApiTest.php b/tests/Feature/Api/AssignedTicketsApiTest.php index 196f39e..36fcb5a 100644 --- a/tests/Feature/Api/AssignedTicketsApiTest.php +++ b/tests/Feature/Api/AssignedTicketsApiTest.php @@ -77,4 +77,28 @@ 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([ + '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); + } }