summaryrefslogtreecommitdiff
path: root/packages
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2023-02-02 10:26:59 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2023-02-02 10:26:59 +0900
commit1f39d1fe26e9c69165f4783fddd5e7b91040ede2 (patch)
treeca3b37c3ec02d454d4d1c0108f81ea9e23731bca /packages
parentUpdate pnpm-lock.yaml (diff)
downloadmisskey-1f39d1fe26e9c69165f4783fddd5e7b91040ede2.tar.gz
misskey-1f39d1fe26e9c69165f4783fddd5e7b91040ede2.tar.bz2
misskey-1f39d1fe26e9c69165f4783fddd5e7b91040ede2.zip
test: add test of RoleService
Diffstat (limited to 'packages')
-rw-r--r--packages/backend/test/unit/RoleService.ts145
1 files changed, 145 insertions, 0 deletions
diff --git a/packages/backend/test/unit/RoleService.ts b/packages/backend/test/unit/RoleService.ts
new file mode 100644
index 0000000000..c6410393fb
--- /dev/null
+++ b/packages/backend/test/unit/RoleService.ts
@@ -0,0 +1,145 @@
+process.env.NODE_ENV = 'test';
+
+import { jest } from '@jest/globals';
+import { ModuleMocker } from 'jest-mock';
+import { Test } from '@nestjs/testing';
+import { DataSource } from 'typeorm';
+import { GlobalModule } from '@/GlobalModule.js';
+import { RoleService } from '@/core/RoleService.js';
+import type { Role, RolesRepository, RoleAssignmentsRepository, UsersRepository } from '@/models/index.js';
+import { DI } from '@/di-symbols.js';
+import { CoreModule } from '@/core/CoreModule.js';
+import { MetaService } from '@/core/MetaService.js';
+import type { TestingModule } from '@nestjs/testing';
+import type { MockFunctionMetadata } from 'jest-mock';
+
+const moduleMocker = new ModuleMocker(global);
+
+describe('RoleService', () => {
+ let app: TestingModule;
+ let roleService: RoleService;
+ let usersRepository: UsersRepository;
+ let rolesRepository: RolesRepository;
+ let roleAssignmentsRepository: RoleAssignmentsRepository;
+ let metaService: jest.Mocked<MetaService>;
+
+ function createUser() {
+ return usersRepository.insert({
+ id: 'a',
+ createdAt: new Date(),
+ username: 'a',
+ usernameLower: 'a',
+ })
+ .then(x => usersRepository.findOneByOrFail(x.identifiers[0]));
+ }
+
+ function createRole(data: Partial<Role>) {
+ return rolesRepository.insert({
+ id: 'a',
+ createdAt: new Date(),
+ updatedAt: new Date(),
+ lastUsedAt: new Date(),
+ description: '',
+ ...data,
+ })
+ .then(x => rolesRepository.findOneByOrFail(x.identifiers[0]));
+ }
+
+ beforeEach(async () => {
+ app = await Test.createTestingModule({
+ imports: [
+ GlobalModule,
+ ],
+ providers: [
+ RoleService,
+ ],
+ })
+ .useMocker((token) => {
+ if (token === MetaService) {
+ return { fetch: jest.fn() };
+ }
+ if (typeof token === 'function') {
+ const mockMetadata = moduleMocker.getMetadata(token) as MockFunctionMetadata<any, any>;
+ const Mock = moduleMocker.generateFromMetadata(mockMetadata);
+ return new Mock();
+ }
+ })
+ .compile();
+
+ app.enableShutdownHooks();
+
+ roleService = app.get<RoleService>(RoleService);
+ usersRepository = app.get<UsersRepository>(DI.usersRepository);
+ rolesRepository = app.get<RolesRepository>(DI.rolesRepository);
+ roleAssignmentsRepository = app.get<RoleAssignmentsRepository>(DI.roleAssignmentsRepository);
+
+ metaService = app.get<MetaService>(MetaService) as jest.Mocked<MetaService>;
+ });
+
+ afterEach(async () => {
+ await Promise.all([
+ app.get(DI.metasRepository).delete({}),
+ usersRepository.delete({}),
+ rolesRepository.delete({}),
+ roleAssignmentsRepository.delete({}),
+ ]);
+ await app.close();
+ });
+
+ describe('getUserPolicies', () => {
+ it('instance default policies', async () => {
+ const user = await createUser();
+ metaService.fetch.mockResolvedValue({
+ policies: {
+ canManageCustomEmojis: false,
+ },
+ });
+
+ const result = await roleService.getUserPolicies(user.id);
+
+ expect(result.canManageCustomEmojis).toBe(false);
+ });
+
+ it('instance default policies 2', async () => {
+ const user = await createUser();
+ metaService.fetch.mockResolvedValue({
+ policies: {
+ canManageCustomEmojis: true,
+ },
+ });
+
+ const result = await roleService.getUserPolicies(user.id);
+
+ expect(result.canManageCustomEmojis).toBe(true);
+ });
+
+ it('with role', async () => {
+ const user = await createUser();
+ const role = await createRole({
+ name: 'a',
+ policies: {
+ canManageCustomEmojis: {
+ useDefault: false,
+ priority: 0,
+ value: true,
+ },
+ },
+ });
+ await roleAssignmentsRepository.insert({
+ id: 'a',
+ createdAt: new Date(),
+ roleId: role.id,
+ userId: user.id,
+ });
+ metaService.fetch.mockResolvedValue({
+ policies: {
+ canManageCustomEmojis: false,
+ },
+ });
+
+ const result = await roleService.getUserPolicies(user.id);
+
+ expect(result.canManageCustomEmojis).toBe(true);
+ });
+ });
+});