123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328 |
- /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
- import { expect } from 'chai'
- import {
- ChangeOwnershipCommand,
- cleanupTests,
- createMultipleServers,
- createSingleServer,
- doubleFollow,
- PeerTubeServer,
- setAccessTokensToServers,
- setDefaultVideoChannel,
- waitJobs
- } from '@shared/server-commands'
- import { HttpStatusCode, VideoPrivacy } from '@shared/models'
- describe('Test video change ownership - nominal', function () {
- let servers: PeerTubeServer[] = []
- const firstUser = 'first'
- const secondUser = 'second'
- let firstUserToken = ''
- let firstUserChannelId: number
- let secondUserToken = ''
- let secondUserChannelId: number
- let lastRequestId: number
- let liveId: number
- let command: ChangeOwnershipCommand
- before(async function () {
- this.timeout(50000)
- servers = await createMultipleServers(2)
- await setAccessTokensToServers(servers)
- await setDefaultVideoChannel(servers)
- await servers[0].config.updateCustomSubConfig({
- newConfig: {
- transcoding: {
- enabled: false
- },
- live: {
- enabled: true
- }
- }
- })
- firstUserToken = await servers[0].users.generateUserAndToken(firstUser)
- secondUserToken = await servers[0].users.generateUserAndToken(secondUser)
- {
- const { videoChannels } = await servers[0].users.getMyInfo({ token: firstUserToken })
- firstUserChannelId = videoChannels[0].id
- }
- {
- const { videoChannels } = await servers[0].users.getMyInfo({ token: secondUserToken })
- secondUserChannelId = videoChannels[0].id
- }
- {
- const attributes = {
- name: 'my super name',
- description: 'my super description'
- }
- const { id } = await servers[0].videos.upload({ token: firstUserToken, attributes })
- servers[0].store.videoCreated = await servers[0].videos.get({ id })
- }
- {
- const attributes = { name: 'live', channelId: firstUserChannelId, privacy: VideoPrivacy.PUBLIC }
- const video = await servers[0].live.create({ token: firstUserToken, fields: attributes })
- liveId = video.id
- }
- command = servers[0].changeOwnership
- await doubleFollow(servers[0], servers[1])
- })
- it('Should not have video change ownership', async function () {
- {
- const body = await command.list({ token: firstUserToken })
- expect(body.total).to.equal(0)
- expect(body.data).to.be.an('array')
- expect(body.data.length).to.equal(0)
- }
- {
- const body = await command.list({ token: secondUserToken })
- expect(body.total).to.equal(0)
- expect(body.data).to.be.an('array')
- expect(body.data.length).to.equal(0)
- }
- })
- it('Should send a request to change ownership of a video', async function () {
- this.timeout(15000)
- await command.create({ token: firstUserToken, videoId: servers[0].store.videoCreated.id, username: secondUser })
- })
- it('Should only return a request to change ownership for the second user', async function () {
- {
- const body = await command.list({ token: firstUserToken })
- expect(body.total).to.equal(0)
- expect(body.data).to.be.an('array')
- expect(body.data.length).to.equal(0)
- }
- {
- const body = await command.list({ token: secondUserToken })
- expect(body.total).to.equal(1)
- expect(body.data).to.be.an('array')
- expect(body.data.length).to.equal(1)
- lastRequestId = body.data[0].id
- }
- })
- it('Should accept the same change ownership request without crashing', async function () {
- this.timeout(10000)
- await command.create({ token: firstUserToken, videoId: servers[0].store.videoCreated.id, username: secondUser })
- })
- it('Should not create multiple change ownership requests while one is waiting', async function () {
- this.timeout(10000)
- const body = await command.list({ token: secondUserToken })
- expect(body.total).to.equal(1)
- expect(body.data).to.be.an('array')
- expect(body.data.length).to.equal(1)
- })
- it('Should not be possible to refuse the change of ownership from first user', async function () {
- this.timeout(10000)
- await command.refuse({ token: firstUserToken, ownershipId: lastRequestId, expectedStatus: HttpStatusCode.FORBIDDEN_403 })
- })
- it('Should be possible to refuse the change of ownership from second user', async function () {
- this.timeout(10000)
- await command.refuse({ token: secondUserToken, ownershipId: lastRequestId })
- })
- it('Should send a new request to change ownership of a video', async function () {
- this.timeout(15000)
- await command.create({ token: firstUserToken, videoId: servers[0].store.videoCreated.id, username: secondUser })
- })
- it('Should return two requests to change ownership for the second user', async function () {
- {
- const body = await command.list({ token: firstUserToken })
- expect(body.total).to.equal(0)
- expect(body.data).to.be.an('array')
- expect(body.data.length).to.equal(0)
- }
- {
- const body = await command.list({ token: secondUserToken })
- expect(body.total).to.equal(2)
- expect(body.data).to.be.an('array')
- expect(body.data.length).to.equal(2)
- lastRequestId = body.data[0].id
- }
- })
- it('Should not be possible to accept the change of ownership from first user', async function () {
- this.timeout(10000)
- await command.accept({
- token: firstUserToken,
- ownershipId: lastRequestId,
- channelId: secondUserChannelId,
- expectedStatus: HttpStatusCode.FORBIDDEN_403
- })
- })
- it('Should be possible to accept the change of ownership from second user', async function () {
- this.timeout(10000)
- await command.accept({ token: secondUserToken, ownershipId: lastRequestId, channelId: secondUserChannelId })
- await waitJobs(servers)
- })
- it('Should have the channel of the video updated', async function () {
- for (const server of servers) {
- const video = await server.videos.get({ id: servers[0].store.videoCreated.uuid })
- expect(video.name).to.equal('my super name')
- expect(video.channel.displayName).to.equal('Main second channel')
- expect(video.channel.name).to.equal('second_channel')
- }
- })
- it('Should send a request to change ownership of a live', async function () {
- this.timeout(15000)
- await command.create({ token: firstUserToken, videoId: liveId, username: secondUser })
- const body = await command.list({ token: secondUserToken })
- expect(body.total).to.equal(3)
- expect(body.data.length).to.equal(3)
- lastRequestId = body.data[0].id
- })
- it('Should accept a live ownership change', async function () {
- this.timeout(20000)
- await command.accept({ token: secondUserToken, ownershipId: lastRequestId, channelId: secondUserChannelId })
- await waitJobs(servers)
- for (const server of servers) {
- const video = await server.videos.get({ id: servers[0].store.videoCreated.uuid })
- expect(video.name).to.equal('my super name')
- expect(video.channel.displayName).to.equal('Main second channel')
- expect(video.channel.name).to.equal('second_channel')
- }
- })
- after(async function () {
- await cleanupTests(servers)
- })
- })
- describe('Test video change ownership - quota too small', function () {
- let server: PeerTubeServer
- const firstUser = 'first'
- const secondUser = 'second'
- let firstUserToken = ''
- let secondUserToken = ''
- let lastRequestId: number
- before(async function () {
- this.timeout(50000)
- // Run one server
- server = await createSingleServer(1)
- await setAccessTokensToServers([ server ])
- await server.users.create({ username: secondUser, videoQuota: 10 })
- firstUserToken = await server.users.generateUserAndToken(firstUser)
- secondUserToken = await server.login.getAccessToken(secondUser)
- // Upload some videos on the server
- const attributes = {
- name: 'my super name',
- description: 'my super description'
- }
- await server.videos.upload({ token: firstUserToken, attributes })
- await waitJobs(server)
- const { data } = await server.videos.list()
- expect(data.length).to.equal(1)
- server.store.videoCreated = data.find(video => video.name === 'my super name')
- })
- it('Should send a request to change ownership of a video', async function () {
- this.timeout(15000)
- await server.changeOwnership.create({ token: firstUserToken, videoId: server.store.videoCreated.id, username: secondUser })
- })
- it('Should only return a request to change ownership for the second user', async function () {
- {
- const body = await server.changeOwnership.list({ token: firstUserToken })
- expect(body.total).to.equal(0)
- expect(body.data).to.be.an('array')
- expect(body.data.length).to.equal(0)
- }
- {
- const body = await server.changeOwnership.list({ token: secondUserToken })
- expect(body.total).to.equal(1)
- expect(body.data).to.be.an('array')
- expect(body.data.length).to.equal(1)
- lastRequestId = body.data[0].id
- }
- })
- it('Should not be possible to accept the change of ownership from second user because of exceeded quota', async function () {
- this.timeout(10000)
- const { videoChannels } = await server.users.getMyInfo({ token: secondUserToken })
- const channelId = videoChannels[0].id
- await server.changeOwnership.accept({
- token: secondUserToken,
- ownershipId: lastRequestId,
- channelId,
- expectedStatus: HttpStatusCode.PAYLOAD_TOO_LARGE_413
- })
- })
- after(async function () {
- await cleanupTests([ server ])
- })
- })
|