roleModel = $roleModel; $this->permissionModel = $permissionModel; $this->rolePermissionModel = $rolePermissionModel; $this->userModel = $userModel; } private ?int $currentUserId = 1; public function setCurrentUserId(int $id): void { $this->currentUserId = $id; } protected function getCurrentUserId(): ?int { return $this->currentUserId; } } class RolePermissionControllerTest extends CIUnitTestCase { private $controller; private $roleModel; private $permissionModel; private $rolePermissionModel; private $userModel; protected function setUp(): void { parent::setUp(); $this->roleModel = $this->createMock(RoleModel::class); $this->permissionModel = $this->createMock(PermissionModel::class); $this->rolePermissionModel = $this->createMock(RolePermissionModel::class); $this->userModel = $this->createMock(UserModel::class); $this->controller = new TestableRolePermissionController(); $this->controller->setModels($this->roleModel, $this->permissionModel, $this->rolePermissionModel, $this->userModel); } public function testRolesListReturnsData() { $this->roleModel->method('findAll')->willReturn([ ['id' => 1, 'name' => 'admin'], ]); $response = $this->controller->roles(); $this->assertTrue($response['status']); $this->assertNotEmpty($response['data']); } public function testPermissionsListReturnsData() { $this->permissionModel->method('findAll')->willReturn([ ['id' => 11, 'name' => 'view_reports'], ]); $response = $this->controller->permissions(); $this->assertTrue($response['status']); $this->assertNotEmpty($response['data']); } public function testRolePermissionsReturnsDataForRole() { $this->rolePermissionModel->method('where')->with('role_id', 2)->willReturnSelf(); $this->rolePermissionModel->method('findAll')->willReturn([ ['permission_id' => 5], ]); $response = $this->controller->rolePermissions(2); $this->assertTrue($response['status']); $this->assertEquals('Role permissions retrieved successfully', $response['message']); } public function testUsersListReturnsSummaries() { $this->userModel->method('select')->willReturnSelf(); $this->userModel->method('findAll')->willReturn([ ['id' => 3, 'firstname' => 'Ali', 'lastname' => 'Khan'], ]); $response = $this->controller->users(); $this->assertTrue($response['status']); $this->assertCount(1, $response['data']); } public function testAssignRoleSuccess() { $dbMock = $this->createMock(\CodeIgniter\Database\BaseConnection::class); $dbMock->method('transStart')->willReturn(null); $dbMock->method('transComplete')->willReturn(null); $dbMock->method('transStatus')->willReturn(true); if (!class_exists('Config\\FakeDatabase')) { eval('namespace Config; class FakeDatabase extends \\Config\\Database { public static function connect($group = null, bool $getShared = true) { return $GLOBALS["__fakeDb__"]; } }'); } $GLOBALS['__fakeDb__'] = $dbMock; class_alias('Config\\FakeDatabase', 'Config\\Database'); $this->userRoleModel->method('where')->with('user_id', 7)->willReturnSelf(); $this->userRoleModel->method('delete')->willReturn(true); $this->userRoleModel->method('insert')->willReturn(true); $this->controller->setCurrentUserId(12); $req = $this->makeRequest('POST', '/api/v1/users/7/roles', ['role_ids' => [1, 2]]); $this->controller->setRequest($req); $response = $this->controller->assignRole(7); $this->assertTrue($response['status']); $this->assertEquals('Roles assigned successfully', $response['message']); } }