1 /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
4 import { expect } from 'chai'
5 import { Video, VideoBlacklist } from '@shared/models'
8 getBlacklistedVideosList,
12 removeVideoFromBlacklist,
13 setAccessTokensToServers,
17 } from '../../../shared/extra-utils'
20 flushAndRunMultipleServers,
24 } from '../../../shared/extra-utils/server/servers'
26 async function check (server: ServerInfo, videoUUID: string, exists = true) {
27 const res = await getVideosList(server.url)
29 const video = res.body.data.find(v => v.uuid === videoUUID)
32 expect(video).to.not.be.undefined
34 expect(video).to.be.undefined
38 describe('Official plugin auto-block videos', function () {
39 let servers: ServerInfo[]
40 let blocklistServer: MockBlocklist
41 let server1Videos: Video[] = []
42 let server2Videos: Video[] = []
45 before(async function () {
48 servers = await flushAndRunMultipleServers(2)
49 await setAccessTokensToServers(servers)
51 for (const server of servers) {
54 accessToken: server.accessToken,
55 npmName: 'peertube-plugin-auto-block-videos'
59 blocklistServer = new MockBlocklist()
60 port = await blocklistServer.initialize()
62 await uploadVideoAndGetId({ server: servers[0], videoName: 'video server 1' })
63 await uploadVideoAndGetId({ server: servers[1], videoName: 'video server 2' })
64 await uploadVideoAndGetId({ server: servers[1], videoName: 'video 2 server 2' })
65 await uploadVideoAndGetId({ server: servers[1], videoName: 'video 3 server 2' })
68 const res = await getVideosList(servers[0].url)
69 server1Videos = res.body.data.map(v => Object.assign(v, { url: servers[0].url + '/videos/watch/' + v.uuid }))
73 const res = await getVideosList(servers[1].url)
74 server2Videos = res.body.data.map(v => Object.assign(v, { url: servers[1].url + '/videos/watch/' + v.uuid }))
77 await doubleFollow(servers[0], servers[1])
80 it('Should update plugin settings', async function () {
81 await updatePluginSettings({
83 accessToken: servers[0].accessToken,
84 npmName: 'peertube-plugin-auto-block-videos',
86 'blocklist-urls': `http://localhost:${port}/blocklist`,
87 'check-seconds-interval': 1
92 it('Should auto block a video', async function () {
95 await check(servers[0], server2Videos[0].uuid, true)
97 blocklistServer.replace({
100 value: server2Videos[0].url
107 await check(servers[0], server2Videos[0].uuid, false)
110 it('Should have video in blacklists', async function () {
111 const res = await getBlacklistedVideosList({ url: servers[0].url, token: servers[0].accessToken })
113 const videoBlacklists = res.body.data as VideoBlacklist[]
115 expect(videoBlacklists).to.have.lengthOf(1)
116 expect(videoBlacklists[0].reason).to.contains('Automatically blocked from auto block plugin')
117 expect(videoBlacklists[0].video.name).to.equal(server2Videos[0].name)
120 it('Should not block a local video', async function () {
123 await check(servers[0], server1Videos[0].uuid, true)
125 blocklistServer.replace({
128 value: server1Videos[0].url
135 await check(servers[0], server1Videos[0].uuid, true)
138 it('Should remove a video block', async function () {
141 await check(servers[0], server2Videos[0].uuid, false)
143 blocklistServer.replace({
146 value: server2Videos[0].url,
154 await check(servers[0], server2Videos[0].uuid, true)
157 it('Should auto block a video, manually unblock it and do not reblock it automatically', async function () {
160 const video = server2Videos[1]
162 await check(servers[0], video.uuid, true)
164 blocklistServer.replace({
168 updatedAt: new Date().toISOString()
175 await check(servers[0], video.uuid, false)
177 await removeVideoFromBlacklist(servers[0].url, servers[0].accessToken, video.uuid)
179 await check(servers[0], video.uuid, true)
181 killallServers([ servers[0] ])
182 await reRunServer(servers[0])
185 await check(servers[0], video.uuid, true)
188 after(async function () {
189 await blocklistServer.terminate()
191 await cleanupTests(servers)