1
0
mirror of https://github.com/misskey-dev/misskey.git synced 2026-07-29 05:54:38 +02:00

Tighten user entity test types

This commit is contained in:
mattyatea
2026-06-29 22:23:26 +09:00
parent a4a3606435
commit 2debf09bf2
13 changed files with 1620 additions and 16 deletions

View File

@@ -128,7 +128,7 @@ describe('ユーザー', () => {
preventAiLearning: user.preventAiLearning,
isExplorable: user.isExplorable,
isDeleted: user.isDeleted,
hiddenRoleIds: (user as any).hiddenRoleIds ?? [],
hiddenRoleIds: user.hiddenRoleIds ?? [],
twoFactorBackupCodesStock: user.twoFactorBackupCodesStock,
hideOnlineStatus: user.hideOnlineStatus,
hasUnreadSpecifiedNotes: user.hasUnreadSpecifiedNotes,
@@ -662,7 +662,7 @@ describe('ユーザー', () => {
isModerator: rolePublic.isModerator,
isAdministrator: rolePublic.isAdministrator,
asBadge: rolePublic.asBadge,
isPublicDisplayRequired: (rolePublic as any).isPublicDisplayRequired,
isPublicDisplayRequired: rolePublic.isPublicDisplayRequired,
displayOrder: rolePublic.displayOrder,
}]);
});
@@ -683,7 +683,7 @@ describe('ユーザー', () => {
isModerator: roleBadge.isModerator,
isAdministrator: roleBadge.isAdministrator,
asBadge: roleBadge.asBadge,
isPublicDisplayRequired: (roleBadge as any).isPublicDisplayRequired,
isPublicDisplayRequired: roleBadge.isPublicDisplayRequired,
displayOrder: roleBadge.displayOrder,
}]);
});
@@ -692,7 +692,7 @@ describe('ユーザー', () => {
const visibleRole = await role(root, { isPublic: true, name: 'Hideable Role' });
const secondVisibleRole = await role(root, { isPublic: true, name: 'Second Hideable Role' });
const privateRole = await role(root, { isPublic: false, name: 'Private Role' });
const forcedRole = await role(root, { isPublic: true, isPublicDisplayRequired: true, name: 'Forced Role' } as any);
const forcedRole = await role(root, { isPublic: true, isPublicDisplayRequired: true, name: 'Forced Role' });
const unassignedRole = await role(root, { isPublic: true, name: 'Unassigned Role' });
await api('admin/roles/assign', { userId: user.id, roleId: visibleRole.id }, root);
@@ -711,11 +711,11 @@ describe('ユーザー', () => {
forcedRole.id,
visibleRole.id,
],
} as any,
},
user,
});
assert.deepStrictEqual((response as any).hiddenRoleIds, [secondVisibleRole.id, visibleRole.id]);
assert.deepStrictEqual(response.hiddenRoleIds, [secondVisibleRole.id, visibleRole.id]);
});
test('をID指定のリスト形式で取得することができる', async () => {
const parameters = { userIds: [] };

View File

@@ -73,6 +73,10 @@ describe('UserEntityService', () => {
let rolesRepository: RolesRepository;
let roleAssignmentsRepository: RoleAssignmentsRepository;
let roleService: RoleService;
type RoleServiceCacheController = {
rolesCache: { delete(): void };
roleAssignmentByUserIdCache: { delete(userId: MiUser['id']): void };
};
async function createUser(userData: Partial<MiUser> = {}, profileData: Partial<MiUserProfile> = {}) {
const un = secureRndstr(16);
@@ -105,7 +109,7 @@ describe('UserEntityService', () => {
})
.then(x => rolesRepository.findOneByOrFail(x.identifiers[0]));
(roleService as any).rolesCache.delete();
(roleService as unknown as RoleServiceCacheController).rolesCache.delete();
return role;
}
@@ -116,7 +120,7 @@ describe('UserEntityService', () => {
roleId: role.id,
});
(roleService as any).roleAssignmentByUserIdCache.delete(user.id);
(roleService as unknown as RoleServiceCacheController).roleAssignmentByUserIdCache.delete(user.id);
}
async function memo(writer: MiUser, target: MiUser, memo: string) {
@@ -309,7 +313,7 @@ describe('UserEntityService', () => {
});
const updatedMe = await usersRepository.findOneByOrFail({ id: me.id });
const actual = await service.pack(updatedMe, updatedMe, { schema: 'MeDetailed' }) as any;
const actual = await service.pack(updatedMe, updatedMe, { schema: 'MeDetailed' });
expect(actual.hiddenRoleIds).toEqual([secondVisibleRole.id, visibleRole.id]);
});
@@ -328,14 +332,14 @@ describe('UserEntityService', () => {
await usersRepository.update(target.id, { hiddenRoleIds: [hiddenRole.id, forcedRole.id] });
const updatedTarget = await usersRepository.findOneByOrFail({ id: target.id });
const normalView = await service.pack(updatedTarget, viewer, { schema: 'UserDetailed' }) as any;
const moderatorView = await service.pack(updatedTarget, moderator, { schema: 'UserDetailed' }) as any;
const normalView = await service.pack(updatedTarget, viewer, { schema: 'UserDetailed' });
const moderatorView = await service.pack(updatedTarget, moderator, { schema: 'UserDetailed' });
expect(normalView.roles.map((role: any) => role.id)).toEqual([visibleRole.id, forcedRole.id]);
expect(normalView.badgeRoles.map((role: any) => role.id)).toEqual([visibleRole.id, forcedRole.id]);
expect(normalView.badgeRoles.every((role: any) => typeof role.id === 'string')).toBe(true);
expect(moderatorView.roles.map((role: any) => role.id)).toEqual([hiddenRole.id, visibleRole.id, forcedRole.id]);
expect(moderatorView.badgeRoles.map((role: any) => role.id)).toEqual([hiddenRole.id, visibleRole.id, forcedRole.id]);
expect(normalView.roles.map(role => role.id)).toEqual([visibleRole.id, forcedRole.id]);
expect(normalView.badgeRoles?.map(role => role.id)).toEqual([visibleRole.id, forcedRole.id]);
expect(normalView.badgeRoles?.every(role => typeof role.id === 'string')).toBe(true);
expect(moderatorView.roles.map(role => role.id)).toEqual([hiddenRole.id, visibleRole.id, forcedRole.id]);
expect(moderatorView.badgeRoles?.map(role => role.id)).toEqual([hiddenRole.id, visibleRole.id, forcedRole.id]);
});
test('alsoKnownAs as string does not throw', async () => {