From ea3674d04dd0a67962224073256dc7d4173527a5 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Wed, 18 Nov 2020 11:13:01 +0100 Subject: Remove notifications of muted accounts/servers --- .../tests/api/moderation/blocklist-notification.ts | 258 +++++++++++++++++++++ server/tests/api/moderation/index.ts | 1 + 2 files changed, 259 insertions(+) create mode 100644 server/tests/api/moderation/blocklist-notification.ts (limited to 'server/tests') diff --git a/server/tests/api/moderation/blocklist-notification.ts b/server/tests/api/moderation/blocklist-notification.ts new file mode 100644 index 000000000..4fb3c95f2 --- /dev/null +++ b/server/tests/api/moderation/blocklist-notification.ts @@ -0,0 +1,258 @@ +/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */ + +import 'mocha' +import * as chai from 'chai' +import { getUserNotifications, markAsReadAllNotifications } from '@shared/extra-utils/users/user-notifications' +import { addUserSubscription, removeUserSubscription } from '@shared/extra-utils/users/user-subscriptions' +import { UserNotification, UserNotificationType } from '@shared/models' +import { + cleanupTests, + createUser, + doubleFollow, + flushAndRunMultipleServers, + ServerInfo, + uploadVideo, + userLogin +} from '../../../../shared/extra-utils/index' +import { waitJobs } from '../../../../shared/extra-utils/server/jobs' +import { + addAccountToAccountBlocklist, + addAccountToServerBlocklist, + addServerToAccountBlocklist, + addServerToServerBlocklist, + removeAccountFromAccountBlocklist, + removeAccountFromServerBlocklist, + removeServerFromAccountBlocklist +} from '../../../../shared/extra-utils/users/blocklist' +import { setAccessTokensToServers } from '../../../../shared/extra-utils/users/login' +import { addVideoCommentThread } from '../../../../shared/extra-utils/videos/video-comments' + +const expect = chai.expect + +async function checkNotifications (url: string, token: string, expected: UserNotificationType[]) { + const res = await getUserNotifications(url, token, 0, 10, true) + + const notifications: UserNotification[] = res.body.data + + expect(notifications).to.have.lengthOf(expected.length) + + for (const type of expected) { + expect(notifications.find(n => n.type === type)).to.exist + } +} + +describe('Test blocklist', function () { + let servers: ServerInfo[] + let videoUUID: string + + let userToken1: string + let userToken2: string + let remoteUserToken: string + + async function resetState () { + try { + await removeUserSubscription(servers[1].url, remoteUserToken, 'user1_channel@' + servers[0].host) + await removeUserSubscription(servers[1].url, remoteUserToken, 'user2_channel@' + servers[0].host) + } catch {} + + await waitJobs(servers) + + await markAsReadAllNotifications(servers[0].url, userToken1) + await markAsReadAllNotifications(servers[0].url, userToken2) + + { + const res = await uploadVideo(servers[0].url, userToken1, { name: 'video' }) + videoUUID = res.body.video.uuid + + await waitJobs(servers) + } + + { + await addVideoCommentThread(servers[1].url, remoteUserToken, videoUUID, '@user2@' + servers[0].host + ' hello') + } + + { + + await addUserSubscription(servers[1].url, remoteUserToken, 'user1_channel@' + servers[0].host) + await addUserSubscription(servers[1].url, remoteUserToken, 'user2_channel@' + servers[0].host) + } + + await waitJobs(servers) + } + + before(async function () { + this.timeout(60000) + + servers = await flushAndRunMultipleServers(2) + await setAccessTokensToServers(servers) + + { + const user = { username: 'user1', password: 'password' } + await createUser({ + url: servers[0].url, + accessToken: servers[0].accessToken, + username: user.username, + password: user.password, + videoQuota: -1, + videoQuotaDaily: -1 + }) + + userToken1 = await userLogin(servers[0], user) + await uploadVideo(servers[0].url, userToken1, { name: 'video user 1' }) + } + + { + const user = { username: 'user2', password: 'password' } + await createUser({ url: servers[0].url, accessToken: servers[0].accessToken, username: user.username, password: user.password }) + + userToken2 = await userLogin(servers[0], user) + } + + { + const user = { username: 'user3', password: 'password' } + await createUser({ url: servers[1].url, accessToken: servers[1].accessToken, username: user.username, password: user.password }) + + remoteUserToken = await userLogin(servers[1], user) + } + + await doubleFollow(servers[0], servers[1]) + }) + + describe('User blocks another user', function () { + + before(async function () { + this.timeout(30000) + + await resetState() + }) + + it('Should have appropriate notifications', async function () { + const notifs = [ UserNotificationType.NEW_COMMENT_ON_MY_VIDEO, UserNotificationType.NEW_FOLLOW ] + await checkNotifications(servers[0].url, userToken1, notifs) + }) + + it('Should block an account', async function () { + this.timeout(10000) + + await addAccountToAccountBlocklist(servers[0].url, userToken1, 'user3@' + servers[1].host) + await waitJobs(servers) + }) + + it('Should not have notifications from this account', async function () { + await checkNotifications(servers[0].url, userToken1, []) + }) + + it('Should have notifications of this account on user 2', async function () { + const notifs = [ UserNotificationType.COMMENT_MENTION, UserNotificationType.NEW_FOLLOW ] + + await checkNotifications(servers[0].url, userToken2, notifs) + + await removeAccountFromAccountBlocklist(servers[0].url, userToken1, 'user3@' + servers[1].host) + }) + }) + + describe('User blocks another server', function () { + + before(async function () { + this.timeout(30000) + + await resetState() + }) + + it('Should have appropriate notifications', async function () { + const notifs = [ UserNotificationType.NEW_COMMENT_ON_MY_VIDEO, UserNotificationType.NEW_FOLLOW ] + await checkNotifications(servers[0].url, userToken1, notifs) + }) + + it('Should block an account', async function () { + this.timeout(10000) + + await addServerToAccountBlocklist(servers[0].url, userToken1, servers[1].host) + await waitJobs(servers) + }) + + it('Should not have notifications from this account', async function () { + await checkNotifications(servers[0].url, userToken1, []) + }) + + it('Should have notifications of this account on user 2', async function () { + const notifs = [ UserNotificationType.COMMENT_MENTION, UserNotificationType.NEW_FOLLOW ] + + await checkNotifications(servers[0].url, userToken2, notifs) + + await removeServerFromAccountBlocklist(servers[0].url, userToken1, servers[1].host) + }) + }) + + describe('Server blocks a user', function () { + + before(async function () { + this.timeout(30000) + + await resetState() + }) + + it('Should have appropriate notifications', async function () { + { + const notifs = [ UserNotificationType.NEW_COMMENT_ON_MY_VIDEO, UserNotificationType.NEW_FOLLOW ] + await checkNotifications(servers[0].url, userToken1, notifs) + } + + { + const notifs = [ UserNotificationType.COMMENT_MENTION, UserNotificationType.NEW_FOLLOW ] + await checkNotifications(servers[0].url, userToken2, notifs) + } + }) + + it('Should block an account', async function () { + this.timeout(10000) + + await addAccountToServerBlocklist(servers[0].url, servers[0].accessToken, 'user3@' + servers[1].host) + await waitJobs(servers) + }) + + it('Should not have notifications from this account', async function () { + await checkNotifications(servers[0].url, userToken1, []) + await checkNotifications(servers[0].url, userToken2, []) + + await removeAccountFromServerBlocklist(servers[0].url, servers[0].accessToken, 'user3@' + servers[1].host) + }) + }) + + describe('Server blocks a server', function () { + + before(async function () { + this.timeout(30000) + + await resetState() + }) + + it('Should have appropriate notifications', async function () { + { + const notifs = [ UserNotificationType.NEW_COMMENT_ON_MY_VIDEO, UserNotificationType.NEW_FOLLOW ] + await checkNotifications(servers[0].url, userToken1, notifs) + } + + { + const notifs = [ UserNotificationType.COMMENT_MENTION, UserNotificationType.NEW_FOLLOW ] + await checkNotifications(servers[0].url, userToken2, notifs) + } + }) + + it('Should block an account', async function () { + this.timeout(10000) + + await addServerToServerBlocklist(servers[0].url, servers[0].accessToken, servers[1].host) + await waitJobs(servers) + }) + + it('Should not have notifications from this account', async function () { + await checkNotifications(servers[0].url, userToken1, []) + await checkNotifications(servers[0].url, userToken2, []) + }) + }) + + after(async function () { + await cleanupTests(servers) + }) +}) diff --git a/server/tests/api/moderation/index.ts b/server/tests/api/moderation/index.ts index 6593c001f..874be03d5 100644 --- a/server/tests/api/moderation/index.ts +++ b/server/tests/api/moderation/index.ts @@ -1,3 +1,4 @@ export * from './abuses' +export * from './blocklist-notification' export * from './blocklist' export * from './video-blacklist' -- cgit v1.2.3