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'
14 function getVideoPlaylistsList (url: string, start: number, count: number, sort?: string) {
15 const path = '/api/v1/video-playlists'
23 return makeGetRequest({
27 statusCodeExpected: 200
31 function getVideoChannelPlaylistsList (url: string, videoChannelName: string, start: number, count: number, sort?: string) {
32 const path = '/api/v1/video-channels/' + videoChannelName + '/video-playlists'
40 return makeGetRequest({
44 statusCodeExpected: 200
48 function getAccountPlaylistsList (url: string, accountName: string, start: number, count: number, sort?: string) {
49 const path = '/api/v1/accounts/' + accountName + '/video-playlists'
57 return makeGetRequest({
61 statusCodeExpected: 200
65 function getAccountPlaylistsListWithToken (
71 playlistType?: VideoPlaylistType,
74 const path = '/api/v1/accounts/' + accountName + '/video-playlists'
83 return makeGetRequest({
88 statusCodeExpected: 200
92 function getVideoPlaylist (url: string, playlistId: number | string, statusCodeExpected = 200) {
93 const path = '/api/v1/video-playlists/' + playlistId
95 return makeGetRequest({
102 function getVideoPlaylistWithToken (url: string, token: string, playlistId: number | string, statusCodeExpected = 200) {
103 const path = '/api/v1/video-playlists/' + playlistId
105 return makeGetRequest({
113 function deleteVideoPlaylist (url: string, token: string, playlistId: number | string, statusCodeExpected = 204) {
114 const path = '/api/v1/video-playlists/' + playlistId
116 return makeDeleteRequest({
124 function createVideoPlaylist (options: {
127 playlistAttrs: VideoPlaylistCreate,
128 expectedStatus?: number
130 const path = '/api/v1/video-playlists'
132 const fields = omit(options.playlistAttrs, 'thumbnailfile')
134 const attaches = options.playlistAttrs.thumbnailfile
135 ? { thumbnailfile: options.playlistAttrs.thumbnailfile }
138 return makeUploadRequest({
142 token: options.token,
145 statusCodeExpected: options.expectedStatus || 200
149 function updateVideoPlaylist (options: {
152 playlistAttrs: VideoPlaylistUpdate,
153 playlistId: number | string,
154 expectedStatus?: number
156 const path = '/api/v1/video-playlists/' + options.playlistId
158 const fields = omit(options.playlistAttrs, 'thumbnailfile')
160 const attaches = options.playlistAttrs.thumbnailfile
161 ? { thumbnailfile: options.playlistAttrs.thumbnailfile }
164 return makeUploadRequest({
168 token: options.token,
171 statusCodeExpected: options.expectedStatus || 204
175 async function addVideoInPlaylist (options: {
178 playlistId: number | string,
179 elementAttrs: VideoPlaylistElementCreate | { videoId: string }
180 expectedStatus?: number
182 options.elementAttrs.videoId = await videoUUIDToId(options.url, options.elementAttrs.videoId)
184 const path = '/api/v1/video-playlists/' + options.playlistId + '/videos'
186 return makePostBodyRequest({
189 token: options.token,
190 fields: options.elementAttrs,
191 statusCodeExpected: options.expectedStatus || 200
195 function updateVideoPlaylistElement (options: {
198 playlistId: number | string,
199 videoId: number | string,
200 elementAttrs: VideoPlaylistElementUpdate,
201 expectedStatus?: number
203 const path = '/api/v1/video-playlists/' + options.playlistId + '/videos/' + options.videoId
205 return makePutBodyRequest({
208 token: options.token,
209 fields: options.elementAttrs,
210 statusCodeExpected: options.expectedStatus || 204
214 function removeVideoFromPlaylist (options: {
217 playlistId: number | string,
218 videoId: number | string,
219 expectedStatus?: number
221 const path = '/api/v1/video-playlists/' + options.playlistId + '/videos/' + options.videoId
223 return makeDeleteRequest({
226 token: options.token,
227 statusCodeExpected: options.expectedStatus || 204
231 function reorderVideosPlaylist (options: {
234 playlistId: number | string,
236 startPosition: number,
237 insertAfterPosition: number,
238 reorderLength?: number
240 expectedStatus?: number
242 const path = '/api/v1/video-playlists/' + options.playlistId + '/videos/reorder'
244 return makePostBodyRequest({
247 token: options.token,
248 fields: options.elementAttrs,
249 statusCodeExpected: options.expectedStatus || 204
253 async function checkPlaylistFilesWereRemoved (
254 playlistUUID: string,
255 serverNumber: number,
256 directories = [ 'thumbnails' ]
258 const testDirectory = 'test' + serverNumber
260 for (const directory of directories) {
261 const directoryPath = join(root(), testDirectory, directory)
263 const files = await readdir(directoryPath)
264 for (const file of files) {
265 expect(file).to.not.contain(playlistUUID)
270 function getVideoPlaylistPrivacies (url: string) {
271 const path = '/api/v1/video-playlists/privacies'
273 return makeGetRequest({
276 statusCodeExpected: 200
280 function doVideosExistInMyPlaylist (url: string, token: string, videoIds: number[]) {
281 const path = '/api/v1/users/me/video-playlists/videos-exist'
283 return makeGetRequest({
288 statusCodeExpected: 200
292 // ---------------------------------------------------------------------------
295 getVideoPlaylistPrivacies,
297 getVideoPlaylistsList,
298 getVideoChannelPlaylistsList,
299 getAccountPlaylistsList,
300 getAccountPlaylistsListWithToken,
303 getVideoPlaylistWithToken,
310 updateVideoPlaylistElement,
311 removeVideoFromPlaylist,
313 reorderVideosPlaylist,
315 checkPlaylistFilesWereRemoved,
317 doVideosExistInMyPlaylist