]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - server/tests/api/moderation/blocklist-notification.ts
Merge branch 'release/3.2.0' into develop
[github/Chocobozzz/PeerTube.git] / server / tests / api / moderation / blocklist-notification.ts
1 /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
2
3 import 'mocha'
4 import * as chai from 'chai'
5 import { getUserNotifications, markAsReadAllNotifications } from '@shared/extra-utils/users/user-notifications'
6 import { addUserSubscription, removeUserSubscription } from '@shared/extra-utils/users/user-subscriptions'
7 import { UserNotification, UserNotificationType } from '@shared/models'
8 import {
9 cleanupTests,
10 createUser,
11 doubleFollow,
12 flushAndRunMultipleServers,
13 ServerInfo,
14 uploadVideo,
15 userLogin
16 } from '../../../../shared/extra-utils/index'
17 import { waitJobs } from '../../../../shared/extra-utils/server/jobs'
18 import {
19 addAccountToAccountBlocklist,
20 addAccountToServerBlocklist,
21 addServerToAccountBlocklist,
22 addServerToServerBlocklist,
23 removeAccountFromAccountBlocklist,
24 removeAccountFromServerBlocklist,
25 removeServerFromAccountBlocklist
26 } from '../../../../shared/extra-utils/users/blocklist'
27 import { setAccessTokensToServers } from '../../../../shared/extra-utils/users/login'
28 import { addVideoCommentThread } from '../../../../shared/extra-utils/videos/video-comments'
29
30 const expect = chai.expect
31
32 async function checkNotifications (url: string, token: string, expected: UserNotificationType[]) {
33 const res = await getUserNotifications(url, token, 0, 10, true)
34
35 const notifications: UserNotification[] = res.body.data
36
37 expect(notifications).to.have.lengthOf(expected.length)
38
39 for (const type of expected) {
40 expect(notifications.find(n => n.type === type)).to.exist
41 }
42 }
43
44 describe('Test blocklist', function () {
45 let servers: ServerInfo[]
46 let videoUUID: string
47
48 let userToken1: string
49 let userToken2: string
50 let remoteUserToken: string
51
52 async function resetState () {
53 try {
54 await removeUserSubscription(servers[1].url, remoteUserToken, 'user1_channel@' + servers[0].host)
55 await removeUserSubscription(servers[1].url, remoteUserToken, 'user2_channel@' + servers[0].host)
56 } catch {}
57
58 await waitJobs(servers)
59
60 await markAsReadAllNotifications(servers[0].url, userToken1)
61 await markAsReadAllNotifications(servers[0].url, userToken2)
62
63 {
64 const res = await uploadVideo(servers[0].url, userToken1, { name: 'video' })
65 videoUUID = res.body.video.uuid
66
67 await waitJobs(servers)
68 }
69
70 {
71 await addVideoCommentThread(servers[1].url, remoteUserToken, videoUUID, '@user2@' + servers[0].host + ' hello')
72 }
73
74 {
75
76 await addUserSubscription(servers[1].url, remoteUserToken, 'user1_channel@' + servers[0].host)
77 await addUserSubscription(servers[1].url, remoteUserToken, 'user2_channel@' + servers[0].host)
78 }
79
80 await waitJobs(servers)
81 }
82
83 before(async function () {
84 this.timeout(60000)
85
86 servers = await flushAndRunMultipleServers(2)
87 await setAccessTokensToServers(servers)
88
89 {
90 const user = { username: 'user1', password: 'password' }
91 await createUser({
92 url: servers[0].url,
93 accessToken: servers[0].accessToken,
94 username: user.username,
95 password: user.password,
96 videoQuota: -1,
97 videoQuotaDaily: -1
98 })
99
100 userToken1 = await userLogin(servers[0], user)
101 await uploadVideo(servers[0].url, userToken1, { name: 'video user 1' })
102 }
103
104 {
105 const user = { username: 'user2', password: 'password' }
106 await createUser({ url: servers[0].url, accessToken: servers[0].accessToken, username: user.username, password: user.password })
107
108 userToken2 = await userLogin(servers[0], user)
109 }
110
111 {
112 const user = { username: 'user3', password: 'password' }
113 await createUser({ url: servers[1].url, accessToken: servers[1].accessToken, username: user.username, password: user.password })
114
115 remoteUserToken = await userLogin(servers[1], user)
116 }
117
118 await doubleFollow(servers[0], servers[1])
119 })
120
121 describe('User blocks another user', function () {
122
123 before(async function () {
124 this.timeout(30000)
125
126 await resetState()
127 })
128
129 it('Should have appropriate notifications', async function () {
130 const notifs = [ UserNotificationType.NEW_COMMENT_ON_MY_VIDEO, UserNotificationType.NEW_FOLLOW ]
131 await checkNotifications(servers[0].url, userToken1, notifs)
132 })
133
134 it('Should block an account', async function () {
135 this.timeout(10000)
136
137 await addAccountToAccountBlocklist(servers[0].url, userToken1, 'user3@' + servers[1].host)
138 await waitJobs(servers)
139 })
140
141 it('Should not have notifications from this account', async function () {
142 await checkNotifications(servers[0].url, userToken1, [])
143 })
144
145 it('Should have notifications of this account on user 2', async function () {
146 const notifs = [ UserNotificationType.COMMENT_MENTION, UserNotificationType.NEW_FOLLOW ]
147
148 await checkNotifications(servers[0].url, userToken2, notifs)
149
150 await removeAccountFromAccountBlocklist(servers[0].url, userToken1, 'user3@' + servers[1].host)
151 })
152 })
153
154 describe('User blocks another server', function () {
155
156 before(async function () {
157 this.timeout(30000)
158
159 await resetState()
160 })
161
162 it('Should have appropriate notifications', async function () {
163 const notifs = [ UserNotificationType.NEW_COMMENT_ON_MY_VIDEO, UserNotificationType.NEW_FOLLOW ]
164 await checkNotifications(servers[0].url, userToken1, notifs)
165 })
166
167 it('Should block an account', async function () {
168 this.timeout(10000)
169
170 await addServerToAccountBlocklist(servers[0].url, userToken1, servers[1].host)
171 await waitJobs(servers)
172 })
173
174 it('Should not have notifications from this account', async function () {
175 await checkNotifications(servers[0].url, userToken1, [])
176 })
177
178 it('Should have notifications of this account on user 2', async function () {
179 const notifs = [ UserNotificationType.COMMENT_MENTION, UserNotificationType.NEW_FOLLOW ]
180
181 await checkNotifications(servers[0].url, userToken2, notifs)
182
183 await removeServerFromAccountBlocklist(servers[0].url, userToken1, servers[1].host)
184 })
185 })
186
187 describe('Server blocks a user', function () {
188
189 before(async function () {
190 this.timeout(30000)
191
192 await resetState()
193 })
194
195 it('Should have appropriate notifications', async function () {
196 {
197 const notifs = [ UserNotificationType.NEW_COMMENT_ON_MY_VIDEO, UserNotificationType.NEW_FOLLOW ]
198 await checkNotifications(servers[0].url, userToken1, notifs)
199 }
200
201 {
202 const notifs = [ UserNotificationType.COMMENT_MENTION, UserNotificationType.NEW_FOLLOW ]
203 await checkNotifications(servers[0].url, userToken2, notifs)
204 }
205 })
206
207 it('Should block an account', async function () {
208 this.timeout(10000)
209
210 await addAccountToServerBlocklist(servers[0].url, servers[0].accessToken, 'user3@' + servers[1].host)
211 await waitJobs(servers)
212 })
213
214 it('Should not have notifications from this account', async function () {
215 await checkNotifications(servers[0].url, userToken1, [])
216 await checkNotifications(servers[0].url, userToken2, [])
217
218 await removeAccountFromServerBlocklist(servers[0].url, servers[0].accessToken, 'user3@' + servers[1].host)
219 })
220 })
221
222 describe('Server blocks a server', function () {
223
224 before(async function () {
225 this.timeout(30000)
226
227 await resetState()
228 })
229
230 it('Should have appropriate notifications', async function () {
231 {
232 const notifs = [ UserNotificationType.NEW_COMMENT_ON_MY_VIDEO, UserNotificationType.NEW_FOLLOW ]
233 await checkNotifications(servers[0].url, userToken1, notifs)
234 }
235
236 {
237 const notifs = [ UserNotificationType.COMMENT_MENTION, UserNotificationType.NEW_FOLLOW ]
238 await checkNotifications(servers[0].url, userToken2, notifs)
239 }
240 })
241
242 it('Should block an account', async function () {
243 this.timeout(10000)
244
245 await addServerToServerBlocklist(servers[0].url, servers[0].accessToken, servers[1].host)
246 await waitJobs(servers)
247 })
248
249 it('Should not have notifications from this account', async function () {
250 await checkNotifications(servers[0].url, userToken1, [])
251 await checkNotifications(servers[0].url, userToken2, [])
252 })
253 })
254
255 after(async function () {
256 await cleanupTests(servers)
257 })
258 })