2020-01-31 16:56:52 +01:00
|
|
|
/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
|
2019-08-01 16:54:24 +02:00
|
|
|
|
|
|
|
import * as chai from 'chai'
|
|
|
|
import 'mocha'
|
|
|
|
import {
|
|
|
|
addVideoInPlaylist,
|
|
|
|
cleanupTests,
|
|
|
|
createVideoPlaylist,
|
|
|
|
doubleFollow,
|
|
|
|
flushAndRunMultipleServers,
|
2020-01-31 16:56:52 +01:00
|
|
|
getVideoPlaylistsList,
|
|
|
|
removeVideoFromPlaylist,
|
|
|
|
reorderVideosPlaylist,
|
2019-08-01 16:54:24 +02:00
|
|
|
ServerInfo,
|
|
|
|
setAccessTokensToServers,
|
|
|
|
setDefaultVideoChannel,
|
|
|
|
testImage,
|
|
|
|
uploadVideoAndGetId,
|
2020-01-31 16:56:52 +01:00
|
|
|
waitJobs
|
2019-08-01 16:54:24 +02:00
|
|
|
} from '../../../../shared/extra-utils'
|
|
|
|
import { VideoPlaylistPrivacy } from '../../../../shared/models/videos/playlist/video-playlist-privacy.model'
|
|
|
|
|
|
|
|
const expect = chai.expect
|
|
|
|
|
|
|
|
describe('Playlist thumbnail', function () {
|
|
|
|
let servers: ServerInfo[] = []
|
|
|
|
|
|
|
|
let playlistWithoutThumbnail: number
|
|
|
|
let playlistWithThumbnail: number
|
|
|
|
|
|
|
|
let withThumbnailE1: number
|
|
|
|
let withThumbnailE2: number
|
|
|
|
let withoutThumbnailE1: number
|
|
|
|
let withoutThumbnailE2: number
|
|
|
|
|
|
|
|
let video1: number
|
|
|
|
let video2: number
|
|
|
|
|
|
|
|
async function getPlaylistWithoutThumbnail (server: ServerInfo) {
|
|
|
|
const res = await getVideoPlaylistsList(server.url, 0, 10)
|
|
|
|
|
|
|
|
return res.body.data.find(p => p.displayName === 'playlist without thumbnail')
|
|
|
|
}
|
|
|
|
|
|
|
|
async function getPlaylistWithThumbnail (server: ServerInfo) {
|
|
|
|
const res = await getVideoPlaylistsList(server.url, 0, 10)
|
|
|
|
|
|
|
|
return res.body.data.find(p => p.displayName === 'playlist with thumbnail')
|
|
|
|
}
|
|
|
|
|
|
|
|
before(async function () {
|
|
|
|
this.timeout(120000)
|
|
|
|
|
|
|
|
servers = await flushAndRunMultipleServers(2, { transcoding: { enabled: false } })
|
|
|
|
|
|
|
|
// Get the access tokens
|
|
|
|
await setAccessTokensToServers(servers)
|
|
|
|
await setDefaultVideoChannel(servers)
|
|
|
|
|
|
|
|
// Server 1 and server 2 follow each other
|
|
|
|
await doubleFollow(servers[0], servers[1])
|
|
|
|
|
|
|
|
video1 = (await uploadVideoAndGetId({ server: servers[0], videoName: 'video 1' })).id
|
|
|
|
video2 = (await uploadVideoAndGetId({ server: servers[0], videoName: 'video 2' })).id
|
|
|
|
|
|
|
|
await waitJobs(servers)
|
|
|
|
})
|
|
|
|
|
|
|
|
it('Should automatically update the thumbnail when adding an element', async function () {
|
|
|
|
this.timeout(30000)
|
|
|
|
|
|
|
|
const res = await createVideoPlaylist({
|
2020-01-31 16:56:52 +01:00
|
|
|
url: servers[1].url,
|
|
|
|
token: servers[1].accessToken,
|
2019-08-01 16:54:24 +02:00
|
|
|
playlistAttrs: {
|
|
|
|
displayName: 'playlist without thumbnail',
|
|
|
|
privacy: VideoPlaylistPrivacy.PUBLIC,
|
2020-01-31 16:56:52 +01:00
|
|
|
videoChannelId: servers[1].videoChannel.id
|
2019-08-01 16:54:24 +02:00
|
|
|
}
|
|
|
|
})
|
|
|
|
playlistWithoutThumbnail = res.body.videoPlaylist.id
|
|
|
|
|
|
|
|
const res2 = await addVideoInPlaylist({
|
2020-01-31 16:56:52 +01:00
|
|
|
url: servers[1].url,
|
|
|
|
token: servers[1].accessToken,
|
2019-08-01 16:54:24 +02:00
|
|
|
playlistId: playlistWithoutThumbnail,
|
|
|
|
elementAttrs: { videoId: video1 }
|
|
|
|
})
|
|
|
|
withoutThumbnailE1 = res2.body.videoPlaylistElement.id
|
|
|
|
|
|
|
|
await waitJobs(servers)
|
|
|
|
|
|
|
|
for (const server of servers) {
|
|
|
|
const p = await getPlaylistWithoutThumbnail(server)
|
|
|
|
await testImage(server.url, 'thumbnail-playlist', p.thumbnailPath)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
it('Should not update the thumbnail if we explicitly uploaded a thumbnail', async function () {
|
|
|
|
this.timeout(30000)
|
|
|
|
|
|
|
|
const res = await createVideoPlaylist({
|
2020-01-31 16:56:52 +01:00
|
|
|
url: servers[1].url,
|
|
|
|
token: servers[1].accessToken,
|
2019-08-01 16:54:24 +02:00
|
|
|
playlistAttrs: {
|
|
|
|
displayName: 'playlist with thumbnail',
|
|
|
|
privacy: VideoPlaylistPrivacy.PUBLIC,
|
2020-01-31 16:56:52 +01:00
|
|
|
videoChannelId: servers[1].videoChannel.id,
|
2019-08-01 16:54:24 +02:00
|
|
|
thumbnailfile: 'thumbnail.jpg'
|
|
|
|
}
|
|
|
|
})
|
|
|
|
playlistWithThumbnail = res.body.videoPlaylist.id
|
|
|
|
|
|
|
|
const res2 = await addVideoInPlaylist({
|
2020-01-31 16:56:52 +01:00
|
|
|
url: servers[1].url,
|
|
|
|
token: servers[1].accessToken,
|
2019-08-01 16:54:24 +02:00
|
|
|
playlistId: playlistWithThumbnail,
|
|
|
|
elementAttrs: { videoId: video1 }
|
|
|
|
})
|
|
|
|
withThumbnailE1 = res2.body.videoPlaylistElement.id
|
|
|
|
|
|
|
|
await waitJobs(servers)
|
|
|
|
|
|
|
|
for (const server of servers) {
|
|
|
|
const p = await getPlaylistWithThumbnail(server)
|
|
|
|
await testImage(server.url, 'thumbnail', p.thumbnailPath)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
it('Should automatically update the thumbnail when moving the first element', async function () {
|
|
|
|
this.timeout(30000)
|
|
|
|
|
|
|
|
const res = await addVideoInPlaylist({
|
2020-01-31 16:56:52 +01:00
|
|
|
url: servers[1].url,
|
|
|
|
token: servers[1].accessToken,
|
2019-08-01 16:54:24 +02:00
|
|
|
playlistId: playlistWithoutThumbnail,
|
|
|
|
elementAttrs: { videoId: video2 }
|
|
|
|
})
|
|
|
|
withoutThumbnailE2 = res.body.videoPlaylistElement.id
|
|
|
|
|
|
|
|
await reorderVideosPlaylist({
|
|
|
|
url: servers[1].url,
|
|
|
|
token: servers[1].accessToken,
|
|
|
|
playlistId: playlistWithoutThumbnail,
|
|
|
|
elementAttrs: {
|
|
|
|
startPosition: 1,
|
|
|
|
insertAfterPosition: 2
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
await waitJobs(servers)
|
|
|
|
|
|
|
|
for (const server of servers) {
|
|
|
|
const p = await getPlaylistWithoutThumbnail(server)
|
|
|
|
await testImage(server.url, 'thumbnail-playlist', p.thumbnailPath)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
it('Should not update the thumbnail when moving the first element if we explicitly uploaded a thumbnail', async function () {
|
|
|
|
this.timeout(30000)
|
|
|
|
|
|
|
|
const res = await addVideoInPlaylist({
|
2020-01-31 16:56:52 +01:00
|
|
|
url: servers[1].url,
|
|
|
|
token: servers[1].accessToken,
|
2019-08-01 16:54:24 +02:00
|
|
|
playlistId: playlistWithThumbnail,
|
|
|
|
elementAttrs: { videoId: video2 }
|
|
|
|
})
|
|
|
|
withThumbnailE2 = res.body.videoPlaylistElement.id
|
|
|
|
|
|
|
|
await reorderVideosPlaylist({
|
|
|
|
url: servers[1].url,
|
|
|
|
token: servers[1].accessToken,
|
|
|
|
playlistId: playlistWithThumbnail,
|
|
|
|
elementAttrs: {
|
|
|
|
startPosition: 1,
|
|
|
|
insertAfterPosition: 2
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
await waitJobs(servers)
|
|
|
|
|
|
|
|
for (const server of servers) {
|
|
|
|
const p = await getPlaylistWithThumbnail(server)
|
|
|
|
await testImage(server.url, 'thumbnail', p.thumbnailPath)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
it('Should automatically update the thumbnail when deleting the first element', async function () {
|
|
|
|
this.timeout(30000)
|
|
|
|
|
|
|
|
await removeVideoFromPlaylist({
|
2020-01-31 16:56:52 +01:00
|
|
|
url: servers[1].url,
|
|
|
|
token: servers[1].accessToken,
|
2019-08-01 16:54:24 +02:00
|
|
|
playlistId: playlistWithoutThumbnail,
|
|
|
|
playlistElementId: withoutThumbnailE1
|
|
|
|
})
|
|
|
|
|
|
|
|
await waitJobs(servers)
|
|
|
|
|
|
|
|
for (const server of servers) {
|
|
|
|
const p = await getPlaylistWithoutThumbnail(server)
|
|
|
|
await testImage(server.url, 'thumbnail-playlist', p.thumbnailPath)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
it('Should not update the thumbnail when deleting the first element if we explicitly uploaded a thumbnail', async function () {
|
|
|
|
this.timeout(30000)
|
|
|
|
|
|
|
|
await removeVideoFromPlaylist({
|
2020-01-31 16:56:52 +01:00
|
|
|
url: servers[1].url,
|
|
|
|
token: servers[1].accessToken,
|
2019-08-01 16:54:24 +02:00
|
|
|
playlistId: playlistWithThumbnail,
|
|
|
|
playlistElementId: withThumbnailE1
|
|
|
|
})
|
|
|
|
|
|
|
|
await waitJobs(servers)
|
|
|
|
|
|
|
|
for (const server of servers) {
|
|
|
|
const p = await getPlaylistWithThumbnail(server)
|
|
|
|
await testImage(server.url, 'thumbnail', p.thumbnailPath)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
it('Should the thumbnail when we delete the last element', async function () {
|
|
|
|
this.timeout(30000)
|
|
|
|
|
|
|
|
await removeVideoFromPlaylist({
|
2020-01-31 16:56:52 +01:00
|
|
|
url: servers[1].url,
|
|
|
|
token: servers[1].accessToken,
|
2019-08-01 16:54:24 +02:00
|
|
|
playlistId: playlistWithoutThumbnail,
|
|
|
|
playlistElementId: withoutThumbnailE2
|
|
|
|
})
|
|
|
|
|
|
|
|
await waitJobs(servers)
|
|
|
|
|
|
|
|
for (const server of servers) {
|
|
|
|
const p = await getPlaylistWithoutThumbnail(server)
|
|
|
|
expect(p.thumbnailPath).to.be.null
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
it('Should not update the thumbnail when we delete the last element if we explicitly uploaded a thumbnail', async function () {
|
|
|
|
this.timeout(30000)
|
|
|
|
|
|
|
|
await removeVideoFromPlaylist({
|
2020-01-31 16:56:52 +01:00
|
|
|
url: servers[1].url,
|
|
|
|
token: servers[1].accessToken,
|
2019-08-01 16:54:24 +02:00
|
|
|
playlistId: playlistWithThumbnail,
|
|
|
|
playlistElementId: withThumbnailE2
|
|
|
|
})
|
|
|
|
|
|
|
|
await waitJobs(servers)
|
|
|
|
|
|
|
|
for (const server of servers) {
|
|
|
|
const p = await getPlaylistWithThumbnail(server)
|
|
|
|
await testImage(server.url, 'thumbnail', p.thumbnailPath)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
after(async function () {
|
|
|
|
await cleanupTests(servers)
|
|
|
|
})
|
|
|
|
})
|