]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/tests/external-plugins/auto-block-videos.ts
Shorter server command names
[github/Chocobozzz/PeerTube.git] / server / tests / external-plugins / auto-block-videos.ts
CommitLineData
d4bf24df
C
1/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
2
3import 'mocha'
4import { expect } from 'chai'
d4bf24df
C
5import {
6 cleanupTests,
d23dd9fb 7 doubleFollow,
d4bf24df
C
8 flushAndRunMultipleServers,
9 killallServers,
d23dd9fb 10 MockBlocklist,
d4bf24df 11 reRunServer,
d23dd9fb
C
12 ServerInfo,
13 setAccessTokensToServers,
14 wait
15} from '@shared/extra-utils'
16import { Video } from '@shared/models'
d4bf24df
C
17
18async function check (server: ServerInfo, videoUUID: string, exists = true) {
89d241a7 19 const { data } = await server.videos.list()
d4bf24df 20
d23dd9fb 21 const video = data.find(v => v.uuid === videoUUID)
d4bf24df 22
ae2abfd3
C
23 if (exists) expect(video).to.not.be.undefined
24 else expect(video).to.be.undefined
d4bf24df
C
25}
26
27describe('Official plugin auto-block videos', function () {
28 let servers: ServerInfo[]
29 let blocklistServer: MockBlocklist
30 let server1Videos: Video[] = []
31 let server2Videos: Video[] = []
63da15eb 32 let port: number
d4bf24df
C
33
34 before(async function () {
35 this.timeout(60000)
36
37 servers = await flushAndRunMultipleServers(2)
38 await setAccessTokensToServers(servers)
39
40 for (const server of servers) {
89d241a7 41 await server.plugins.install({ npmName: 'peertube-plugin-auto-block-videos' })
d4bf24df
C
42 }
43
44 blocklistServer = new MockBlocklist()
63da15eb 45 port = await blocklistServer.initialize()
d4bf24df 46
89d241a7
C
47 await await servers[0].videos.quickUpload({ name: 'video server 1' })
48 await await servers[1].videos.quickUpload({ name: 'video server 2' })
49 await await servers[1].videos.quickUpload({ name: 'video 2 server 2' })
50 await await servers[1].videos.quickUpload({ name: 'video 3 server 2' })
d4bf24df
C
51
52 {
89d241a7 53 const { data } = await servers[0].videos.list()
d23dd9fb 54 server1Videos = data.map(v => Object.assign(v, { url: servers[0].url + '/videos/watch/' + v.uuid }))
d4bf24df
C
55 }
56
57 {
89d241a7 58 const { data } = await servers[1].videos.list()
d23dd9fb 59 server2Videos = data.map(v => Object.assign(v, { url: servers[1].url + '/videos/watch/' + v.uuid }))
d4bf24df
C
60 }
61
62 await doubleFollow(servers[0], servers[1])
63 })
64
65 it('Should update plugin settings', async function () {
89d241a7 66 await servers[0].plugins.updateSettings({
d4bf24df
C
67 npmName: 'peertube-plugin-auto-block-videos',
68 settings: {
63da15eb 69 'blocklist-urls': `http://localhost:${port}/blocklist`,
d4bf24df
C
70 'check-seconds-interval': 1
71 }
72 })
73 })
74
75 it('Should auto block a video', async function () {
76 this.timeout(10000)
77
78 await check(servers[0], server2Videos[0].uuid, true)
79
80 blocklistServer.replace({
81 data: [
82 {
83 value: server2Videos[0].url
84 }
85 ]
86 })
87
88 await wait(2000)
89
90 await check(servers[0], server2Videos[0].uuid, false)
91 })
92
93 it('Should have video in blacklists', async function () {
89d241a7 94 const body = await servers[0].blacklist.list()
d4bf24df 95
e3d15a6a 96 const videoBlacklists = body.data
d4bf24df
C
97 expect(videoBlacklists).to.have.lengthOf(1)
98 expect(videoBlacklists[0].reason).to.contains('Automatically blocked from auto block plugin')
99 expect(videoBlacklists[0].video.name).to.equal(server2Videos[0].name)
100 })
101
102 it('Should not block a local video', async function () {
103 this.timeout(10000)
104
105 await check(servers[0], server1Videos[0].uuid, true)
106
107 blocklistServer.replace({
108 data: [
109 {
110 value: server1Videos[0].url
111 }
112 ]
113 })
114
115 await wait(2000)
116
117 await check(servers[0], server1Videos[0].uuid, true)
118 })
119
120 it('Should remove a video block', async function () {
121 this.timeout(10000)
122
123 await check(servers[0], server2Videos[0].uuid, false)
124
125 blocklistServer.replace({
126 data: [
127 {
128 value: server2Videos[0].url,
129 action: 'remove'
130 }
131 ]
132 })
133
134 await wait(2000)
135
136 await check(servers[0], server2Videos[0].uuid, true)
137 })
138
139 it('Should auto block a video, manually unblock it and do not reblock it automatically', async function () {
140 this.timeout(20000)
141
142 const video = server2Videos[1]
143
144 await check(servers[0], video.uuid, true)
145
146 blocklistServer.replace({
147 data: [
148 {
149 value: video.url,
150 updatedAt: new Date().toISOString()
151 }
152 ]
153 })
154
155 await wait(2000)
156
157 await check(servers[0], video.uuid, false)
158
89d241a7 159 await servers[0].blacklist.remove({ videoId: video.uuid })
d4bf24df
C
160
161 await check(servers[0], video.uuid, true)
162
9293139f 163 await killallServers([ servers[0] ])
d4bf24df
C
164 await reRunServer(servers[0])
165 await wait(2000)
166
167 await check(servers[0], video.uuid, true)
168 })
169
170 after(async function () {
7820a54e
C
171 await blocklistServer.terminate()
172
d4bf24df
C
173 await cleanupTests(servers)
174 })
175})