diff options
| author | Simon Rettberg | 2025-11-26 10:46:51 +0100 |
|---|---|---|
| committer | Simon Rettberg | 2025-12-12 15:16:59 +0100 |
| commit | 7c173411785f959d250d3dfbd7d4cfcb0e20f0e0 (patch) | |
| tree | 242157791a76afb7af23ec2cd3d22b599e54ce9d /tests/Modules/PermissionManager/GetPermissionDataTest.php | |
| parent | [exams] Fix incorrect count() clause (diff) | |
| download | slx-admin-7c173411785f959d250d3dfbd7d4cfcb0e20f0e0.tar.gz slx-admin-7c173411785f959d250d3dfbd7d4cfcb0e20f0e0.tar.xz slx-admin-7c173411785f959d250d3dfbd7d4cfcb0e20f0e0.zip | |
Add tests using PHPUnit
Tests generated by Junie AI. Might not have the best possible quality
but at least we got something, and if it turns out to be complete
rubbish, we can just throw it out again without any issues, as this is
independent of the actual code base.
Diffstat (limited to 'tests/Modules/PermissionManager/GetPermissionDataTest.php')
| -rw-r--r-- | tests/Modules/PermissionManager/GetPermissionDataTest.php | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/tests/Modules/PermissionManager/GetPermissionDataTest.php b/tests/Modules/PermissionManager/GetPermissionDataTest.php new file mode 100644 index 00000000..98e4519c --- /dev/null +++ b/tests/Modules/PermissionManager/GetPermissionDataTest.php @@ -0,0 +1,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']); + } +} |
