1 /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
3 import * as chai from 'chai'
11 flushAndRunMultipleServers,
15 getVideoChangeOwnershipList,
17 refuseChangeOwnership,
19 setAccessTokensToServers,
22 } from '../../../../shared/extra-utils'
23 import { waitJobs } from '../../../../shared/extra-utils/server/jobs'
24 import { User } from '../../../../shared/models/users'
25 import { VideoDetails } from '../../../../shared/models/videos'
27 const expect = chai.expect
29 describe('Test video change ownership - nominal', function () {
30 let servers: ServerInfo[] = []
33 password: 'My great password'
37 password: 'My other password'
39 let firstUserAccessToken = ''
40 let secondUserAccessToken = ''
41 let lastRequestChangeOwnershipId = ''
43 before(async function () {
46 servers = await flushAndRunMultipleServers(2)
47 await setAccessTokensToServers(servers)
49 const videoQuota = 42000000
52 accessToken: servers[0].accessToken,
53 username: firstUser.username,
54 password: firstUser.password,
55 videoQuota: videoQuota
59 accessToken: servers[0].accessToken,
60 username: secondUser.username,
61 password: secondUser.password,
62 videoQuota: videoQuota
65 firstUserAccessToken = await userLogin(servers[0], firstUser)
66 secondUserAccessToken = await userLogin(servers[0], secondUser)
68 const videoAttributes = {
69 name: 'my super name',
70 description: 'my super description'
72 await uploadVideo(servers[0].url, firstUserAccessToken, videoAttributes)
74 await waitJobs(servers)
76 const res = await getVideosList(servers[0].url)
77 const videos = res.body.data
79 expect(videos.length).to.equal(1)
81 const video = videos.find(video => video.name === 'my super name')
82 expect(video.channel.name).to.equal('first_channel')
83 servers[0].video = video
85 await doubleFollow(servers[0], servers[1])
88 it('Should not have video change ownership', async function () {
89 const resFirstUser = await getVideoChangeOwnershipList(servers[0].url, firstUserAccessToken)
91 expect(resFirstUser.body.total).to.equal(0)
92 expect(resFirstUser.body.data).to.be.an('array')
93 expect(resFirstUser.body.data.length).to.equal(0)
95 const resSecondUser = await getVideoChangeOwnershipList(servers[0].url, secondUserAccessToken)
97 expect(resSecondUser.body.total).to.equal(0)
98 expect(resSecondUser.body.data).to.be.an('array')
99 expect(resSecondUser.body.data.length).to.equal(0)
102 it('Should send a request to change ownership of a video', async function () {
105 await changeVideoOwnership(servers[0].url, firstUserAccessToken, servers[0].video.id, secondUser.username)
108 it('Should only return a request to change ownership for the second user', async function () {
109 const resFirstUser = await getVideoChangeOwnershipList(servers[0].url, firstUserAccessToken)
111 expect(resFirstUser.body.total).to.equal(0)
112 expect(resFirstUser.body.data).to.be.an('array')
113 expect(resFirstUser.body.data.length).to.equal(0)
115 const resSecondUser = await getVideoChangeOwnershipList(servers[0].url, secondUserAccessToken)
117 expect(resSecondUser.body.total).to.equal(1)
118 expect(resSecondUser.body.data).to.be.an('array')
119 expect(resSecondUser.body.data.length).to.equal(1)
121 lastRequestChangeOwnershipId = resSecondUser.body.data[0].id
124 it('Should accept the same change ownership request without crashing', async function () {
127 await changeVideoOwnership(servers[0].url, firstUserAccessToken, servers[0].video.id, secondUser.username)
130 it('Should not create multiple change ownership requests while one is waiting', async function () {
133 const resSecondUser = await getVideoChangeOwnershipList(servers[0].url, secondUserAccessToken)
135 expect(resSecondUser.body.total).to.equal(1)
136 expect(resSecondUser.body.data).to.be.an('array')
137 expect(resSecondUser.body.data.length).to.equal(1)
140 it('Should not be possible to refuse the change of ownership from first user', async function () {
143 await refuseChangeOwnership(servers[0].url, firstUserAccessToken, lastRequestChangeOwnershipId, 403)
146 it('Should be possible to refuse the change of ownership from second user', async function () {
149 await refuseChangeOwnership(servers[0].url, secondUserAccessToken, lastRequestChangeOwnershipId)
152 it('Should send a new request to change ownership of a video', async function () {
155 await changeVideoOwnership(servers[0].url, firstUserAccessToken, servers[0].video.id, secondUser.username)
158 it('Should return two requests to change ownership for the second user', async function () {
159 const resFirstUser = await getVideoChangeOwnershipList(servers[0].url, firstUserAccessToken)
161 expect(resFirstUser.body.total).to.equal(0)
162 expect(resFirstUser.body.data).to.be.an('array')
163 expect(resFirstUser.body.data.length).to.equal(0)
165 const resSecondUser = await getVideoChangeOwnershipList(servers[0].url, secondUserAccessToken)
167 expect(resSecondUser.body.total).to.equal(2)
168 expect(resSecondUser.body.data).to.be.an('array')
169 expect(resSecondUser.body.data.length).to.equal(2)
171 lastRequestChangeOwnershipId = resSecondUser.body.data[0].id
174 it('Should not be possible to accept the change of ownership from first user', async function () {
177 const secondUserInformationResponse = await getMyUserInformation(servers[0].url, secondUserAccessToken)
178 const secondUserInformation: User = secondUserInformationResponse.body
179 const channelId = secondUserInformation.videoChannels[0].id
180 await acceptChangeOwnership(servers[0].url, firstUserAccessToken, lastRequestChangeOwnershipId, channelId, 403)
183 it('Should be possible to accept the change of ownership from second user', async function () {
186 const secondUserInformationResponse = await getMyUserInformation(servers[0].url, secondUserAccessToken)
187 const secondUserInformation: User = secondUserInformationResponse.body
188 const channelId = secondUserInformation.videoChannels[0].id
189 await acceptChangeOwnership(servers[0].url, secondUserAccessToken, lastRequestChangeOwnershipId, channelId)
191 await waitJobs(servers)
194 it('Should have the channel of the video updated', async function () {
195 for (const server of servers) {
196 const res = await getVideo(server.url, servers[0].video.uuid)
198 const video: VideoDetails = res.body
200 expect(video.name).to.equal('my super name')
201 expect(video.channel.displayName).to.equal('Main second channel')
202 expect(video.channel.name).to.equal('second_channel')
206 after(async function () {
207 await cleanupTests(servers)
211 describe('Test video change ownership - quota too small', function () {
212 let server: ServerInfo
215 password: 'My great password'
219 password: 'My other password'
221 let firstUserAccessToken = ''
222 let secondUserAccessToken = ''
223 let lastRequestChangeOwnershipId = ''
225 before(async function () {
229 server = await flushAndRunServer(1)
230 await setAccessTokensToServers([ server ])
232 const videoQuota = 42000000
233 const limitedVideoQuota = 10
236 accessToken: server.accessToken,
237 username: firstUser.username,
238 password: firstUser.password,
239 videoQuota: videoQuota
243 accessToken: server.accessToken,
244 username: secondUser.username,
245 password: secondUser.password,
246 videoQuota: limitedVideoQuota
249 firstUserAccessToken = await userLogin(server, firstUser)
250 secondUserAccessToken = await userLogin(server, secondUser)
252 // Upload some videos on the server
253 const video1Attributes = {
254 name: 'my super name',
255 description: 'my super description'
257 await uploadVideo(server.url, firstUserAccessToken, video1Attributes)
259 await waitJobs(server)
261 const res = await getVideosList(server.url)
262 const videos = res.body.data
264 expect(videos.length).to.equal(1)
266 server.video = videos.find(video => video.name === 'my super name')
269 it('Should send a request to change ownership of a video', async function () {
272 await changeVideoOwnership(server.url, firstUserAccessToken, server.video.id, secondUser.username)
275 it('Should only return a request to change ownership for the second user', async function () {
276 const resFirstUser = await getVideoChangeOwnershipList(server.url, firstUserAccessToken)
278 expect(resFirstUser.body.total).to.equal(0)
279 expect(resFirstUser.body.data).to.be.an('array')
280 expect(resFirstUser.body.data.length).to.equal(0)
282 const resSecondUser = await getVideoChangeOwnershipList(server.url, secondUserAccessToken)
284 expect(resSecondUser.body.total).to.equal(1)
285 expect(resSecondUser.body.data).to.be.an('array')
286 expect(resSecondUser.body.data.length).to.equal(1)
288 lastRequestChangeOwnershipId = resSecondUser.body.data[0].id
291 it('Should not be possible to accept the change of ownership from second user because of exceeded quota', async function () {
294 const secondUserInformationResponse = await getMyUserInformation(server.url, secondUserAccessToken)
295 const secondUserInformation: User = secondUserInformationResponse.body
296 const channelId = secondUserInformation.videoChannels[0].id
297 await acceptChangeOwnership(server.url, secondUserAccessToken, lastRequestChangeOwnershipId, channelId, 403)
300 after(async function () {
301 await cleanupTests([ server ])