summaryrefslogtreecommitdiffstats
path: root/tests/Modules/PermissionManager/GetPermissionDataTest.php
blob: 98e4519cd9d6ff19eb5196dc328311b7e3c63fa7 (plain) (blame)
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']);
	}
}