1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
<?php
use PHPUnit\Framework\TestCase;
/**
* Adapted to use the SQLite-backed Database test backend with the canonical schema/seed.
* We also use the real Location class as GetPermissionData relies on it.
*
*/
class GetPermissionDataTest extends TestCase
{
protected function setUp(): void
{
Database::resetSchema();
// Use real Location
$GLOBALS['__TEST_USE_REAL_CLASSES'] = ['Location'];
require_once __DIR__ . '/../../../modules-available/locations/inc/location.inc.php';
}
public function testGetUserDataAggregatesRolesPerUser(): void
{
require_once __DIR__ . '/../../../modules-available/permissionmanager/inc/getpermissiondata.inc.php';
$out = GetPermissionData::getUserData();
// Normalize by userid for stable asserts
usort($out, function ($a, $b) { return (int)$a['userid'] <=> (int)$b['userid']; });
$this->assertCount(2, $out);
$u1 = $out[0];
$this->assertSame(1, (int)$u1['userid']);
$this->assertSame('alice', $u1['username']);
$this->assertGreaterThanOrEqual(1, count($u1['roles']));
// Bob exists too
$u2 = $out[1];
$this->assertSame(2, (int)$u2['userid']);
$this->assertSame('bob', $u2['username']);
}
public function testGetLocationDataExpandsChildrenAndGlobal(): void
{
require_once __DIR__ . '/../../../modules-available/permissionmanager/inc/getpermissiondata.inc.php';
$out = GetPermissionData::getLocationData();
$ids = array_column($out, 'locationid');
$this->assertContains(0, $ids); // global
$this->assertContains(2, $ids); // Building A
$this->assertContains(4, $ids); // Room 101 (child)
$byId = [];
foreach ($out as $row) { $byId[$row['locationid']] = $row; }
$this->assertNotEmpty($byId[0]['roles']);
$this->assertSame('Admin', $byId[0]['roles'][0]['rolename']);
$this->assertSame('Tech', $byId[2]['roles'][0]['rolename']);
$this->assertSame('Tech', $byId[4]['roles'][0]['rolename']);
}
public function testGetRolesPassThroughAndSorting(): void
{
require_once __DIR__ . '/../../../modules-available/permissionmanager/inc/getpermissiondata.inc.php';
$out = GetPermissionData::getRoles(GetPermissionData::WITH_USER_COUNT | GetPermissionData::WITH_LOCATION_COUNT);
// Seed contains Admin and Tech, sorted alphabetically
$this->assertGreaterThanOrEqual(2, count($out));
$this->assertSame('Admin', $out[0]['rolename']);
$this->assertSame('Tech', $out[1]['rolename']);
}
}
|