Hide assignee metadata when no shared visibility exists #56
@@ -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(),
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user