14 require_once dirname(__DIR__, 4) .
'/lib/php/Plugin/FO_Plugin.php';
33 use Slim\Psr7\Factory\StreamFactory;
34 use Slim\Psr7\Headers;
35 use Slim\Psr7\Request;
50 const YAML_LOC = __DIR__ .
'/../../../ui/api/documentation/openapi.yaml';
80 protected function setUp() : void
83 $container = M::mock(
'ContainerBuilder');
84 $this->dbHelper = M::mock(DbHelper::class);
85 $this->restHelper = M::mock(RestHelper::class);
86 $this->userDao = M::mock(UserDao::class);
87 $this->adminPlugin = M::mock(
'AdminGroupUsers');
89 $this->restHelper->shouldReceive(
'getDbHelper')->andReturn($this->dbHelper);
90 $this->restHelper->shouldReceive(
'getUserDao')
91 ->andReturn($this->userDao);
93 $this->restHelper->shouldReceive(
'getPlugin')
94 ->withArgs(array(
'group_manage_users'))->andReturn($this->adminPlugin);
96 $container->shouldReceive(
'get')->withArgs(array(
97 'helper.restHelper'))->andReturn($this->restHelper);
99 $this->assertCountBefore = \Hamcrest\MatcherAssert::getCount();
100 $this->
dbManager = M::mock(DbManager::class);
101 $this->dbHelper->shouldReceive(
'getDbManager')->andReturn($this->
dbManager);
102 $this->streamFactory =
new StreamFactory();
112 $this->addToAssertionCount(
113 \Hamcrest\MatcherAssert::getCount() - $this->assertCountBefore);
125 $response->getBody()->seek(0);
126 return json_decode($response->getBody()->getContents(),
true);
136 $groupPermissions = array(
"NONE" => -1, UserDao::USER => 0,
137 UserDao::ADMIN => 1, UserDao::ADVISOR => 2);
139 $memberList = array();
140 foreach ($userIds as $userId) {
141 $key = array_rand($groupPermissions);
143 null,
null,
null,
null,
null),$groupPermissions[$key]) ;
144 $memberList[] = $userGroupMember->getArray();
156 $groupPermissions = array(
"NONE" => -1, UserDao::USER => 0,
157 UserDao::ADMIN => 1, UserDao::ADVISOR => 2);
159 $usersWithGroup = array();
160 foreach ($userIds as $userId) {
161 $perm = array_rand($groupPermissions);
163 "user_pk" => $userId,
164 "group_perm"=> $perm,
165 "user_name" => $userId.
"username",
166 "user_desc" => $userId.
"desc",
167 "user_status"=>
'active'
169 $usersWithGroup[] = $user;
171 return $usersWithGroup;
197 $groupName =
'fossyGroup';
201 $this->restHelper->shouldReceive(
'getUserId')->andReturn($userId);
202 $this->userDao->shouldReceive(
'addGroup')->withArgs([$groupName])
203 ->andReturn($groupId);
204 $this->userDao->shouldReceive(
'addGroupMembership')
205 ->withArgs([$groupId, $userId]);
207 $requestHeaders =
new Headers();
208 if ($version == ApiVersion::V2) {
209 $request =
new Request(
"POST",
210 new Uri(
"HTTP",
"localhost",
null,
"/groups",
"name=" . $groupName),
211 $requestHeaders, [], [], $this->streamFactory->createStream());
213 $requestHeaders->setHeader(
'name', $groupName);
214 $request =
new Request(
"POST",
new Uri(
"HTTP",
"localhost"),
215 $requestHeaders, [], [], $this->streamFactory->createStream());
217 $request = $request->withAttribute(ApiVersion::ATTRIBUTE_NAME, $version);
219 $expectedCode = $version == ApiVersion::V2 ? 201 : 200;
220 $expectedResponse =
new Info($expectedCode,
221 "Group $groupName added.", InfoType::INFO);
223 $actualResponse = $this->groupController->createGroup($request,
226 $this->assertEquals($expectedResponse->getCode(),
227 $actualResponse->getStatusCode());
228 $this->assertEquals($expectedResponse->getArray(),
229 $this->getResponseJson($actualResponse));
259 $request = M::mock(Request::class);
260 $userArray = [
'user_pk' => $newUser];
263 if ($version == ApiVersion::V2) {
264 $this->restHelper->getUserDao()->shouldReceive(
'getGroupIdByName')->withArgs([$groupId])->andReturn($groupId);
265 $this->restHelper->getUserDao()->shouldReceive(
'getUserByName')->withArgs([$userPk])->andReturn($userArray);
267 $request->shouldReceive(
'getAttribute')->andReturn($version);
268 $this->restHelper->shouldReceive(
'getUserId')->andReturn($userId);
269 $this->dbHelper->shouldReceive(
'doesIdExist')
270 ->withArgs([
"groups",
"group_pk", $groupId])->andReturn(
true);
272 $this->userDao->shouldReceive(
'getDeletableAdminGroupMap')->withArgs([$userId,$_SESSION[
Auth::USER_LEVEL]]);
273 $this->userDao->shouldReceive(
'deleteGroup')->withArgs([$groupId]);
275 $info =
new Info(202,
"User Group will be deleted", InfoType::INFO);
276 $expectedResponse = (
new ResponseHelper())->withJson($info->getArray(),
278 $actualResponse = $this->groupController->deleteGroup($request,
new ResponseHelper(),
279 [
'pathParam' => $groupId]);
281 $this->assertEquals($expectedResponse->getStatusCode(),
282 $actualResponse->getStatusCode());
311 $groupList = array();
312 $this->restHelper->shouldReceive(
'getUserId')->andReturn($userId);
314 $this->userDao->shouldReceive(
'getDeletableAdminGroupMap')->withArgs([$userId,
316 $expectedResponse = (
new ResponseHelper())->withJson($groupList, 200);
317 $actualResponse = $this->groupController->getDeletableGroups(
null,
new ResponseHelper(), []);
318 $this->assertEquals($expectedResponse->getStatusCode(), $actualResponse->getStatusCode());
346 $groupName =
'fossy';
351 $request = M::mock(Request::class);
352 $groupIds = [1,2,3,4,5,6];
353 $userArray = [
'user_pk' => $newuser];
356 if ($version == ApiVersion::V2) {
357 $this->restHelper->getUserDao()->shouldReceive(
'getGroupIdByName')->withArgs([$groupIds[0]])->andReturn($groupIds[0]);
358 $this->restHelper->getUserDao()->shouldReceive(
'getUserByName')->withArgs([$userPk])->andReturn($userArray);
360 $request->shouldReceive(
'getAttribute')->andReturn($version);
361 $this->restHelper->getUserDao()->shouldReceive(
'getGroupIdByName')->withArgs([$groupName])->andReturn($groupId);
362 $this->restHelper->shouldReceive(
'getUserId')->andReturn($userIds[0]);
363 $this->userDao->shouldReceive(
'getAdminGroupMap')->withArgs([$userIds[0],$_SESSION[
Auth::USER_LEVEL]])->andReturn([1]);
365 $this->
dbManager->shouldReceive(
'prepare')->withArgs([M::any(),M::any()]);
366 $this->
dbManager->shouldReceive(
'execute')->withArgs([M::any(),array($groupId)])->andReturn(1);
368 $this->
dbManager->shouldReceive(
'freeResult')->withArgs([1]);
372 $users[] =
new User($user[
"user_pk"], $user[
"user_name"], $user[
"user_desc"],
373 null,
null,
null,
null,
null);
374 $this->dbHelper->shouldReceive(
"getUsers")->withArgs([$user[
'user_pk']])->andReturn($users);
376 $expectedResponse = (
new ResponseHelper())->withJson($memberList, 200);
378 $actualResponse = $this->groupController->getGroupMembers($request,
new ResponseHelper(), [
'pathParam' => $groupId]);
379 $this->assertEquals($expectedResponse->getStatusCode(),$actualResponse->getStatusCode());
415 $groupIds = [1,2,3,4,5,6];
416 $userArray = [
'user_pk' => $newuser];
420 if ($version == ApiVersion::V2) {
421 $this->restHelper->getUserDao()->shouldReceive(
'getGroupIdByName')->withArgs([$groupIds[0]])->andReturn($groupId);
422 $this->restHelper->getUserDao()->shouldReceive(
'getUserByName')->withArgs([$userId])->andReturn($userArray);
424 $this->dbHelper->shouldReceive(
'doesIdExist')->withArgs([
"groups",
"group_pk", $groupId])->andReturn(
true);
425 $this->dbHelper->shouldReceive(
'doesIdExist')->withArgs([
"users",
"user_pk",$newuser])->andReturn(
true);
426 $this->
dbManager->shouldReceive(
'getSingleRow')->withArgs([M::any(),M::any(),M::any()])->andReturn($emptyArr);
427 $this->restHelper->shouldReceive(
'getUserId')->andReturn($userId);
428 $this->userDao->shouldReceive(
'isAdvisorOrAdmin')->withArgs([$userId, $groupId])->andReturn(
true);
430 $this->
dbManager->shouldReceive(
'prepare')->withArgs([M::any(),M::any()]);
431 $this->
dbManager->shouldReceive(
'execute')->withArgs([M::any(),array($groupId, $newuser,$newPerm)])->andReturn(1);
432 $this->
dbManager->shouldReceive(
'freeResult')->withArgs([1]);
434 $body = $this->streamFactory->createStream(json_encode([
437 $requestHeaders =
new Headers();
438 $requestHeaders->setHeader(
'Content-Type',
'application/json');
439 $request =
new Request(
"POST",
new Uri(
"HTTP",
"localhost"),
440 $requestHeaders, [], [], $body);
441 $request = $request->withAttribute(ApiVersion::ATTRIBUTE_NAME,$version);
442 $expectedResponse =
new Info(201,
"User added to group.", InfoType::INFO);
444 $actualResponse = $this->groupController->addMember($request,
new ResponseHelper(), [
'pathParam' => $groupId,
'userPathParam' => $newuser]);
445 $this->assertEquals($expectedResponse->getCode(),$actualResponse->getStatusCode());
446 $this->assertEquals($expectedResponse->getArray(),$this->getResponseJson($actualResponse));
477 $groupIds = [1,2,3,4,5,6];
478 $userArray = [
'user_pk' => $newuser];
482 if ($version == ApiVersion::V2) {
483 $this->restHelper->getUserDao()->shouldReceive(
'getGroupIdByName')->withArgs([$groupIds[0]])->andReturn($groupId);
484 $this->restHelper->getUserDao()->shouldReceive(
'getUserByName')->withArgs([$userId])->andReturn($userArray);
486 $this->dbHelper->shouldReceive(
'doesIdExist')->withArgs([
"groups",
"group_pk", $groupId])->andReturn(
true);
487 $this->dbHelper->shouldReceive(
'doesIdExist')->withArgs([
"users",
"user_pk",$newuser])->andReturn(
true);
488 $this->restHelper->shouldReceive(
'getUserId')->andReturn($userId);
489 $this->userDao->shouldReceive(
'isAdvisorOrAdmin')->withArgs([$userId, $groupId])->andReturn(
false);
491 $body = $this->streamFactory->createStream(json_encode([
494 $requestHeaders =
new Headers();
495 $requestHeaders->setHeader(
'Content-Type',
'application/json');
496 $request =
new Request(
"POST",
new Uri(
"HTTP",
"localhost"),
497 $requestHeaders, [], [], $body);
498 $request = $request->withAttribute(ApiVersion::ATTRIBUTE_NAME,$version);
499 $this->expectException(HttpForbiddenException::class);
502 [
'pathParam' => $groupId,
'userPathParam' => $newuser]);
513 $this->testAddMemberUserGroupAdmin(ApiVersion::V1);
523 $this->testAddMemberUserGroupAdmin();
525 private function testAddMemberUserGroupAdmin($version = ApiVersion::V2)
531 $groupIds = [1,2,3,4,5,6];
532 $userArray = [
'user_pk' => $newuser];
536 if ($version == ApiVersion::V2) {
537 $this->restHelper->getUserDao()->shouldReceive(
'getGroupIdByName')->withArgs([$groupIds[0]])->andReturn($groupId);
538 $this->restHelper->getUserDao()->shouldReceive(
'getUserByName')->withArgs([$userId])->andReturn($userArray);
540 $this->dbHelper->shouldReceive(
'doesIdExist')->withArgs([
"groups",
"group_pk", $groupId])->andReturn(
true);
541 $this->dbHelper->shouldReceive(
'doesIdExist')->withArgs([
"users",
"user_pk",$newuser])->andReturn(
true);
542 $this->
dbManager->shouldReceive(
'getSingleRow')->withArgs([M::any(),M::any(),M::any()])->andReturn($emptyArr);
543 $this->restHelper->shouldReceive(
'getUserId')->andReturn($userId);
544 $this->userDao->shouldReceive(
'isAdvisorOrAdmin')->withArgs([$userId, $groupId])->andReturn(
true);
546 $this->
dbManager->shouldReceive(
'prepare')->withArgs([M::any(),M::any()]);
547 $this->
dbManager->shouldReceive(
'execute')->withArgs([M::any(),array($groupId, $newuser,$newPerm)])->andReturn(1);
548 $this->
dbManager->shouldReceive(
'freeResult')->withArgs([1]);
550 $body = $this->streamFactory->createStream(json_encode([
553 $requestHeaders =
new Headers();
554 $requestHeaders->setHeader(
'Content-Type',
'application/json');
555 $request =
new Request(
"POST",
new Uri(
"HTTP",
"localhost"),
556 $requestHeaders, [], [], $body);
557 $request = $request->withAttribute(ApiVersion::ATTRIBUTE_NAME,$version);
558 $expectedResponse =
new Info(201,
"User added to group.", InfoType::INFO);
560 $actualResponse = $this->groupController->addMember($request,
new ResponseHelper(), [
'pathParam' => $groupId,
'userPathParam' => $newuser]);
561 $this->assertEquals($expectedResponse->getCode(),$actualResponse->getStatusCode());
562 $this->assertEquals($expectedResponse->getArray(),$this->getResponseJson($actualResponse));
599 $groupIds = [1,2,3,4,5,6];
600 $userArray = [
'user_pk' => $newuser];
604 if ($version == ApiVersion::V2) {
605 $this->restHelper->getUserDao()->shouldReceive(
'getGroupIdByName')->withArgs([$groupIds[0]])->andReturn($groupId);
606 $this->restHelper->getUserDao()->shouldReceive(
'getUserByName')->withArgs([$userId])->andReturn($userArray);
608 $this->dbHelper->shouldReceive(
'doesIdExist')->withArgs([
"groups",
"group_pk", $groupId])->andReturn(
true);
609 $this->dbHelper->shouldReceive(
'doesIdExist')->withArgs([
"users",
"user_pk",$newuser])->andReturn(
true);
610 $this->
dbManager->shouldReceive(
'getSingleRow')->withArgs([M::any(),M::any(),M::any()])->andReturn(
true);
611 $this->restHelper->shouldReceive(
'getUserId')->andReturn($userId);
612 $this->userDao->shouldReceive(
'isAdvisorOrAdmin')->withArgs([$userId, $groupId])->andReturn(
true);
614 $body = $this->streamFactory->createStream(json_encode([
617 $requestHeaders =
new Headers();
618 $requestHeaders->setHeader(
'Content-Type',
'application/json');
619 $request =
new Request(
"POST",
new Uri(
"HTTP",
"localhost"),
620 $requestHeaders, [], [], $body);
621 $request = $request->withAttribute(ApiVersion::ATTRIBUTE_NAME,$version);
622 $this->expectException(HttpBadRequestException::class);
625 [
'pathParam' => $groupId,
'userPathParam' => $newuser]);
652 $group_user_member_pk = 1;
656 $groupIds = [1,2,3,4,5,6];
657 $userArray = [
'user_pk' => $userPk];
661 if ($version == ApiVersion::V2) {
662 $this->restHelper->getUserDao()->shouldReceive(
'getGroupIdByName')->withArgs([$groupIds[0]])->andReturn($groupId);
663 $this->restHelper->getUserDao()->shouldReceive(
'getUserByName')->withArgs([$userId])->andReturn($userArray);
665 $this->dbHelper->shouldReceive(
'doesIdExist')->withArgs([
"groups",
"group_pk", $groupIds[0]])->andReturn(
true);
666 $this->dbHelper->shouldReceive(
'doesIdExist')->withArgs([
"users",
"user_pk",$userPk])->andReturn(
true);
667 $this->
dbManager->shouldReceive(
'getSingleRow')->withArgs([M::any(),M::any(),M::any()])->andReturn([
'group_pk'=>$groupIds[0],
'group_user_member_pk'=>$group_user_member_pk,
'permission'=>$newPerm]);
668 $this->restHelper->shouldReceive(
'getUserId')->andReturn($userId);
669 $this->userDao->shouldReceive(
'isAdvisorOrAdmin')->withArgs([$userPk, $groupIds[0]])->andReturn(
true);
670 $this->userDao->shouldReceive(
'getUserByName')->withArgs([M::any(),M::any()]);
672 $this->adminPlugin->shouldReceive(
'updateGUMPermission')->withArgs([$group_user_member_pk,$newPerm, $this->
dbManager ]);
674 $body = $this->streamFactory->createStream(json_encode([
677 $requestHeaders =
new Headers();
678 $requestHeaders->setHeader(
'Content-Type',
'application/json');
679 $request =
new Request(
"POST",
new Uri(
"HTTP",
"localhost"),
680 $requestHeaders, [], [], $body);
681 $request = $request->withAttribute(ApiVersion::ATTRIBUTE_NAME,$version);
682 $expectedResponse =
new Info(202,
"Permission updated successfully.", InfoType::INFO);
684 $actualResponse = $this->groupController->changeUserPermission($request,
new ResponseHelper(), [
'pathParam' => $groupIds[0],
'userPathParam' => $userId]);
685 $this->assertEquals($expectedResponse->getCode(),$actualResponse->getStatusCode());
686 $this->assertEquals($expectedResponse->getArray(),$this->getResponseJson($actualResponse));
717 $userArray = [
'user_pk' => $userId];
720 if ($version == ApiVersion::V2) {
721 $this->userDao->shouldReceive(
'getUserByName')
722 ->withArgs([$userId])->andReturn($userArray);
723 $this->userDao->shouldReceive(
'getGroupIdByName')
724 ->withArgs([$groupId])->andReturn($groupId);
726 $this->restHelper->shouldReceive(
'getUserId')->andReturn(1);
727 $this->dbHelper->shouldReceive(
'doesIdExist')
728 ->withArgs([
"groups",
"group_pk", $groupId])->andReturn(
true);
729 $this->dbHelper->shouldReceive(
'doesIdExist')
730 ->withArgs([
"users",
"user_pk", $userId])->andReturn(
true);
731 $this->userDao->shouldReceive(
'isAdvisorOrAdmin')->andReturn(
true);
732 $this->
dbManager->shouldReceive(
'getSingleRow')->withArgs([M::any(), M::any(), M::any()])
733 ->andReturn([
'group_user_member_pk' => $groupMemberPk]);
734 $this->adminPlugin->shouldReceive(
'updateGUMPermission')
735 ->withArgs([$groupMemberPk, -1, $this->
dbManager]);
737 $requestHeaders =
new Headers();
738 $request =
new Request(
"DELETE",
new Uri(
"HTTP",
"localhost"),
739 $requestHeaders, [], [], $this->streamFactory->createStream());
740 $request = $request->withAttribute(ApiVersion::ATTRIBUTE_NAME, $version);
742 $expectedResponse =
new Info(202,
"User will be removed from group.", InfoType::INFO);
743 $actualResponse = $this->groupController->deleteGroupMember($request,
744 new ResponseHelper(), [
'pathParam' => $groupId,
'userPathParam' => $userId]);
746 $this->assertEquals($expectedResponse->getCode(), $actualResponse->getStatusCode());
747 $this->assertEquals($expectedResponse->getArray(), $this->getResponseJson($actualResponse));
761 $this->userDao->shouldReceive(
'getUserByName')
762 ->withArgs([$userId])->andReturn(
null);
764 $requestHeaders =
new Headers();
765 $request =
new Request(
"DELETE",
new Uri(
"HTTP",
"localhost"),
766 $requestHeaders, [], [], $this->streamFactory->createStream());
767 $request = $request->withAttribute(ApiVersion::ATTRIBUTE_NAME, ApiVersion::V2);
769 $this->expectException(HttpNotFoundException::class);
770 $this->groupController->deleteGroupMember($request,
771 new ResponseHelper(), [
'pathParam' => $groupId,
'userPathParam' => $userId]);
786 $this->userDao->shouldReceive(
'getUserByName')
787 ->withArgs([$userId])->andReturn(
null);
789 $body = $this->streamFactory->createStream(json_encode([
"perm" => $newPerm]));
790 $requestHeaders =
new Headers();
791 $requestHeaders->setHeader(
'Content-Type',
'application/json');
792 $request =
new Request(
"POST",
new Uri(
"HTTP",
"localhost"),
793 $requestHeaders, [], [], $body);
794 $request = $request->withAttribute(ApiVersion::ATTRIBUTE_NAME, ApiVersion::V2);
796 $this->expectException(HttpNotFoundException::class);
797 $this->groupController->addMember($request,
798 new ResponseHelper(), [
'pathParam' => $groupId,
'userPathParam' => $userId]);
813 $this->userDao->shouldReceive(
'getUserByName')
814 ->withArgs([$userId])->andReturn(
null);
816 $body = $this->streamFactory->createStream(json_encode([
"perm" => $newPerm]));
817 $requestHeaders =
new Headers();
818 $requestHeaders->setHeader(
'Content-Type',
'application/json');
819 $request =
new Request(
"PATCH",
new Uri(
"HTTP",
"localhost"),
820 $requestHeaders, [], [], $body);
821 $request = $request->withAttribute(ApiVersion::ATTRIBUTE_NAME, ApiVersion::V2);
823 $this->expectException(HttpNotFoundException::class);
824 $this->groupController->changeUserPermission($request,
825 new ResponseHelper(), [
'pathParam' => $groupId,
'userPathParam' => $userId]);
Contains the constants and helpers for authentication of user.
Controller for Group model.
Provides helper methods to access database for REST api.
Override Slim response for withJson function.
Provides various DAO helper functions for REST api.
Different type of infos provided by REST.
Info model to contain general error and return values.
Model to hold user information.
Tests for GroupController.
setUp()
Setup test objects.
testAddMemberUserNotAdminV1()
testChangeUserPermissionV2()
tearDown()
Remove test objects.
testDeleteGroupMemberSuccessV2()
testGetDeletableGroupsV1()
testChangeUserPermissionUserNotFoundV2()
testCreateGroup($version=ApiVersion::V2)
testChangeUserPermissionV1()
getResponseJson($response)
testDeleteGroupMemberSuccess($version=ApiVersion::V2)
testChangeUserPermission($version=ApiVersion::V2)
testDeleteGroupMemberSuccessV1()
testAddMemberUserAlreadyMember($version=ApiVersion::V2)
testAddMemberUserAlreadyMemberV1()
testAddMemberUserNotMember($version=ApiVersion::V2)
testGetGroupMembers($version=ApiVersion::V2)
testDeleteGroup($version=ApiVersion::V2)
testGetDeletableGroups($version=ApiVersion::V2)
testAddMemberUserNotMemberV1()
getUsersWithGroup($userIds)
getGroupMembers($userIds)
testAddMemberUserNotAdmin($version=ApiVersion::V2)
testAddMemberUserNotMemberV2()
testAddMemberUserNotAdminV2()
testAddMemberUserNotFoundV2()
testDeleteGroupMemberUserNotFoundV2()
testAddMemberUserGroupAdminV1()
testGetDeletableGroupsV2()
testAddMemberUserAlreadyMemberV2()
testAddMemberUserGroupAdminV2()
fo_dbManager * dbManager
fo_dbManager object