/* eslint-disable @typescript-eslint/no-unused-vars */ import type { IAccessStore, IProjectRoleUsage, IRole, IRoleWithProject, IUserPermission, IUserRole, IUserWithProjectRoles, } from '../../lib/types/stores/access-store.js'; import type { IPermission } from '../../lib/types/model.js'; import { type IRoleStore, type IUserAccessOverview, RoleName, RoleType, } from '../../lib/types/index.js'; import FakeRoleStore from './fake-role-store.js'; import type { PermissionRef } from '../../lib/services/access-service.js'; export type FakeAccessStoreConfig = Partial<{ availablePermissions: IPermission[]; }>; export class FakeAccessStore implements IAccessStore { fakeRolesStore: IRoleStore; userToRoleMap: Map = new Map(); rolePermissions: Map = new Map(); availablePermissions: IPermission[] = []; constructor(roleStore?: IRoleStore, config?: FakeAccessStoreConfig) { this.fakeRolesStore = roleStore ?? new FakeRoleStore(); this.availablePermissions = config?.availablePermissions ?? []; } getProjectUserAndGroupCountsForRole( roleId: number, ): Promise { throw new Error('Method not implemented.'); } getAllProjectRolesForUser( userId: number, project: string, ): Promise { throw new Error('Method not implemented.'); } addAccessToProject( roles: number[], groups: number[], users: number[], projectId: string, createdBy: string, ): Promise { throw new Error('Method not implemented.'); } addGroupToRole( groupId: number, roleId: number, created_by: string, projectId?: string, ): Promise { throw new Error('Method not implemented.'); } updateUserProjectRole( userId: number, roleId: number, projectId: string, ): Promise { throw new Error('Method not implemented.'); } removeUserFromRole( userId: number, roleId: number, projectId: string, ): Promise { throw new Error('Method not implemented.'); } wipePermissionsFromRole(role_id: number): Promise { throw new Error('Method not implemented.'); } unlinkUserRoles(userId: number): Promise { throw new Error('Method not implemented.'); } getRoleByName(name: string): Promise { throw new Error('Method not implemented.'); } getProjectUsersForRole( roleId: number, projectId?: string, ): Promise { throw new Error('Method not implemented.'); } getProjectUsers(projectId?: string): Promise { throw new Error('Method not implemented.'); } getProjectRoles(): Promise { throw new Error('Method not implemented.'); } addEnvironmentPermissionsToRole( role_id: number, permissions: PermissionRef[], ): Promise { return Promise.resolve(undefined); } getAvailablePermissions(): Promise { return Promise.resolve(this.availablePermissions); } getPermissionsForUser(userId: Number): Promise { return Promise.resolve([]); } getPermissionsForRole(roleId: number): Promise { const found = this.rolePermissions.get(roleId) ?? []; return Promise.resolve(found); } getRoles(): Promise { return Promise.resolve([]); } getRoleWithId(id: number): Promise { throw new Error('Method not implemented.'); } getRolesForProject(projectId: string): Promise { throw new Error('Method not implemented.'); } removeRolesForProject(projectId: string): Promise { throw new Error('Method not implemented.'); } async getRolesForUserId(userId: number): Promise { const roleId = this.userToRoleMap.get(userId); const found = roleId === undefined ? undefined : await this.fakeRolesStore.get(roleId); if (found) { return Promise.resolve([found as IRoleWithProject]); } else { return Promise.resolve([]); } } getUserIdsForRole(roleId: number, projectId: string): Promise { throw new Error('Method not implemented.'); } getGroupIdsForRole(roleId: number, projectId?: string): Promise { throw new Error('Method not implemented.'); } addUserToRole(userId: number, roleId: number): Promise { this.userToRoleMap.set(userId, roleId); return Promise.resolve(undefined); } addPermissionsToRole( role_id: number, permissions: PermissionRef[], environment?: string, ): Promise { this.rolePermissions.set( role_id, (environment ? permissions.map((p) => ({ ...p, environment })) : permissions) as IPermission[], ); return Promise.resolve(undefined); } removePermissionFromRole( roleId: number, permission: string, projectId?: string, ): Promise { throw new Error('Method not implemented.'); } getRootRoleForAllUsers(): Promise { throw new Error('Method not implemented.'); } delete(key: number): Promise { return Promise.resolve(undefined); } deleteAll(): Promise { return Promise.resolve(undefined); } destroy(): void {} exists(key: number): Promise { return Promise.resolve(false); } get(key: number): Promise { throw new Error('Not implemented yet'); } getAll(): Promise { return Promise.resolve([]); } getRootRoles(): Promise { return Promise.resolve([]); } removeRolesOfTypeForUser( userId: number, roleTypes: string[], ): Promise { return Promise.resolve(undefined); } cloneEnvironmentPermissions( sourceEnvironment: string, destinationEnvironment: string, ): Promise { return Promise.resolve(undefined); } clearUserPersonalAccessTokens(userId: number): Promise { return Promise.resolve(undefined); } unlinkUserGroups(userId: number): Promise { return Promise.resolve(undefined); } clearPublicSignupUserTokens(userId: number): Promise { return Promise.resolve(undefined); } getProjectRolesForGroup( projectId: string, groupId: number, ): Promise { throw new Error('Method not implemented.'); } getProjectRolesForUser( projectId: string, userId: number, ): Promise { throw new Error('Method not implemented.'); } setProjectRolesForGroup( projectId: string, groupId: number, roles: number[], createdBy: string, ): Promise { throw new Error('Method not implemented.'); } setProjectRolesForUser( projectId: string, userId: number, roles: number[], ): Promise { throw new Error('Method not implemented.'); } removeUserAccess(projectId: string, userId: number): Promise { throw new Error('Method not implemented.'); } removeGroupAccess(projectId: string, groupId: number): Promise { throw new Error('Method not implemented.'); } getUserAccessOverview(): Promise { throw new Error('Method not implemented.'); } getRootRoleForUser(userId: number): Promise { const roleId = this.userToRoleMap.get(userId); if (roleId !== undefined) { return Promise.resolve(this.fakeRolesStore.get(roleId)); } else { return Promise.resolve({ id: -1, name: RoleName.VIEWER, type: RoleType.ROOT, }); } } } export default FakeAccessStore;