Add ability to add custom css/javascript
[oweals/peertube.git] / server / tests / api / videos / video-abuse.ts
1 /* tslint:disable:no-unused-expression */
2
3 import * as chai from 'chai'
4 import 'mocha'
5 import {
6   flushAndRunMultipleServers,
7   flushTests,
8   getVideoAbusesList,
9   getVideosList,
10   killallServers,
11   reportVideoAbuse,
12   ServerInfo,
13   setAccessTokensToServers,
14   uploadVideo,
15   wait
16 } from '../../utils/index'
17 import { doubleFollow } from '../../utils/server/follows'
18
19 const expect = chai.expect
20
21 describe('Test video abuses', function () {
22   let servers: ServerInfo[] = []
23
24   before(async function () {
25     this.timeout(50000)
26
27     // Run servers
28     servers = await flushAndRunMultipleServers(2)
29
30     // Get the access tokens
31     await setAccessTokensToServers(servers)
32
33     // Server 1 and server 2 follow each other
34     await doubleFollow(servers[0], servers[1])
35
36     // Upload some videos on each servers
37     const video1Attributes = {
38       name: 'my super name for server 1',
39       description: 'my super description for server 1'
40     }
41     await uploadVideo(servers[0].url, servers[0].accessToken, video1Attributes)
42
43     const video2Attributes = {
44       name: 'my super name for server 2',
45       description: 'my super description for server 2'
46     }
47     await uploadVideo(servers[1].url, servers[1].accessToken, video2Attributes)
48
49     // Wait videos propagation, server 2 has transcoding enabled
50     await wait(15000)
51
52     const res = await getVideosList(servers[0].url)
53     const videos = res.body.data
54
55     expect(videos.length).to.equal(2)
56
57     servers[0].video = videos.find(video => video.name === 'my super name for server 1')
58     servers[1].video = videos.find(video => video.name === 'my super name for server 2')
59   })
60
61   it('Should not have video abuses', async function () {
62     const res = await getVideoAbusesList(servers[0].url, servers[0].accessToken)
63
64     expect(res.body.total).to.equal(0)
65     expect(res.body.data).to.be.an('array')
66     expect(res.body.data.length).to.equal(0)
67   })
68
69   it('Should report abuse on a local video', async function () {
70     this.timeout(10000)
71
72     const reason = 'my super bad reason'
73     await reportVideoAbuse(servers[0].url, servers[0].accessToken, servers[0].video.id, reason)
74
75     // We wait requests propagation, even if the server 1 is not supposed to make a request to server 2
76     await wait(5000)
77   })
78
79   it('Should have 1 video abuses on server 1 and 0 on server 2', async function () {
80     const res1 = await getVideoAbusesList(servers[0].url, servers[0].accessToken)
81
82     expect(res1.body.total).to.equal(1)
83     expect(res1.body.data).to.be.an('array')
84     expect(res1.body.data.length).to.equal(1)
85
86     const abuse = res1.body.data[0]
87     expect(abuse.reason).to.equal('my super bad reason')
88     expect(abuse.reporterUsername).to.equal('root')
89     expect(abuse.reporterServerHost).to.equal('localhost:9001')
90     expect(abuse.videoId).to.equal(servers[0].video.id)
91
92     const res2 = await getVideoAbusesList(servers[1].url, servers[1].accessToken)
93     expect(res2.body.total).to.equal(0)
94     expect(res2.body.data).to.be.an('array')
95     expect(res2.body.data.length).to.equal(0)
96   })
97
98   it('Should report abuse on a remote video', async function () {
99     this.timeout(10000)
100
101     const reason = 'my super bad reason 2'
102     await reportVideoAbuse(servers[0].url, servers[0].accessToken, servers[1].video.id, reason)
103
104     // We wait requests propagation
105     await wait(5000)
106   })
107
108   it('Should have 2 video abuse on server 1 and 1 on server 2', async function () {
109     const res1 = await getVideoAbusesList(servers[0].url, servers[0].accessToken)
110     expect(res1.body.total).to.equal(2)
111     expect(res1.body.data).to.be.an('array')
112     expect(res1.body.data.length).to.equal(2)
113
114     const abuse1 = res1.body.data[0]
115     expect(abuse1.reason).to.equal('my super bad reason')
116     expect(abuse1.reporterUsername).to.equal('root')
117     expect(abuse1.reporterServerHost).to.equal('localhost:9001')
118     expect(abuse1.videoId).to.equal(servers[0].video.id)
119
120     const abuse2 = res1.body.data[1]
121     expect(abuse2.reason).to.equal('my super bad reason 2')
122     expect(abuse2.reporterUsername).to.equal('root')
123     expect(abuse2.reporterServerHost).to.equal('localhost:9001')
124     expect(abuse2.videoId).to.equal(servers[1].video.id)
125
126     const res2 = await getVideoAbusesList(servers[1].url, servers[1].accessToken)
127     expect(res2.body.total).to.equal(1)
128     expect(res2.body.data).to.be.an('array')
129     expect(res2.body.data.length).to.equal(1)
130
131     const abuse3 = res2.body.data[0]
132     expect(abuse3.reason).to.equal('my super bad reason 2')
133     expect(abuse3.reporterUsername).to.equal('root')
134     expect(abuse3.reporterServerHost).to.equal('localhost:9001')
135   })
136
137   after(async function () {
138     killallServers(servers)
139
140     // Keep the logs if the test failed
141     if (this['ok']) {
142       await flushTests()
143     }
144   })
145 })