Hide assignee metadata when no visible assigned tickets exist
This commit is contained in:
@@ -18,10 +18,14 @@ class UserAssignedTicketController extends ApiController
|
|||||||
{
|
{
|
||||||
$viewer = $this->authenticatedUser($request);
|
$viewer = $this->authenticatedUser($request);
|
||||||
|
|
||||||
|
$assignedTickets = $this->listAssignedTicketsByVisibleProject->handle($viewer, $user);
|
||||||
|
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'data' => $this->listAssignedTicketsByVisibleProject->handle($viewer, $user),
|
'data' => $assignedTickets,
|
||||||
'meta' => [
|
'meta' => [
|
||||||
'assignee' => UserResource::make($user)->resolve(),
|
'assignee' => $assignedTickets === []
|
||||||
|
? null
|
||||||
|
: UserResource::make($user)->resolve(),
|
||||||
],
|
],
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1643,7 +1643,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"AssignedTicketsPayload": {
|
"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": {
|
"content": {
|
||||||
"application/json": {
|
"application/json": {
|
||||||
"schema": {
|
"schema": {
|
||||||
@@ -1844,7 +1844,14 @@
|
|||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
"assignee": {
|
"assignee": {
|
||||||
"$ref": "#/components/schemas/User"
|
"anyOf": [
|
||||||
|
{
|
||||||
|
"$ref": "#/components/schemas/User"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "null"
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"required": ["assignee"]
|
"required": ["assignee"]
|
||||||
|
|||||||
@@ -77,4 +77,37 @@ class AssignedTicketsApiTest extends TestCase
|
|||||||
->assertJsonCount(1, 'data.1.tickets')
|
->assertJsonCount(1, 'data.1.tickets')
|
||||||
->assertJsonCount(2, 'data');
|
->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('UserGitConnectionRequest', $document['components']['schemas']);
|
||||||
$this->assertArrayHasKey('AssignedTicketsPayloadEnvelope', $document['components']['schemas']);
|
$this->assertArrayHasKey('AssignedTicketsPayloadEnvelope', $document['components']['schemas']);
|
||||||
$this->assertArrayHasKey('AssignedTicketsProjectGroup', $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