/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
-import * as chai from 'chai'
import 'mocha'
+import * as chai from 'chai'
+import { HttpStatusCode } from '@shared/core-utils'
import {
+ addAccountToAccountBlocklist,
+ addAccountToServerBlocklist,
+ addServerToAccountBlocklist,
+ addServerToServerBlocklist,
addVideoChannel,
addVideoInPlaylist,
addVideoToBlacklist,
getVideoPlaylistPrivacies,
getVideoPlaylistsList,
getVideoPlaylistWithToken,
+ removeAccountFromAccountBlocklist,
+ removeAccountFromServerBlocklist,
+ removeServerFromAccountBlocklist,
+ removeServerFromServerBlocklist,
removeUser,
removeVideoFromBlacklist,
removeVideoFromPlaylist,
setAccessTokensToServers,
setDefaultVideoChannel,
testImage,
- unfollow,
updateVideo,
updateVideoPlaylist,
updateVideoPlaylistElement,
uploadVideo,
uploadVideoAndGetId,
userLogin,
+ wait,
waitJobs
-} from '../../../../shared/extra-utils'
-import { VideoPlaylistPrivacy } from '../../../../shared/models/videos/playlist/video-playlist-privacy.model'
-import { VideoPlaylist } from '../../../../shared/models/videos/playlist/video-playlist.model'
-import { VideoPrivacy } from '../../../../shared/models/videos'
-import { VideoPlaylistType } from '../../../../shared/models/videos/playlist/video-playlist-type.model'
-import { VideoExistInPlaylist } from '../../../../shared/models/videos/playlist/video-exist-in-playlist.model'
-import { User } from '../../../../shared/models/users'
-import { VideoPlaylistElement, VideoPlaylistElementType } from '../../../../shared/models/videos/playlist/video-playlist-element.model'
+} from '@shared/extra-utils'
import {
- addAccountToAccountBlocklist,
- addAccountToServerBlocklist,
- addServerToAccountBlocklist,
- addServerToServerBlocklist,
- removeAccountFromAccountBlocklist,
- removeAccountFromServerBlocklist,
- removeServerFromAccountBlocklist,
- removeServerFromServerBlocklist
-} from '../../../../shared/extra-utils/users/blocklist'
+ User,
+ VideoExistInPlaylist,
+ VideoPlaylist,
+ VideoPlaylistCreateResult,
+ VideoPlaylistElement,
+ VideoPlaylistElementType,
+ VideoPlaylistPrivacy,
+ VideoPlaylistType,
+ VideoPrivacy
+} from '@shared/models'
const expect = chai.expect
await doubleFollow(servers[0], servers[2])
{
- const serverPromises: Promise<any>[][] = []
+ servers[0].videos = []
+ servers[1].videos = []
+ servers[2].videos = []
for (const server of servers) {
- const videoPromises: Promise<any>[] = []
-
for (let i = 0; i < 7; i++) {
- videoPromises.push(
- uploadVideo(server.url, server.accessToken, { name: `video ${i} server ${server.serverNumber}`, nsfw: false })
- .then(res => res.body.video)
- )
- }
+ const name = `video ${i} server ${server.serverNumber}`
+ const resVideo = await uploadVideo(server.url, server.accessToken, { name, nsfw: false })
- serverPromises.push(videoPromises)
+ server.videos.push(resVideo.body.video)
+ }
}
-
- servers[0].videos = await Promise.all(serverPromises[0])
- servers[1].videos = await Promise.all(serverPromises[1])
- servers[2].videos = await Promise.all(serverPromises[2])
}
nsfwVideoServer1 = (await uploadVideoAndGetId({ server: servers[0], videoName: 'NSFW video', nsfw: true })).id
})
await waitJobs(servers)
+ // Processing a playlist by the receiver could be long
+ await wait(3000)
for (const server of servers) {
const res = await getVideoPlaylistsList(server.url, 0, 5)
}
await waitJobs(servers)
+ await wait(3000)
for (const server of [ servers[0], servers[1] ]) {
const res = await getVideoPlaylistsList(server.url, 0, 5)
expect(data).to.have.lengthOf(0)
}
})
+ })
- it('Should not list unlisted or private playlists', async function () {
+ describe('Playlist rights', function () {
+ let unlistedPlaylist: VideoPlaylistCreateResult
+ let privatePlaylist: VideoPlaylistCreateResult
+
+ before(async function () {
this.timeout(30000)
- await createVideoPlaylist({
- url: servers[1].url,
- token: servers[1].accessToken,
- playlistAttrs: {
- displayName: 'playlist unlisted',
- privacy: VideoPlaylistPrivacy.UNLISTED
- }
- })
+ {
+ const res = await createVideoPlaylist({
+ url: servers[1].url,
+ token: servers[1].accessToken,
+ playlistAttrs: {
+ displayName: 'playlist unlisted',
+ privacy: VideoPlaylistPrivacy.UNLISTED,
+ videoChannelId: servers[1].videoChannel.id
+ }
+ })
+ unlistedPlaylist = res.body.videoPlaylist
+ }
- await createVideoPlaylist({
- url: servers[1].url,
- token: servers[1].accessToken,
- playlistAttrs: {
- displayName: 'playlist private',
- privacy: VideoPlaylistPrivacy.PRIVATE
- }
- })
+ {
+ const res = await createVideoPlaylist({
+ url: servers[1].url,
+ token: servers[1].accessToken,
+ playlistAttrs: {
+ displayName: 'playlist private',
+ privacy: VideoPlaylistPrivacy.PRIVATE
+ }
+ })
+ privatePlaylist = res.body.videoPlaylist
+ }
await waitJobs(servers)
+ await wait(3000)
+ })
+ it('Should not list unlisted or private playlists', async function () {
for (const server of servers) {
const results = [
await getAccountPlaylistsList(server.url, 'root@localhost:' + servers[1].port, 0, 5, '-createdAt'),
}
}
})
+
+ it('Should not get unlisted playlist using only the id', async function () {
+ await getVideoPlaylist(servers[1].url, unlistedPlaylist.id, 404)
+ })
+
+ it('Should get unlisted plyaylist using uuid or shortUUID', async function () {
+ await getVideoPlaylist(servers[1].url, unlistedPlaylist.uuid)
+ await getVideoPlaylist(servers[1].url, unlistedPlaylist.shortUUID)
+ })
+
+ it('Should not get private playlist without token', async function () {
+ for (const id of [ privatePlaylist.id, privatePlaylist.uuid, privatePlaylist.shortUUID ]) {
+ await getVideoPlaylist(servers[1].url, id, 401)
+ }
+ })
+
+ it('Should get private playlist with a token', async function () {
+ for (const id of [ privatePlaylist.id, privatePlaylist.uuid, privatePlaylist.shortUUID ]) {
+ await getVideoPlaylistWithToken(servers[1].url, servers[1].accessToken, id)
+ }
+ })
})
describe('Update playlists', function () {
await waitJobs(servers)
for (const server of servers) {
- await getVideoPlaylist(server.url, videoPlaylistIds.uuid, 200)
+ await getVideoPlaylist(server.url, videoPlaylistIds.uuid, HttpStatusCode.OK_200)
}
const playlistAttrs = { privacy: VideoPlaylistPrivacy.PRIVATE }
await waitJobs(servers)
for (const server of [ servers[1], servers[2] ]) {
- await getVideoPlaylist(server.url, videoPlaylistIds.uuid, 404)
+ await getVideoPlaylist(server.url, videoPlaylistIds.uuid, HttpStatusCode.NOT_FOUND_404)
}
- await getVideoPlaylist(servers[0].url, videoPlaylistIds.uuid, 401)
+ await getVideoPlaylist(servers[0].url, videoPlaylistIds.uuid, HttpStatusCode.UNAUTHORIZED_401)
- await getVideoPlaylistWithToken(servers[0].url, servers[0].accessToken, videoPlaylistIds.uuid, 200)
+ await getVideoPlaylistWithToken(servers[0].url, servers[0].accessToken, videoPlaylistIds.uuid, HttpStatusCode.OK_200)
})
})
await waitJobs(servers)
for (const server of servers) {
- await getVideoPlaylist(server.url, playlistServer1UUID, 404)
+ await getVideoPlaylist(server.url, playlistServer1UUID, HttpStatusCode.NOT_FOUND_404)
}
})
expect(finder(res.body.data)).to.not.be.undefined
}
- await unfollow(servers[2].url, servers[2].accessToken, servers[0])
+ await servers[2].followsCommand.unfollow({ target: servers[0] })
{
const res = await getVideoPlaylistsList(servers[2].url, 0, 5)
expect(res3.body.displayName).to.equal('channel playlist')
expect(res3.body.privacy.id).to.equal(VideoPlaylistPrivacy.PRIVATE)
- await getVideoPlaylist(servers[1].url, videoPlaylistUUID, 404)
+ await getVideoPlaylist(servers[1].url, videoPlaylistUUID, HttpStatusCode.NOT_FOUND_404)
})
it('Should delete an account and delete its playlists', async function () {