Skip to content

Commit a66cbf8

Browse files
authored
hlapi add missing textual team member role handling
1 parent b20a223 commit a66cbf8

File tree

2 files changed

+96
-8
lines changed

2 files changed

+96
-8
lines changed

src/Glpi/Api/HL/Controller/ITILController.php

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1380,6 +1380,7 @@ private static function getCleanTeam(CommonITILObject $item): array
13801380
}
13811381
}
13821382
// Add a link to the full resource represented by the team member (User, Group, etc)
1383+
$member['id'] = $member_items_id;
13831384
$member['href'] = $member_itemtype::getFormURLWithID($member_items_id);
13841385
// Replace role with non-localized textual representation
13851386
try {
@@ -1472,11 +1473,7 @@ public function getTeamMembersByRole(Request $request): Response
14721473
/** @var CommonITILObject $item */
14731474
$item = $request->getParameter('_item');
14741475

1475-
// TODO Handle textual representations of roles
1476-
$role_id = $request->getAttribute('role');
1477-
if ($role_id === null) {
1478-
self::getInvalidParametersErrorResponse();
1479-
}
1476+
$role_id = self::getRoleName($request->getAttribute('role'));
14801477

14811478
$team = self::getCleanTeam($item);
14821479
$team = array_filter($team, static fn($v) => $v['role'] === $role_id, ARRAY_FILTER_USE_BOTH);
@@ -1521,8 +1518,7 @@ public function addTeamMember(Request $request): Response
15211518

15221519
$member_itemtype = $request->getParameter('type');
15231520
$member_items_id = $request->getParameter('id');
1524-
// TODO Handle textual representations of roles
1525-
$role_id = $request->getParameter('role');
1521+
$role_id = self::getRoleID($request->getParameter('role'));
15261522

15271523
$result = $item->addTeamMember($member_itemtype, $member_items_id, [
15281524
'role' => $role_id,
@@ -1571,7 +1567,6 @@ public function removeTeamMember(Request $request): Response
15711567

15721568
$member_itemtype = $request->getParameter('type');
15731569
$member_items_id = $request->getParameter('id');
1574-
// TODO Handle textual representations of roles
15751570
$role_id = self::getRoleID($request->getParameter('role'));
15761571

15771572
$result = $item->deleteTeamMember($member_itemtype, $member_items_id, [

tests/functional/Glpi/Api/HL/Controller/ITILControllerTest.php

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -605,4 +605,97 @@ public function testRestrictedRead()
605605
}
606606
}
607607
}
608+
609+
public function testCRUDTeamMembers()
610+
{
611+
$this->loginWeb();
612+
$this->api->getRouter()->registerAuthMiddleware(new InternalAuthMiddleware());
613+
$ticket = $this->createItem(Ticket::class, [
614+
'name' => __FUNCTION__,
615+
'content' => 'test',
616+
'entities_id' => getItemByTypeName('Entity', '_test_root_entity', true),
617+
]);
618+
619+
// Add team members
620+
$members = [
621+
['type' => 'User', 'id' => 3, 'role' => 'requester'],
622+
['type' => 'User', 'id' => 2, 'role' => 'observer'],
623+
['type' => 'User', 'id' => 4, 'role' => 'assigned'],
624+
];
625+
foreach ($members as $member) {
626+
$request = new Request('POST', "/Assistance/Ticket/{$ticket->getID()}/TeamMember");
627+
$request->setParameter('type', $member['type']);
628+
$request->setParameter('id', $member['id']);
629+
$request->setParameter('role', $member['role']);
630+
$this->api->call($request, function ($call) {
631+
/** @var \HLAPICallAsserter $call */
632+
$call->response->isOK();
633+
});
634+
}
635+
636+
// Get all members
637+
$this->api->call(new Request('GET', "/Assistance/Ticket/{$ticket->getID()}/TeamMember"), function ($call) use ($members) {
638+
/** @var \HLAPICallAsserter $call */
639+
$call->response
640+
->isOK()
641+
->jsonContent(function ($content) use ($members) {
642+
$this->assertCount(count($members), $content);
643+
$member_ids = array_column($members, 'id');
644+
foreach ($content as $member) {
645+
$this->assertContains($member['id'], $member_ids);
646+
}
647+
});
648+
});
649+
650+
// Get by role
651+
$this->api->call(new Request('GET', "/Assistance/Ticket/{$ticket->getID()}/TeamMember/requester"), function ($call) {
652+
/** @var \HLAPICallAsserter $call */
653+
$call->response
654+
->isOK()
655+
->jsonContent(function ($content) {
656+
$this->assertCount(1, $content);
657+
$this->assertEquals(3, array_values($content)[0]['id']);
658+
});
659+
});
660+
$this->api->call(new Request('GET', "/Assistance/Ticket/{$ticket->getID()}/TeamMember/observer"), function ($call) {
661+
/** @var \HLAPICallAsserter $call */
662+
$call->response
663+
->isOK()
664+
->jsonContent(function ($content) {
665+
$this->assertCount(1, $content);
666+
$this->assertEquals(2, array_values($content)[0]['id']);
667+
});
668+
});
669+
$this->api->call(new Request('GET', "/Assistance/Ticket/{$ticket->getID()}/TeamMember/assigned"), function ($call) {
670+
/** @var \HLAPICallAsserter $call */
671+
$call->response
672+
->isOK()
673+
->jsonContent(function ($content) {
674+
$this->assertCount(1, $content);
675+
$this->assertEquals(4, array_values($content)[0]['id']);
676+
});
677+
});
678+
679+
// Remove members
680+
foreach ($members as $member) {
681+
$request = new Request('DELETE', "/Assistance/Ticket/{$ticket->getID()}/TeamMember");
682+
$request->setParameter('type', $member['type']);
683+
$request->setParameter('id', $member['id']);
684+
$request->setParameter('role', $member['role']);
685+
$this->api->call($request, function ($call) {
686+
/** @var \HLAPICallAsserter $call */
687+
$call->response->isOK();
688+
});
689+
}
690+
691+
// Verify removal
692+
$this->api->call(new Request('GET', "/Assistance/Ticket/{$ticket->getID()}/TeamMember"), function ($call) {
693+
/** @var \HLAPICallAsserter $call */
694+
$call->response
695+
->isOK()
696+
->jsonContent(function ($content) {
697+
$this->assertCount(0, $content);
698+
});
699+
});
700+
}
608701
}

0 commit comments

Comments
 (0)