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/PermissionDbUpdateTest.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/PermissionDbUpdateTest.php')
| -rw-r--r-- | tests/Modules/PermissionManager/PermissionDbUpdateTest.php | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/tests/Modules/PermissionManager/PermissionDbUpdateTest.php b/tests/Modules/PermissionManager/PermissionDbUpdateTest.php new file mode 100644 index 00000000..7eff16ad --- /dev/null +++ b/tests/Modules/PermissionManager/PermissionDbUpdateTest.php @@ -0,0 +1,90 @@ +<?php + +use PHPUnit\Framework\TestCase; + +/** + * Migrated to SQLite-backed Database. We verify actual DB state instead of stub call logs. + * + */ +class PermissionDbUpdateTest extends TestCase +{ + protected function setUp(): void + { + Database::resetSchema(); + } + + private function loadInc(): void + { + require_once __DIR__ . '/../../../modules-available/permissionmanager/inc/permissiondbupdate.inc.php'; + } + + public function testAddAndRemoveRoleFromUser(): void + { + $this->loadInc(); + // Ensure target roles exist + Database::exec('INSERT INTO role (roleid, rolename) VALUES (:id, :n)', ['id' => 10, 'n' => 'R10']); + Database::exec('INSERT INTO role (roleid, rolename) VALUES (:id, :n)', ['id' => 11, 'n' => 'R11']); + // add + PermissionDbUpdate::addRoleToUser([1,2], [10]); + $rows = Database::queryAll('SELECT * FROM role_x_user WHERE roleid = :r ORDER BY userid, roleid', ['r' => 10]); + $this->assertSame([[ 'userid' => 1, 'roleid' => 10 ], [ 'userid' => 2, 'roleid' => 10 ]], $rows); + + // remove + PermissionDbUpdate::removeRoleFromUser([1,2], [10,11]); + $rows2 = Database::queryAll('SELECT * FROM role_x_user WHERE roleid IN (:r)', ['r' => [10,11]]); + $this->assertCount(0, $rows2); + } + + public function testSetRolesForUserDeletesThenAdds(): void + { + $this->loadInc(); + Database::exec('INSERT INTO role (roleid, rolename) VALUES (:id, :n)', ['id' => 10, 'n' => 'R10']); + Database::exec('INSERT INTO role (roleid, rolename) VALUES (:id, :n)', ['id' => 11, 'n' => 'R11']); + // Prepopulate with an extra role to be removed + Database::exec('INSERT INTO role_x_user (userid, roleid) VALUES (5, 12)'); + PermissionDbUpdate::setRolesForUser([5], [10, 11]); + $rows = Database::queryAll('SELECT roleid FROM role_x_user WHERE userid = 5 ORDER BY roleid'); + $this->assertSame([[ 'roleid' => 10 ], [ 'roleid' => 11 ]], $rows); + } + + public function testSaveRoleUpdateAndInsertPaths(): void + { + $this->loadInc(); + // Create existing role 42 with some mappings + Database::exec('INSERT INTO role (roleid, rolename, roledescription) VALUES (:id, :n, :d)', ['id' => 42, 'n' => 'Old', 'd' => 'old']); + Database::exec('INSERT INTO role_x_location (roleid, locationid) VALUES (:r, :l)', ['r' => 42, 'l' => 1]); + Database::exec('INSERT INTO role_x_permission (roleid, permissionid) VALUES (:r, :p)', ['r' => 42, 'p' => 'permissionmanager.users.view']); + // Update existing role + PermissionDbUpdate::saveRole('Editors', 'desc', [0, 5], ['permissionmanager.roles.edit'], 42); + $row = Database::queryFirst('SELECT rolename, roledescription FROM role WHERE roleid = 42'); + $this->assertSame('Editors', $row['rolename']); + $this->assertSame('desc', $row['roledescription']); + $locs = Database::queryAll('SELECT locationid FROM role_x_location WHERE roleid = 42 ORDER BY locationid'); + $this->assertSame([[ 'locationid' => 0 ], [ 'locationid' => 5 ]], $locs); + $perms = Database::queryAll('SELECT permissionid FROM role_x_permission WHERE roleid = 42'); + $this->assertSame([[ 'permissionid' => 'permissionmanager.roles.edit' ]], $perms); + + // Insert new role with mappings + $this->loadInc(); + PermissionDbUpdate::saveRole('New Role', 'desc2', [1], ['permissionmanager.users.view']); + // Fetch the last inserted role + $role = Database::queryFirst('SELECT roleid, rolename, roledescription FROM role WHERE rolename = :n', ['n' => 'New Role']); + $this->assertNotFalse($role); + $rid = (int)$role['roleid']; + $this->assertGreaterThan(0, $rid); + $this->assertSame('desc2', $role['roledescription']); + $locs2 = Database::queryAll('SELECT locationid FROM role_x_location WHERE roleid = :r', ['r' => $rid]); + $this->assertSame([[ 'locationid' => 1 ]], $locs2); + $perms2 = Database::queryAll('SELECT permissionid FROM role_x_permission WHERE roleid = :r', ['r' => $rid]); + $this->assertSame([[ 'permissionid' => 'permissionmanager.users.view' ]], $perms2); + } + + public function testDeleteRole(): void + { + $this->loadInc(); + Database::exec('INSERT INTO role (roleid, rolename) VALUES (:id, :n)', ['id' => 77, 'n' => 'Tmp']); + PermissionDbUpdate::deleteRole(77); + $row = Database::queryFirst('SELECT * FROM role WHERE roleid = 77'); + $this->assertFalse($row); + } +} |
