summaryrefslogtreecommitdiff
path: root/packages/backend/test/unit/RoleService.ts
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2023-12-21 10:39:11 +0900
committerGitHub <noreply@github.com>2023-12-21 10:39:11 +0900
commit15b0d2aff2011935f212db19feab3bec97979ae1 (patch)
treee3a386517aefbaad295f2bed66d74e70cf7c966f /packages/backend/test/unit/RoleService.ts
parentchore(workflows): use postgres 15 everywhere (#12726) (diff)
downloadsharkey-15b0d2aff2011935f212db19feab3bec97979ae1.tar.gz
sharkey-15b0d2aff2011935f212db19feab3bec97979ae1.tar.bz2
sharkey-15b0d2aff2011935f212db19feab3bec97979ae1.zip
enhance: ロールにアサインされたときの通知 (#12607)
* wip * Update misskey-js.api.md * Update CHANGELOG.md * Update RoleService.ts * Update locales/ja-JP.yml Co-authored-by: かっこかり <67428053+kakkokari-gtyih@users.noreply.github.com> * Update UserListService.ts * Update misskey-js.api.md * fix (#12724) --------- Co-authored-by: かっこかり <67428053+kakkokari-gtyih@users.noreply.github.com> Co-authored-by: おさむのひと <46447427+samunohito@users.noreply.github.com>
Diffstat (limited to 'packages/backend/test/unit/RoleService.ts')
-rw-r--r--packages/backend/test/unit/RoleService.ts54
1 files changed, 54 insertions, 0 deletions
diff --git a/packages/backend/test/unit/RoleService.ts b/packages/backend/test/unit/RoleService.ts
index f644312bc9..99c6912116 100644
--- a/packages/backend/test/unit/RoleService.ts
+++ b/packages/backend/test/unit/RoleService.ts
@@ -19,6 +19,7 @@ import { CacheService } from '@/core/CacheService.js';
import { IdService } from '@/core/IdService.js';
import { GlobalEventService } from '@/core/GlobalEventService.js';
import { secureRndstr } from '@/misc/secure-rndstr.js';
+import { NotificationService } from '@/core/NotificationService.js';
import { sleep } from '../utils.js';
import type { TestingModule } from '@nestjs/testing';
import type { MockFunctionMetadata } from 'jest-mock';
@@ -32,6 +33,7 @@ describe('RoleService', () => {
let rolesRepository: RolesRepository;
let roleAssignmentsRepository: RoleAssignmentsRepository;
let metaService: jest.Mocked<MetaService>;
+ let notificationService: jest.Mocked<NotificationService>;
let clock: lolex.InstalledClock;
function createUser(data: Partial<MiUser> = {}) {
@@ -76,6 +78,8 @@ describe('RoleService', () => {
.useMocker((token) => {
if (token === MetaService) {
return { fetch: jest.fn() };
+ } else if (token === NotificationService) {
+ return { createNotification: jest.fn() };
}
if (typeof token === 'function') {
const mockMetadata = moduleMocker.getMetadata(token) as MockFunctionMetadata<any, any>;
@@ -93,6 +97,7 @@ describe('RoleService', () => {
roleAssignmentsRepository = app.get<RoleAssignmentsRepository>(DI.roleAssignmentsRepository);
metaService = app.get<MetaService>(MetaService) as jest.Mocked<MetaService>;
+ notificationService = app.get<NotificationService>(NotificationService) as jest.Mocked<NotificationService>;
});
afterEach(async () => {
@@ -273,4 +278,53 @@ describe('RoleService', () => {
expect(resultAfter25hAgain.canManageCustomEmojis).toBe(true);
});
});
+
+ describe('assign', () => {
+ test('公開ロールの場合は通知される', async () => {
+ const user = await createUser();
+ const role = await createRole({
+ isPublic: true,
+ });
+
+ await roleService.assign(user.id, role.id);
+
+ await sleep(100);
+
+ const assignments = await roleAssignmentsRepository.find({
+ where: {
+ userId: user.id,
+ roleId: role.id,
+ },
+ });
+ expect(assignments).toHaveLength(1);
+
+ expect(notificationService.createNotification).toHaveBeenCalled();
+ expect(notificationService.createNotification.mock.lastCall![0]).toBe(user.id);
+ expect(notificationService.createNotification.mock.lastCall![1]).toBe('roleAssigned');
+ expect(notificationService.createNotification.mock.lastCall![2]).toBe({
+ roleId: role.id,
+ });
+ });
+
+ test('非公開ロールの場合は通知されない', async () => {
+ const user = await createUser();
+ const role = await createRole({
+ isPublic: false,
+ });
+
+ await roleService.assign(user.id, role.id);
+
+ await sleep(100);
+
+ const assignments = await roleAssignmentsRepository.find({
+ where: {
+ userId: user.id,
+ roleId: role.id,
+ },
+ });
+ expect(assignments).toHaveLength(1);
+
+ expect(notificationService.createNotification).not.toHaveBeenCalled();
+ });
+ });
});