1 import { makeDeleteRequest, makeGetRequest, makePostBodyRequest, makePutBodyRequest, makeUploadRequest } from '../requests/requests'
2 import { VideoPlaylistCreate } from '../../models/videos/playlist/video-playlist-create.model'
3 import { omit } from 'lodash'
4 import { VideoPlaylistUpdate } from '../../models/videos/playlist/video-playlist-update.model'
5 import { VideoPlaylistElementCreate } from '../../models/videos/playlist/video-playlist-element-create.model'
6 import { VideoPlaylistElementUpdate } from '../../models/videos/playlist/video-playlist-element-update.model'
7 import { videoUUIDToId } from './videos'
8 import { join } from 'path'
9 import { root } from '..'
10 import { readdir } from 'fs-extra'
11 import { expect } from 'chai'
12 import { VideoPlaylistType } from '../../models/videos/playlist/video-playlist-type.model'
13 import { HttpStatusCode } from '../../../shared/core-utils/miscs/http-error-codes'
15 function getVideoPlaylistsList (url: string, start: number, count: number, sort?: string) {
16 const path = '/api/v1/video-playlists'
24 return makeGetRequest({
28 statusCodeExpected: HttpStatusCode.OK_200
32 function getVideoChannelPlaylistsList (url: string, videoChannelName: string, start: number, count: number, sort?: string) {
33 const path = '/api/v1/video-channels/' + videoChannelName + '/video-playlists'
41 return makeGetRequest({
45 statusCodeExpected: HttpStatusCode.OK_200
49 function getAccountPlaylistsList (url: string, accountName: string, start: number, count: number, sort?: string, search?: string) {
50 const path = '/api/v1/accounts/' + accountName + '/video-playlists'
59 return makeGetRequest({
63 statusCodeExpected: HttpStatusCode.OK_200
67 function getAccountPlaylistsListWithToken (
73 playlistType?: VideoPlaylistType,
76 const path = '/api/v1/accounts/' + accountName + '/video-playlists'
85 return makeGetRequest({
90 statusCodeExpected: HttpStatusCode.OK_200
94 function getVideoPlaylist (url: string, playlistId: number | string, statusCodeExpected = HttpStatusCode.OK_200) {
95 const path = '/api/v1/video-playlists/' + playlistId
97 return makeGetRequest({
104 function getVideoPlaylistWithToken (url: string, token: string, playlistId: number | string, statusCodeExpected = HttpStatusCode.OK_200) {
105 const path = '/api/v1/video-playlists/' + playlistId
107 return makeGetRequest({
115 function deleteVideoPlaylist (url: string, token: string, playlistId: number | string, statusCodeExpected = HttpStatusCode.NO_CONTENT_204) {
116 const path = '/api/v1/video-playlists/' + playlistId
118 return makeDeleteRequest({
126 function createVideoPlaylist (options: {
129 playlistAttrs: VideoPlaylistCreate
130 expectedStatus?: number
132 const path = '/api/v1/video-playlists'
134 const fields = omit(options.playlistAttrs, 'thumbnailfile')
136 const attaches = options.playlistAttrs.thumbnailfile
137 ? { thumbnailfile: options.playlistAttrs.thumbnailfile }
140 return makeUploadRequest({
144 token: options.token,
147 statusCodeExpected: options.expectedStatus || HttpStatusCode.OK_200
151 function updateVideoPlaylist (options: {
154 playlistAttrs: VideoPlaylistUpdate
155 playlistId: number | string
156 expectedStatus?: number
158 const path = '/api/v1/video-playlists/' + options.playlistId
160 const fields = omit(options.playlistAttrs, 'thumbnailfile')
162 const attaches = options.playlistAttrs.thumbnailfile
163 ? { thumbnailfile: options.playlistAttrs.thumbnailfile }
166 return makeUploadRequest({
170 token: options.token,
173 statusCodeExpected: options.expectedStatus || HttpStatusCode.NO_CONTENT_204
177 async function addVideoInPlaylist (options: {
180 playlistId: number | string
181 elementAttrs: VideoPlaylistElementCreate | { videoId: string }
182 expectedStatus?: number
184 options.elementAttrs.videoId = await videoUUIDToId(options.url, options.elementAttrs.videoId)
186 const path = '/api/v1/video-playlists/' + options.playlistId + '/videos'
188 return makePostBodyRequest({
191 token: options.token,
192 fields: options.elementAttrs,
193 statusCodeExpected: options.expectedStatus || HttpStatusCode.OK_200
197 function updateVideoPlaylistElement (options: {
200 playlistId: number | string
201 playlistElementId: number | string
202 elementAttrs: VideoPlaylistElementUpdate
203 expectedStatus?: number
205 const path = '/api/v1/video-playlists/' + options.playlistId + '/videos/' + options.playlistElementId
207 return makePutBodyRequest({
210 token: options.token,
211 fields: options.elementAttrs,
212 statusCodeExpected: options.expectedStatus || HttpStatusCode.NO_CONTENT_204
216 function removeVideoFromPlaylist (options: {
219 playlistId: number | string
220 playlistElementId: number
221 expectedStatus?: number
223 const path = '/api/v1/video-playlists/' + options.playlistId + '/videos/' + options.playlistElementId
225 return makeDeleteRequest({
228 token: options.token,
229 statusCodeExpected: options.expectedStatus || HttpStatusCode.NO_CONTENT_204
233 function reorderVideosPlaylist (options: {
236 playlistId: number | string
238 startPosition: number
239 insertAfterPosition: number
240 reorderLength?: number
242 expectedStatus?: number
244 const path = '/api/v1/video-playlists/' + options.playlistId + '/videos/reorder'
246 return makePostBodyRequest({
249 token: options.token,
250 fields: options.elementAttrs,
251 statusCodeExpected: options.expectedStatus || HttpStatusCode.NO_CONTENT_204
255 async function checkPlaylistFilesWereRemoved (
256 playlistUUID: string,
257 internalServerNumber: number,
258 directories = [ 'thumbnails' ]
260 const testDirectory = 'test' + internalServerNumber
262 for (const directory of directories) {
263 const directoryPath = join(root(), testDirectory, directory)
265 const files = await readdir(directoryPath)
266 for (const file of files) {
267 expect(file).to.not.contain(playlistUUID)
272 function getVideoPlaylistPrivacies (url: string) {
273 const path = '/api/v1/video-playlists/privacies'
275 return makeGetRequest({
278 statusCodeExpected: HttpStatusCode.OK_200
282 function doVideosExistInMyPlaylist (url: string, token: string, videoIds: number[]) {
283 const path = '/api/v1/users/me/video-playlists/videos-exist'
285 return makeGetRequest({
290 statusCodeExpected: HttpStatusCode.OK_200
294 // ---------------------------------------------------------------------------
297 getVideoPlaylistPrivacies,
299 getVideoPlaylistsList,
300 getVideoChannelPlaylistsList,
301 getAccountPlaylistsList,
302 getAccountPlaylistsListWithToken,
305 getVideoPlaylistWithToken,
312 updateVideoPlaylistElement,
313 removeVideoFromPlaylist,
315 reorderVideosPlaylist,
317 checkPlaylistFilesWereRemoved,
319 doVideosExistInMyPlaylist