]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/tests/utils/videos.js
Server: fix single pod tests
[github/Chocobozzz/PeerTube.git] / server / tests / utils / videos.js
CommitLineData
8d309058
C
1'use strict'
2
3const fs = require('fs')
4const pathUtils = require('path')
5const request = require('supertest')
6
7const videosUtils = {
c4403b29
C
8 getAllVideosListBy,
9 getVideo,
10 getVideosList,
11 getVideosListPagination,
12 getVideosListSort,
13 removeVideo,
14 searchVideo,
15 searchVideoWithPagination,
16 searchVideoWithSort,
17 testVideoImage,
7b1f49de
C
18 uploadVideo,
19 updateVideo
8d309058
C
20}
21
22// ---------------------- Export functions --------------------
23
24function getAllVideosListBy (url, end) {
25 const path = '/api/v1/videos'
26
27 request(url)
28 .get(path)
feb4bdfd 29 .query({ sort: 'createdAt' })
8d309058
C
30 .query({ start: 0 })
31 .query({ count: 10000 })
32 .set('Accept', 'application/json')
33 .expect(200)
34 .expect('Content-Type', /json/)
35 .end(end)
36}
37
38function getVideo (url, id, end) {
39 const path = '/api/v1/videos/' + id
40
41 request(url)
42 .get(path)
43 .set('Accept', 'application/json')
44 .expect(200)
45 .expect('Content-Type', /json/)
46 .end(end)
47}
48
49function getVideosList (url, end) {
50 const path = '/api/v1/videos'
51
52 request(url)
53 .get(path)
54 .query({ sort: 'name' })
55 .set('Accept', 'application/json')
56 .expect(200)
57 .expect('Content-Type', /json/)
58 .end(end)
59}
60
91cc839a
C
61function getVideosListPagination (url, start, count, sort, end) {
62 if (!end) {
63 end = sort
64 sort = null
65 }
66
8d309058
C
67 const path = '/api/v1/videos'
68
91cc839a
C
69 const req = request(url)
70 .get(path)
71 .query({ start: start })
72 .query({ count: count })
73
74 if (sort) req.query({ sort })
75
76 req.set('Accept', 'application/json')
77 .expect(200)
78 .expect('Content-Type', /json/)
79 .end(end)
8d309058
C
80}
81
82function getVideosListSort (url, sort, end) {
83 const path = '/api/v1/videos'
84
85 request(url)
86 .get(path)
87 .query({ sort: sort })
88 .set('Accept', 'application/json')
89 .expect(200)
90 .expect('Content-Type', /json/)
91 .end(end)
92}
93
94function removeVideo (url, token, id, expectedStatus, end) {
95 if (!end) {
96 end = expectedStatus
97 expectedStatus = 204
98 }
99
100 const path = '/api/v1/videos'
101
102 request(url)
103 .delete(path + '/' + id)
104 .set('Accept', 'application/json')
105 .set('Authorization', 'Bearer ' + token)
106 .expect(expectedStatus)
107 .end(end)
108}
109
110function searchVideo (url, search, field, end) {
111 if (!end) {
112 end = field
113 field = null
114 }
115
116 const path = '/api/v1/videos'
117 const req = request(url)
118 .get(path + '/search/' + search)
119 .set('Accept', 'application/json')
120
121 if (field) req.query({ field: field })
122 req.expect(200)
123 .expect('Content-Type', /json/)
124 .end(end)
125}
126
91cc839a
C
127function searchVideoWithPagination (url, search, field, start, count, sort, end) {
128 if (!end) {
129 end = sort
130 sort = null
131 }
132
8d309058
C
133 const path = '/api/v1/videos'
134
91cc839a
C
135 const req = request(url)
136 .get(path + '/search/' + search)
137 .query({ start: start })
138 .query({ count: count })
139 .query({ field: field })
140
141 if (sort) req.query({ sort })
142
143 req.set('Accept', 'application/json')
144 .expect(200)
145 .expect('Content-Type', /json/)
146 .end(end)
8d309058
C
147}
148
149function searchVideoWithSort (url, search, sort, end) {
150 const path = '/api/v1/videos'
151
152 request(url)
153 .get(path + '/search/' + search)
154 .query({ sort: sort })
155 .set('Accept', 'application/json')
156 .expect(200)
157 .expect('Content-Type', /json/)
158 .end(end)
159}
160
161function testVideoImage (url, videoName, imagePath, callback) {
162 // Don't test images if the node env is not set
163 // Because we need a special ffmpeg version for this test
164 if (process.env.NODE_TEST_IMAGE) {
165 request(url)
166 .get(imagePath)
167 .expect(200)
168 .end(function (err, res) {
169 if (err) return callback(err)
170
171 fs.readFile(pathUtils.join(__dirname, '..', 'api', 'fixtures', videoName + '.jpg'), function (err, data) {
172 if (err) return callback(err)
173
174 callback(null, data.equals(res.body))
175 })
176 })
177 } else {
178 console.log('Do not test images. Enable it by setting NODE_TEST_IMAGE env variable.')
179 callback(null, true)
180 }
181}
182
183function uploadVideo (url, accessToken, name, description, tags, fixture, specialStatus, end) {
184 if (!end) {
185 end = specialStatus
186 specialStatus = 204
187 }
188
189 const path = '/api/v1/videos'
190
191 const req = request(url)
192 .post(path)
193 .set('Accept', 'application/json')
194 .set('Authorization', 'Bearer ' + accessToken)
195 .field('name', name)
196 .field('description', description)
197
198 for (let i = 0; i < tags.length; i++) {
199 req.field('tags[' + i + ']', tags[i])
200 }
201
202 let filepath = ''
203 if (pathUtils.isAbsolute(fixture)) {
204 filepath = fixture
205 } else {
206 filepath = pathUtils.join(__dirname, '..', 'api', 'fixtures', fixture)
207 }
208
209 req.attach('videofile', filepath)
210 .expect(specialStatus)
211 .end(end)
212}
213
7b1f49de
C
214function updateVideo (url, accessToken, id, name, description, tags, specialStatus, end) {
215 if (!end) {
216 end = specialStatus
217 specialStatus = 204
218 }
219
220 const path = '/api/v1/videos/' + id
221
222 const req = request(url)
223 .put(path)
224 .set('Accept', 'application/json')
225 .set('Authorization', 'Bearer ' + accessToken)
226
227 if (name) req.field('name', name)
228 if (description) req.field('description', description)
229
230 if (tags) {
231 for (let i = 0; i < tags.length; i++) {
232 req.field('tags[' + i + ']', tags[i])
233 }
234 }
235
236 req.expect(specialStatus).end(end)
237}
238
8d309058
C
239// ---------------------------------------------------------------------------
240
241module.exports = videosUtils