FOSSology  4.4.0
Open Source License Compliance by Open Source Software
UserControllerTest.php
Go to the documentation of this file.
1 <?php
2 /*
3  SPDX-FileCopyrightText: © 2020 Siemens AG
4  Author: Gaurav Mishra <mishra.gaurav@siemens.com>
5 
6  SPDX-License-Identifier: GPL-2.0-only
7 */
14 
15 require_once dirname(__DIR__, 4) . '/lib/php/Plugin/FO_Plugin.php';
16 
18 use Mockery as M;
27 
32 class UserControllerTest extends \PHPUnit\Framework\TestCase
33 {
34 
40 
45  private $dbHelper;
46 
51  private $restHelper;
52 
57  protected function setUp() : void
58  {
59  global $container;
60  $container = M::mock('ContainerBuilder');
61  $this->dbHelper = M::mock(DbHelper::class);
62  $this->restHelper = M::mock(RestHelper::class);
63  $this->userDao = M::mock(UserDao::class);
64 
65  $this->restHelper->shouldReceive('getDbHelper')->andReturn($this->dbHelper);
66  $this->restHelper->shouldReceive('getUserDao')
67  ->andReturn($this->userDao);
68 
69  $container->shouldReceive('get')->withArgs(array(
70  'helper.restHelper'))->andReturn($this->restHelper);
71  $this->userController = new UserController($container);
72  $this->assertCountBefore = \Hamcrest\MatcherAssert::getCount();
73  }
74 
79  protected function tearDown() : void
80  {
81  $this->addToAssertionCount(
82  \Hamcrest\MatcherAssert::getCount() - $this->assertCountBefore);
83  M::close();
84  }
85 
92  private function getResponseJson($response)
93  {
94  $response->getBody()->seek(0);
95  return json_decode($response->getBody()->getContents(), true);
96  }
97 
103  private function getUsers($userIds)
104  {
105  $userArray = array();
106  foreach ($userIds as $userId) {
107  if ($userId == 2) {
108  $accessLevel = PLUGIN_DB_ADMIN;
109  } elseif ($userId > 2 && $userId <= 4) {
110  $accessLevel = PLUGIN_DB_WRITE;
111  } elseif ($userId == 5) {
112  $accessLevel = PLUGIN_DB_READ;
113  } else {
114  continue;
115  }
116  $user = new User($userId, "user$userId", "User $userId",
117  "user$userId@example.com", $accessLevel, 2, 4, "");
118  $userArray[] = $user;
119  }
120  return $userArray;
121  }
122 
128  public function testGetSpecificUser()
129  {
130  $userId = 2;
131  $user = $this->getUsers([$userId]);
132  $this->dbHelper->shouldReceive('doesIdExist')
133  ->withArgs(["users", "user_pk", $userId])->andReturn(true);
134  $this->dbHelper->shouldReceive('getUsers')->withArgs([$userId])
135  ->andReturn($user);
136  $expectedResponse = (new ResponseHelper())->withJson($user[0]->getArray(), 200);
137  $actualResponse = $this->userController->getUsers(null, new ResponseHelper(),
138  ['id' => $userId]);
139  $this->assertEquals($expectedResponse->getStatusCode(),
140  $actualResponse->getStatusCode());
141  $this->assertEquals($this->getResponseJson($expectedResponse),
142  $this->getResponseJson($actualResponse));
143  }
144 
150  public function testGetSpecificUserNotFound()
151  {
152  $userId = 6;
153  $this->dbHelper->shouldReceive('doesIdExist')
154  ->withArgs(["users", "user_pk", $userId])->andReturn(false);
155  $this->expectException(HttpNotFoundException::class);
156 
157  $this->userController->getUsers(null, new ResponseHelper(),
158  ['id' => $userId]);
159  }
160 
166  public function testGetAllUsers()
167  {
168  $users = $this->getUsers([2, 3, 4]);
169  $this->dbHelper->shouldReceive('getUsers')->withArgs([null])
170  ->andReturn($users);
171 
172  $allUsers = array();
173  foreach ($users as $user) {
174  $allUsers[] = $user->getArray();
175  }
176 
177  $expectedResponse = (new ResponseHelper())->withJson($allUsers, 200);
178  $actualResponse = $this->userController->getUsers(null, new ResponseHelper(), []);
179  $this->assertEquals($expectedResponse->getStatusCode(),
180  $actualResponse->getStatusCode());
181  $this->assertEquals($this->getResponseJson($expectedResponse),
182  $this->getResponseJson($actualResponse));
183  }
184 
190  public function testDeleteUser()
191  {
192  $userId = 4;
193  $this->dbHelper->shouldReceive('doesIdExist')
194  ->withArgs(["users", "user_pk", $userId])->andReturn(true);
195  $this->dbHelper->shouldReceive('deleteUser')->withArgs([$userId]);
196  $info = new Info(202, "User will be deleted", InfoType::INFO);
197  $expectedResponse = (new ResponseHelper())->withJson($info->getArray(),
198  $info->getCode());
199  $actualResponse = $this->userController->deleteUser(null, new ResponseHelper(),
200  ['id' => $userId]);
201  $this->assertEquals($expectedResponse->getStatusCode(),
202  $actualResponse->getStatusCode());
203  $this->assertEquals($this->getResponseJson($expectedResponse),
204  $this->getResponseJson($actualResponse));
205  }
206 
212  public function testDeleteUserDoesNotExists()
213  {
214  $userId = 8;
215  $this->dbHelper->shouldReceive('doesIdExist')
216  ->withArgs(["users", "user_pk", $userId])->andReturn(false);
217  $this->expectException(HttpNotFoundException::class);
218 
219  $this->userController->deleteUser(null, new ResponseHelper(),
220  ['id' => $userId]);
221  }
222 
228  public function testGetCurrentUser()
229  {
230  $userId = 2;
231  $user = $this->getUsers([$userId]);
232 
233  $this->restHelper->shouldReceive('getUserId')->andReturn($userId);
234  $this->dbHelper->shouldReceive('getUsers')->withArgs([$userId])
235  ->andReturn($user);
236  $this->userDao->shouldReceive('getUserAndDefaultGroupByUserName')->withArgs([$user[0]->getArray()["name"]])
237  ->andReturn(["group_name" => "fossy"]);
238 
239  $expectedUser = $user[0]->getArray();
240  $expectedUser["default_group"] = "fossy";
241 
242  $expectedResponse = (new ResponseHelper())->withJson($expectedUser, 200);
243 
244  $actualResponse = $this->userController->getCurrentUser(null,
245  new ResponseHelper(), []);
246 
247  $this->assertEquals($expectedResponse->getStatusCode(),
248  $actualResponse->getStatusCode());
249  $this->assertEquals($this->getResponseJson($expectedResponse),
250  $this->getResponseJson($actualResponse));
251  }
252 }
Provides helper methods to access database for REST api.
Definition: DbHelper.php:38
Override Slim response for withJson function.
Provides various DAO helper functions for REST api.
Definition: RestHelper.php:32
Different type of infos provided by REST.
Definition: InfoType.php:16
Info model to contain general error and return values.
Definition: Info.php:19
Model to hold user information.
Definition: User.php:21
#define PLUGIN_DB_WRITE
Plugin requires write permission on DB.
Definition: libfossology.h:38
#define PLUGIN_DB_READ
Plugin requires read permission on DB.
Definition: libfossology.h:37
#define PLUGIN_DB_ADMIN
Plugin requires admin level permission on DB.
Definition: libfossology.h:39