FOSSology  4.4.0
Open Source License Compliance by Open Source Software
DbHelperTest.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 if (session_status() == PHP_SESSION_NONE) {
16  session_start();
17 }
18 
19 require_once dirname(dirname(dirname(dirname(__DIR__)))) .
20  '/lib/php/Plugin/FO_Plugin.php';
21 
23 use Mockery as M;
29 
34 class DbHelperTest extends \PHPUnit\Framework\TestCase
35 {
41 
46  private $dbManager;
47 
52  private $dbHelper;
53 
58  private $folderDao;
59 
64  private $uploadDao;
65 
70  protected function setUp() : void
71  {
72  $this->dbManager = M::mock(ModernDbManager::class);
73  $this->folderDao = M::mock(FolderDao::class);
74  $this->uploadDao = M::mock(UploadDao::class);
75 
76  $this->dbHelper = new DbHelper($this->dbManager, $this->folderDao,
77  $this->uploadDao);
78  $this->assertCountBefore = \Hamcrest\MatcherAssert::getCount();
79  }
80 
85  protected function tearDown() : void
86  {
87  $GLOBALS['SysConf']['auth'][Auth::USER_ID] = -1;
88  $_SESSION[Auth::USER_LEVEL] = -1;
89  $this->addToAssertionCount(
90  \Hamcrest\MatcherAssert::getCount() - $this->assertCountBefore);
91  M::close();
92  }
93 
98  private function generateUserRow()
99  {
100  $agent_list = [];
101  $agent_list[2] = 'nomos,monk';
102  $agent_list[3] = 'nomos,ojo';
103  $agent_list[4] = 'copyright,ecc';
104 
105  $perm_list = [];
106  $perm_list[2] = PLUGIN_DB_ADMIN;
107  $perm_list[3] = PLUGIN_DB_WRITE;
108  $perm_list[4] = PLUGIN_DB_READ;
109 
110  $userRows = [];
111  for ($i = 2; $i <= 4; $i++) {
112  $row = [
113  'user_pk' => $i, 'user_name' => "user$i", 'user_desc' => "user $i",
114  'user_email' => "user$i@local", 'email_notify' => 'y',
115  'root_folder_fk' => 2, 'group_fk' => 2, 'user_perm' => $perm_list[$i],
116  'user_agent_list' => $agent_list[$i], 'default_bucketpool_fk' => 2
117  ];
118  $userRows[$i] = $row;
119  }
120  return $userRows;
121  }
122 
130  private function generateUserFromRow($rows, $currentUser = null)
131  {
132  $users = [];
133  foreach ($rows as $row) {
134  if ($currentUser === null || $row['user_pk'] == $currentUser) {
135  $user = new User($row["user_pk"], $row["user_name"], $row["user_desc"],
136  $row["user_email"], $row["user_perm"], $row["root_folder_fk"],
137  $row["email_notify"], $row["user_agent_list"], $row['group_fk'], $row["default_bucketpool_fk"]);
138  } else {
139  $user = new User($row["user_pk"], $row["user_name"], $row["user_desc"],
140  null, null, null, null, null, null);
141  }
142  $users[$row["user_pk"]] = $user->getArray();
143  }
144  return $users;
145  }
146 
152  public function testGetUsersAll()
153  {
154  $userId = 2;
155 
156  $GLOBALS['SysConf']['auth'][Auth::USER_ID] = $userId;
157  $_SESSION[Auth::USER_LEVEL] = Auth::PERM_ADMIN;
158 
159  $sql = 'SELECT user_pk, user_name, user_desc, user_email,
160  email_notify, root_folder_fk, group_fk, user_perm, user_agent_list, ' .
161  'default_bucketpool_fk FROM users;';
162  $statement = DbHelper::class . "::getUsers.getAllUsers";
163  $userRows = $this->generateUserRow();
164 
165  $this->dbManager->shouldReceive('getRows')
166  ->withArgs([$sql, [], $statement])
167  ->once()
168  ->andReturn($userRows);
169 
170  $expectedUsers = array_values($this->generateUserFromRow($userRows));
171  $actualUsers = $this->dbHelper->getUsers();
172 
173  $allUsers = array();
174  foreach ($actualUsers as $user) {
175  $allUsers[] = $user->getArray();
176  }
177 
178  $this->assertEquals($expectedUsers, $allUsers);
179  }
180 
186  public function testGetUsersAllNonAdmin()
187  {
188  $userId = 3;
189 
190  $GLOBALS['SysConf']['auth'][Auth::USER_ID] = $userId;
191  $_SESSION[Auth::USER_LEVEL] = Auth::PERM_WRITE;
192 
193  $sql = 'SELECT user_pk, user_name, user_desc, user_email,
194  email_notify, root_folder_fk, group_fk, user_perm, user_agent_list, ' .
195  'default_bucketpool_fk FROM users;';
196  $statement = DbHelper::class . "::getUsers.getAllUsers";
197  $userRows = $this->generateUserRow();
198 
199  $this->dbManager->shouldReceive('getRows')
200  ->withArgs([$sql, [], $statement])
201  ->once()
202  ->andReturn($userRows);
203 
204  $expectedUsers = array_values($this->generateUserFromRow($userRows,
205  $userId));
206  $actualUsers = $this->dbHelper->getUsers();
207  $allUsers = array();
208  foreach ($actualUsers as $user) {
209  $allUsers[] = $user->getArray();
210  }
211  $this->assertEquals($expectedUsers, $allUsers);
212  }
213 
219  public function testGetUsersSingleUserAdmin()
220  {
221  $userId = 2;
222 
223  $GLOBALS['SysConf']['auth'][Auth::USER_ID] = $userId;
224  $_SESSION[Auth::USER_LEVEL] = Auth::PERM_ADMIN;
225 
226  $sql = "SELECT user_pk, user_name, user_desc, user_email,
227  email_notify, root_folder_fk, group_fk, user_perm, user_agent_list, default_bucketpool_fk FROM users
228  WHERE user_pk = $1;";
229  $statement = DbHelper::class . "::getUsers.getSpecificUser";
230  $userRows = $this->generateUserRow();
231 
232  $this->dbManager->shouldReceive('getRows')
233  ->withArgs([$sql, [$userId], $statement])
234  ->once()
235  ->andReturn([$userRows[$userId]]);
236 
237  $expectedUsers = $this->generateUserFromRow($userRows, $userId);
238  $actualUsers = $this->dbHelper->getUsers($userId);
239 
240  $allUsers = array();
241  foreach ($actualUsers as $user) {
242  $allUsers[] = $user->getArray();
243  }
244  $this->assertEquals([$expectedUsers[$userId]], $allUsers);
245  }
246 
253  {
254  $userId = 3;
255  $fetchId = 4;
256 
257  $GLOBALS['SysConf']['auth'][Auth::USER_ID] = $userId;
258  $_SESSION[Auth::USER_LEVEL] = Auth::PERM_WRITE;
259 
260  $sql = "SELECT user_pk, user_name, user_desc, user_email,
261  email_notify, root_folder_fk, group_fk, user_perm, user_agent_list, default_bucketpool_fk FROM users
262  WHERE user_pk = $1;";
263  $statement = DbHelper::class . "::getUsers.getSpecificUser";
264  $userRows = $this->generateUserRow();
265 
266  $this->dbManager->shouldReceive('getRows')
267  ->withArgs([$sql, [$fetchId], $statement])
268  ->once()
269  ->andReturn([$userRows[$fetchId]]);
270 
271  $expectedUsers = $this->generateUserFromRow($userRows, $userId);
272  $actualUsers = $this->dbHelper->getUsers($fetchId);
273 
274  $allUsers = array();
275  foreach ($actualUsers as $user) {
276  $allUsers[] = $user->getArray();
277  }
278  $this->assertEquals([$expectedUsers[$fetchId]], $allUsers);
279  }
280 }
Contains the constants and helpers for authentication of user.
Definition: Auth.php:24
Provides helper methods to access database for REST api.
Definition: DbHelper.php:38
Model to hold user information.
Definition: User.php:21
generateUserFromRow($rows, $currentUser=null)
#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
fo_dbManager * dbManager
fo_dbManager object
Definition: process.c:16