]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - server/tests/api/search/search-activitypub-videos.ts
Shared utils -> extra-utils
[github/Chocobozzz/PeerTube.git] / server / tests / api / search / search-activitypub-videos.ts
1 /* tslint:disable:no-unused-expression */
2
3 import * as chai from 'chai'
4 import 'mocha'
5 import {
6 addVideoChannel,
7 flushAndRunMultipleServers,
8 flushTests,
9 getVideosList,
10 killallServers,
11 removeVideo,
12 searchVideoWithToken,
13 ServerInfo,
14 setAccessTokensToServers,
15 updateVideo,
16 uploadVideo,
17 wait,
18 searchVideo
19 } from '../../../../shared/extra-utils'
20 import { waitJobs } from '../../../../shared/extra-utils/server/jobs'
21 import { Video, VideoPrivacy } from '../../../../shared/models/videos'
22
23 const expect = chai.expect
24
25 describe('Test a ActivityPub videos search', function () {
26 let servers: ServerInfo[]
27 let videoServer1UUID: string
28 let videoServer2UUID: string
29
30 before(async function () {
31 this.timeout(120000)
32
33 await flushTests()
34
35 servers = await flushAndRunMultipleServers(2)
36
37 await setAccessTokensToServers(servers)
38
39 {
40 const res = await uploadVideo(servers[ 0 ].url, servers[ 0 ].accessToken, { name: 'video 1 on server 1' })
41 videoServer1UUID = res.body.video.uuid
42 }
43
44 {
45 const res = await uploadVideo(servers[ 1 ].url, servers[ 1 ].accessToken, { name: 'video 1 on server 2' })
46 videoServer2UUID = res.body.video.uuid
47 }
48
49 await waitJobs(servers)
50 })
51
52 it('Should not find a remote video', async function () {
53 {
54 const res = await searchVideoWithToken(servers[ 0 ].url, 'http://localhost:9002/videos/watch/43', servers[ 0 ].accessToken)
55
56 expect(res.body.total).to.equal(0)
57 expect(res.body.data).to.be.an('array')
58 expect(res.body.data).to.have.lengthOf(0)
59 }
60
61 {
62 // Without token
63 const res = await searchVideo(servers[0].url, 'http://localhost:9002/videos/watch/' + videoServer2UUID)
64
65 expect(res.body.total).to.equal(0)
66 expect(res.body.data).to.be.an('array')
67 expect(res.body.data).to.have.lengthOf(0)
68 }
69 })
70
71 it('Should search a local video', async function () {
72 const res = await searchVideo(servers[0].url, 'http://localhost:9001/videos/watch/' + videoServer1UUID)
73
74 expect(res.body.total).to.equal(1)
75 expect(res.body.data).to.be.an('array')
76 expect(res.body.data).to.have.lengthOf(1)
77 expect(res.body.data[0].name).to.equal('video 1 on server 1')
78 })
79
80 it('Should search a remote video', async function () {
81 const res = await searchVideoWithToken(servers[0].url, 'http://localhost:9002/videos/watch/' + videoServer2UUID, servers[0].accessToken)
82
83 expect(res.body.total).to.equal(1)
84 expect(res.body.data).to.be.an('array')
85 expect(res.body.data).to.have.lengthOf(1)
86 expect(res.body.data[0].name).to.equal('video 1 on server 2')
87 })
88
89 it('Should not list this remote video', async function () {
90 const res = await getVideosList(servers[0].url)
91 expect(res.body.total).to.equal(1)
92 expect(res.body.data).to.have.lengthOf(1)
93 expect(res.body.data[0].name).to.equal('video 1 on server 1')
94 })
95
96 it('Should update video of server 2, and refresh it on server 1', async function () {
97 this.timeout(60000)
98
99 const channelAttributes = {
100 name: 'super_channel',
101 displayName: 'super channel'
102 }
103 const resChannel = await addVideoChannel(servers[1].url, servers[1].accessToken, channelAttributes)
104 const videoChannelId = resChannel.body.videoChannel.id
105
106 const attributes = {
107 name: 'updated',
108 tag: [ 'tag1', 'tag2' ],
109 privacy: VideoPrivacy.UNLISTED,
110 channelId: videoChannelId
111 }
112 await updateVideo(servers[1].url, servers[1].accessToken, videoServer2UUID, attributes)
113
114 await waitJobs(servers)
115 // Expire video
116 await wait(10000)
117
118 // Will run refresh async
119 await searchVideoWithToken(servers[0].url, 'http://localhost:9002/videos/watch/' + videoServer2UUID, servers[0].accessToken)
120
121 // Wait refresh
122 await wait(5000)
123
124 const res = await searchVideoWithToken(servers[0].url, 'http://localhost:9002/videos/watch/' + videoServer2UUID, servers[0].accessToken)
125 expect(res.body.total).to.equal(1)
126 expect(res.body.data).to.have.lengthOf(1)
127
128 const video: Video = res.body.data[0]
129 expect(video.name).to.equal('updated')
130 expect(video.channel.name).to.equal('super_channel')
131 expect(video.privacy.id).to.equal(VideoPrivacy.UNLISTED)
132 })
133
134 it('Should delete video of server 2, and delete it on server 1', async function () {
135 this.timeout(60000)
136
137 await removeVideo(servers[1].url, servers[1].accessToken, videoServer2UUID)
138
139 await waitJobs(servers)
140 // Expire video
141 await wait(10000)
142
143 // Will run refresh async
144 await searchVideoWithToken(servers[0].url, 'http://localhost:9002/videos/watch/' + videoServer2UUID, servers[0].accessToken)
145
146 // Wait refresh
147 await wait(5000)
148
149 const res = await searchVideoWithToken(servers[0].url, 'http://localhost:9002/videos/watch/' + videoServer2UUID, servers[0].accessToken)
150 expect(res.body.total).to.equal(0)
151 expect(res.body.data).to.have.lengthOf(0)
152 })
153
154 after(async function () {
155 killallServers(servers)
156
157 // Keep the logs if the test failed
158 if (this['ok']) {
159 await flushTests()
160 }
161 })
162 })