aboutsummaryrefslogtreecommitdiffhomepage
path: root/server/tests/api/videos/video-privacy.ts
diff options
context:
space:
mode:
authorChocobozzz <me@florianbigard.com>2021-06-28 17:30:59 +0200
committerChocobozzz <chocobozzz@cpy.re>2021-06-29 14:56:35 +0200
commitd4a8e7a65f97bb3257facc13e1ae8ffdbad61ddb (patch)
treea4cb07318100031951c3dffc61f4f2cb95d2cbd0 /server/tests/api/videos/video-privacy.ts
parent62ddc31a9e4b92d7d27898ccfc363f68ab044139 (diff)
downloadPeerTube-d4a8e7a65f97bb3257facc13e1ae8ffdbad61ddb.tar.gz
PeerTube-d4a8e7a65f97bb3257facc13e1ae8ffdbad61ddb.tar.zst
PeerTube-d4a8e7a65f97bb3257facc13e1ae8ffdbad61ddb.zip
Support short uuid for GET video/playlist
Diffstat (limited to 'server/tests/api/videos/video-privacy.ts')
-rw-r--r--server/tests/api/videos/video-privacy.ts351
1 files changed, 183 insertions, 168 deletions
diff --git a/server/tests/api/videos/video-privacy.ts b/server/tests/api/videos/video-privacy.ts
index fed6ca0e0..950aeb7cf 100644
--- a/server/tests/api/videos/video-privacy.ts
+++ b/server/tests/api/videos/video-privacy.ts
@@ -1,8 +1,9 @@
1/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */ 1/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
2 2
3import * as chai from 'chai'
4import 'mocha' 3import 'mocha'
5import { VideoPrivacy } from '../../../../shared/models/videos/video-privacy.enum' 4import * as chai from 'chai'
5import { HttpStatusCode } from '@shared/core-utils/miscs/http-error-codes'
6import { Video, VideoCreateResult } from '@shared/models'
6import { 7import {
7 cleanupTests, 8 cleanupTests,
8 flushAndRunServer, 9 flushAndRunServer,
@@ -13,12 +14,11 @@ import {
13 uploadVideo 14 uploadVideo
14} from '../../../../shared/extra-utils/index' 15} from '../../../../shared/extra-utils/index'
15import { doubleFollow } from '../../../../shared/extra-utils/server/follows' 16import { doubleFollow } from '../../../../shared/extra-utils/server/follows'
17import { waitJobs } from '../../../../shared/extra-utils/server/jobs'
16import { userLogin } from '../../../../shared/extra-utils/users/login' 18import { userLogin } from '../../../../shared/extra-utils/users/login'
17import { createUser } from '../../../../shared/extra-utils/users/users' 19import { createUser } from '../../../../shared/extra-utils/users/users'
18import { getMyVideos, getVideo, getVideoWithToken, updateVideo } from '../../../../shared/extra-utils/videos/videos' 20import { getMyVideos, getVideo, getVideoWithToken, updateVideo } from '../../../../shared/extra-utils/videos/videos'
19import { waitJobs } from '../../../../shared/extra-utils/server/jobs' 21import { VideoPrivacy } from '../../../../shared/models/videos/video-privacy.enum'
20import { Video } from '@shared/models'
21import { HttpStatusCode } from '@shared/core-utils/miscs/http-error-codes'
22 22
23const expect = chai.expect 23const expect = chai.expect
24 24
@@ -32,7 +32,7 @@ describe('Test video privacy', function () {
32 let internalVideoId: number 32 let internalVideoId: number
33 let internalVideoUUID: string 33 let internalVideoUUID: string
34 34
35 let unlistedVideoUUID: string 35 let unlistedVideo: VideoCreateResult
36 let nonFederatedUnlistedVideoUUID: string 36 let nonFederatedUnlistedVideoUUID: string
37 37
38 let now: number 38 let now: number
@@ -59,231 +59,246 @@ describe('Test video privacy', function () {
59 await doubleFollow(servers[0], servers[1]) 59 await doubleFollow(servers[0], servers[1])
60 }) 60 })
61 61
62 it('Should upload a private and internal videos on server 1', async function () { 62 describe('Private and internal videos', function () {
63 this.timeout(10000)
64 63
65 for (const privacy of [ VideoPrivacy.PRIVATE, VideoPrivacy.INTERNAL ]) { 64 it('Should upload a private and internal videos on server 1', async function () {
66 const attributes = { privacy } 65 this.timeout(10000)
67 await uploadVideo(servers[0].url, servers[0].accessToken, attributes)
68 }
69 66
70 await waitJobs(servers) 67 for (const privacy of [ VideoPrivacy.PRIVATE, VideoPrivacy.INTERNAL ]) {
71 }) 68 const attributes = { privacy }
69 await uploadVideo(servers[0].url, servers[0].accessToken, attributes)
70 }
72 71
73 it('Should not have these private and internal videos on server 2', async function () { 72 await waitJobs(servers)
74 const res = await getVideosList(servers[1].url) 73 })
75 74
76 expect(res.body.total).to.equal(0) 75 it('Should not have these private and internal videos on server 2', async function () {
77 expect(res.body.data).to.have.lengthOf(0) 76 const res = await getVideosList(servers[1].url)
78 })
79 77
80 it('Should not list the private and internal videos for an unauthenticated user on server 1', async function () { 78 expect(res.body.total).to.equal(0)
81 const res = await getVideosList(servers[0].url) 79 expect(res.body.data).to.have.lengthOf(0)
80 })
82 81
83 expect(res.body.total).to.equal(0) 82 it('Should not list the private and internal videos for an unauthenticated user on server 1', async function () {
84 expect(res.body.data).to.have.lengthOf(0) 83 const res = await getVideosList(servers[0].url)
85 }) 84
85 expect(res.body.total).to.equal(0)
86 expect(res.body.data).to.have.lengthOf(0)
87 })
86 88
87 it('Should not list the private video and list the internal video for an authenticated user on server 1', async function () { 89 it('Should not list the private video and list the internal video for an authenticated user on server 1', async function () {
88 const res = await getVideosListWithToken(servers[0].url, servers[0].accessToken) 90 const res = await getVideosListWithToken(servers[0].url, servers[0].accessToken)
89 91
90 expect(res.body.total).to.equal(1) 92 expect(res.body.total).to.equal(1)
91 expect(res.body.data).to.have.lengthOf(1) 93 expect(res.body.data).to.have.lengthOf(1)
92 94
93 expect(res.body.data[0].privacy.id).to.equal(VideoPrivacy.INTERNAL) 95 expect(res.body.data[0].privacy.id).to.equal(VideoPrivacy.INTERNAL)
94 }) 96 })
95 97
96 it('Should list my (private and internal) videos', async function () { 98 it('Should list my (private and internal) videos', async function () {
97 const res = await getMyVideos(servers[0].url, servers[0].accessToken, 0, 10) 99 const res = await getMyVideos(servers[0].url, servers[0].accessToken, 0, 10)
98 100
99 expect(res.body.total).to.equal(2) 101 expect(res.body.total).to.equal(2)
100 expect(res.body.data).to.have.lengthOf(2) 102 expect(res.body.data).to.have.lengthOf(2)
101 103
102 const videos: Video[] = res.body.data 104 const videos: Video[] = res.body.data
103 105
104 const privateVideo = videos.find(v => v.privacy.id === VideoPrivacy.PRIVATE) 106 const privateVideo = videos.find(v => v.privacy.id === VideoPrivacy.PRIVATE)
105 privateVideoId = privateVideo.id 107 privateVideoId = privateVideo.id
106 privateVideoUUID = privateVideo.uuid 108 privateVideoUUID = privateVideo.uuid
107 109
108 const internalVideo = videos.find(v => v.privacy.id === VideoPrivacy.INTERNAL) 110 const internalVideo = videos.find(v => v.privacy.id === VideoPrivacy.INTERNAL)
109 internalVideoId = internalVideo.id 111 internalVideoId = internalVideo.id
110 internalVideoUUID = internalVideo.uuid 112 internalVideoUUID = internalVideo.uuid
111 }) 113 })
112 114
113 it('Should not be able to watch the private/internal video with non authenticated user', async function () { 115 it('Should not be able to watch the private/internal video with non authenticated user', async function () {
114 await getVideo(servers[0].url, privateVideoUUID, HttpStatusCode.UNAUTHORIZED_401) 116 await getVideo(servers[0].url, privateVideoUUID, HttpStatusCode.UNAUTHORIZED_401)
115 await getVideo(servers[0].url, internalVideoUUID, HttpStatusCode.UNAUTHORIZED_401) 117 await getVideo(servers[0].url, internalVideoUUID, HttpStatusCode.UNAUTHORIZED_401)
116 }) 118 })
117 119
118 it('Should not be able to watch the private video with another user', async function () { 120 it('Should not be able to watch the private video with another user', async function () {
119 this.timeout(10000) 121 this.timeout(10000)
120 122
121 const user = { 123 const user = {
122 username: 'hello', 124 username: 'hello',
123 password: 'super password' 125 password: 'super password'
124 } 126 }
125 await createUser({ url: servers[0].url, accessToken: servers[0].accessToken, username: user.username, password: user.password }) 127 await createUser({ url: servers[0].url, accessToken: servers[0].accessToken, username: user.username, password: user.password })
126 128
127 anotherUserToken = await userLogin(servers[0], user) 129 anotherUserToken = await userLogin(servers[0], user)
128 await getVideoWithToken(servers[0].url, anotherUserToken, privateVideoUUID, HttpStatusCode.FORBIDDEN_403) 130 await getVideoWithToken(servers[0].url, anotherUserToken, privateVideoUUID, HttpStatusCode.FORBIDDEN_403)
129 }) 131 })
130 132
131 it('Should be able to watch the internal video with another user', async function () { 133 it('Should be able to watch the internal video with another user', async function () {
132 await getVideoWithToken(servers[0].url, anotherUserToken, internalVideoUUID, HttpStatusCode.OK_200) 134 await getVideoWithToken(servers[0].url, anotherUserToken, internalVideoUUID, HttpStatusCode.OK_200)
133 }) 135 })
134 136
135 it('Should be able to watch the private video with the correct user', async function () { 137 it('Should be able to watch the private video with the correct user', async function () {
136 await getVideoWithToken(servers[0].url, servers[0].accessToken, privateVideoUUID, HttpStatusCode.OK_200) 138 await getVideoWithToken(servers[0].url, servers[0].accessToken, privateVideoUUID, HttpStatusCode.OK_200)
139 })
137 }) 140 })
138 141
139 it('Should upload an unlisted video on server 2', async function () { 142 describe('Unlisted videos', function () {
140 this.timeout(60000)
141 143
142 const attributes = { 144 it('Should upload an unlisted video on server 2', async function () {
143 name: 'unlisted video', 145 this.timeout(60000)
144 privacy: VideoPrivacy.UNLISTED
145 }
146 await uploadVideo(servers[1].url, servers[1].accessToken, attributes)
147 146
148 // Server 2 has transcoding enabled 147 const attributes = {
149 await waitJobs(servers) 148 name: 'unlisted video',
150 }) 149 privacy: VideoPrivacy.UNLISTED
150 }
151 await uploadVideo(servers[1].url, servers[1].accessToken, attributes)
151 152
152 it('Should not have this unlisted video listed on server 1 and 2', async function () { 153 // Server 2 has transcoding enabled
153 for (const server of servers) { 154 await waitJobs(servers)
154 const res = await getVideosList(server.url) 155 })
155 156
156 expect(res.body.total).to.equal(0) 157 it('Should not have this unlisted video listed on server 1 and 2', async function () {
157 expect(res.body.data).to.have.lengthOf(0) 158 for (const server of servers) {
158 } 159 const res = await getVideosList(server.url)
159 })
160 160
161 it('Should list my (unlisted) videos', async function () { 161 expect(res.body.total).to.equal(0)
162 const res = await getMyVideos(servers[1].url, servers[1].accessToken, 0, 1) 162 expect(res.body.data).to.have.lengthOf(0)
163 }
164 })
163 165
164 expect(res.body.total).to.equal(1) 166 it('Should list my (unlisted) videos', async function () {
165 expect(res.body.data).to.have.lengthOf(1) 167 const res = await getMyVideos(servers[1].url, servers[1].accessToken, 0, 1)
166 168
167 unlistedVideoUUID = res.body.data[0].uuid 169 expect(res.body.total).to.equal(1)
168 }) 170 expect(res.body.data).to.have.lengthOf(1)
169 171
170 it('Should be able to get this unlisted video', async function () { 172 unlistedVideo = res.body.data[0]
171 for (const server of servers) { 173 })
172 const res = await getVideo(server.url, unlistedVideoUUID)
173 174
174 expect(res.body.name).to.equal('unlisted video') 175 it('Should not be able to get this unlisted video using its id', async function () {
175 } 176 await getVideo(servers[1].url, unlistedVideo.id, 404)
176 }) 177 })
177 178
178 it('Should upload a non-federating unlisted video to server 1', async function () { 179 it('Should be able to get this unlisted video using its uuid/shortUUID', async function () {
179 this.timeout(30000) 180 for (const server of servers) {
181 for (const id of [ unlistedVideo.uuid, unlistedVideo.shortUUID ]) {
182 const res = await getVideo(server.url, id)
180 183
181 const attributes = { 184 expect(res.body.name).to.equal('unlisted video')
182 name: 'unlisted video', 185 }
183 privacy: VideoPrivacy.UNLISTED 186 }
184 } 187 })
185 await uploadVideo(servers[0].url, servers[0].accessToken, attributes)
186 188
187 await waitJobs(servers) 189 it('Should upload a non-federating unlisted video to server 1', async function () {
188 }) 190 this.timeout(30000)
191
192 const attributes = {
193 name: 'unlisted video',
194 privacy: VideoPrivacy.UNLISTED
195 }
196 await uploadVideo(servers[0].url, servers[0].accessToken, attributes)
189 197
190 it('Should list my new unlisted video', async function () { 198 await waitJobs(servers)
191 const res = await getMyVideos(servers[0].url, servers[0].accessToken, 0, 3) 199 })
192 200
193 expect(res.body.total).to.equal(3) 201 it('Should list my new unlisted video', async function () {
194 expect(res.body.data).to.have.lengthOf(3) 202 const res = await getMyVideos(servers[0].url, servers[0].accessToken, 0, 3)
195 203
196 nonFederatedUnlistedVideoUUID = res.body.data[0].uuid 204 expect(res.body.total).to.equal(3)
197 }) 205 expect(res.body.data).to.have.lengthOf(3)
198 206
199 it('Should be able to get non-federated unlisted video from origin', async function () { 207 nonFederatedUnlistedVideoUUID = res.body.data[0].uuid
200 const res = await getVideo(servers[0].url, nonFederatedUnlistedVideoUUID) 208 })
201 209
202 expect(res.body.name).to.equal('unlisted video') 210 it('Should be able to get non-federated unlisted video from origin', async function () {
203 }) 211 const res = await getVideo(servers[0].url, nonFederatedUnlistedVideoUUID)
204 212
205 it('Should not be able to get non-federated unlisted video from federated server', async function () { 213 expect(res.body.name).to.equal('unlisted video')
206 await getVideo(servers[1].url, nonFederatedUnlistedVideoUUID, HttpStatusCode.NOT_FOUND_404) 214 })
215
216 it('Should not be able to get non-federated unlisted video from federated server', async function () {
217 await getVideo(servers[1].url, nonFederatedUnlistedVideoUUID, HttpStatusCode.NOT_FOUND_404)
218 })
207 }) 219 })
208 220
209 it('Should update the private and internal videos to public on server 1', async function () { 221 describe('Privacy update', function () {
210 this.timeout(10000)
211 222
212 now = Date.now() 223 it('Should update the private and internal videos to public on server 1', async function () {
224 this.timeout(10000)
213 225
214 { 226 now = Date.now()
215 const attribute = {
216 name: 'private video becomes public',
217 privacy: VideoPrivacy.PUBLIC
218 }
219 227
220 await updateVideo(servers[0].url, servers[0].accessToken, privateVideoId, attribute) 228 {
221 } 229 const attribute = {
230 name: 'private video becomes public',
231 privacy: VideoPrivacy.PUBLIC
232 }
222 233
223 { 234 await updateVideo(servers[0].url, servers[0].accessToken, privateVideoId, attribute)
224 const attribute = {
225 name: 'internal video becomes public',
226 privacy: VideoPrivacy.PUBLIC
227 } 235 }
228 await updateVideo(servers[0].url, servers[0].accessToken, internalVideoId, attribute)
229 }
230 236
231 await waitJobs(servers) 237 {
232 }) 238 const attribute = {
239 name: 'internal video becomes public',
240 privacy: VideoPrivacy.PUBLIC
241 }
242 await updateVideo(servers[0].url, servers[0].accessToken, internalVideoId, attribute)
243 }
233 244
234 it('Should have this new public video listed on server 1 and 2', async function () { 245 await waitJobs(servers)
235 for (const server of servers) { 246 })
236 const res = await getVideosList(server.url)
237 expect(res.body.total).to.equal(2)
238 expect(res.body.data).to.have.lengthOf(2)
239 247
240 const videos: Video[] = res.body.data 248 it('Should have this new public video listed on server 1 and 2', async function () {
241 const privateVideo = videos.find(v => v.name === 'private video becomes public') 249 for (const server of servers) {
242 const internalVideo = videos.find(v => v.name === 'internal video becomes public') 250 const res = await getVideosList(server.url)
251 expect(res.body.total).to.equal(2)
252 expect(res.body.data).to.have.lengthOf(2)
243 253
244 expect(privateVideo).to.not.be.undefined 254 const videos: Video[] = res.body.data
245 expect(internalVideo).to.not.be.undefined 255 const privateVideo = videos.find(v => v.name === 'private video becomes public')
256 const internalVideo = videos.find(v => v.name === 'internal video becomes public')
246 257
247 expect(new Date(privateVideo.publishedAt).getTime()).to.be.at.least(now) 258 expect(privateVideo).to.not.be.undefined
248 // We don't change the publish date of internal videos 259 expect(internalVideo).to.not.be.undefined
249 expect(new Date(internalVideo.publishedAt).getTime()).to.be.below(now)
250 260
251 expect(privateVideo.privacy.id).to.equal(VideoPrivacy.PUBLIC) 261 expect(new Date(privateVideo.publishedAt).getTime()).to.be.at.least(now)
252 expect(internalVideo.privacy.id).to.equal(VideoPrivacy.PUBLIC) 262 // We don't change the publish date of internal videos
253 } 263 expect(new Date(internalVideo.publishedAt).getTime()).to.be.below(now)
254 })
255 264
256 it('Should set these videos as private and internal', async function () { 265 expect(privateVideo.privacy.id).to.equal(VideoPrivacy.PUBLIC)
257 this.timeout(10000) 266 expect(internalVideo.privacy.id).to.equal(VideoPrivacy.PUBLIC)
267 }
268 })
258 269
259 await updateVideo(servers[0].url, servers[0].accessToken, internalVideoId, { privacy: VideoPrivacy.PRIVATE }) 270 it('Should set these videos as private and internal', async function () {
260 await updateVideo(servers[0].url, servers[0].accessToken, privateVideoId, { privacy: VideoPrivacy.INTERNAL }) 271 this.timeout(10000)
261 272
262 await waitJobs(servers) 273 await updateVideo(servers[0].url, servers[0].accessToken, internalVideoId, { privacy: VideoPrivacy.PRIVATE })
274 await updateVideo(servers[0].url, servers[0].accessToken, privateVideoId, { privacy: VideoPrivacy.INTERNAL })
263 275
264 for (const server of servers) { 276 await waitJobs(servers)
265 const res = await getVideosList(server.url)
266 277
267 expect(res.body.total).to.equal(0) 278 for (const server of servers) {
268 expect(res.body.data).to.have.lengthOf(0) 279 const res = await getVideosList(server.url)
269 } 280
281 expect(res.body.total).to.equal(0)
282 expect(res.body.data).to.have.lengthOf(0)
283 }
270 284
271 { 285 {
272 const res = await getMyVideos(servers[0].url, servers[0].accessToken, 0, 5) 286 const res = await getMyVideos(servers[0].url, servers[0].accessToken, 0, 5)
273 const videos = res.body.data 287 const videos = res.body.data
274 288
275 expect(res.body.total).to.equal(3) 289 expect(res.body.total).to.equal(3)
276 expect(videos).to.have.lengthOf(3) 290 expect(videos).to.have.lengthOf(3)
277 291
278 const privateVideo = videos.find(v => v.name === 'private video becomes public') 292 const privateVideo = videos.find(v => v.name === 'private video becomes public')
279 const internalVideo = videos.find(v => v.name === 'internal video becomes public') 293 const internalVideo = videos.find(v => v.name === 'internal video becomes public')
280 294
281 expect(privateVideo).to.not.be.undefined 295 expect(privateVideo).to.not.be.undefined
282 expect(internalVideo).to.not.be.undefined 296 expect(internalVideo).to.not.be.undefined
283 297
284 expect(privateVideo.privacy.id).to.equal(VideoPrivacy.INTERNAL) 298 expect(privateVideo.privacy.id).to.equal(VideoPrivacy.INTERNAL)
285 expect(internalVideo.privacy.id).to.equal(VideoPrivacy.PRIVATE) 299 expect(internalVideo.privacy.id).to.equal(VideoPrivacy.PRIVATE)
286 } 300 }
301 })
287 }) 302 })
288 303
289 after(async function () { 304 after(async function () {