X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Ftests%2Fapi%2Fcheck-params%2Fvideo-playlists.ts;h=8db91a3f9821a6f1eddfbf70c45cbf226fe43d54;hb=fd3c2e87051f5029cdec39d877b576a62f48e219;hp=68fe362e9c3d55c8e696a07be8901ce82153a74f;hpb=07b1a18aa678d260009a93e36606c5c5f585723d;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/tests/api/check-params/video-playlists.ts b/server/tests/api/check-params/video-playlists.ts index 68fe362e9..8db91a3f9 100644 --- a/server/tests/api/check-params/video-playlists.ts +++ b/server/tests/api/check-params/video-playlists.ts @@ -1,72 +1,84 @@ -/* tslint:disable:no-unused-expression */ +/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */ import 'mocha' +import { checkBadCountPagination, checkBadSortPagination, checkBadStartPagination } from '@server/tests/shared' import { - createUser, - createVideoPlaylist, - deleteVideoPlaylist, - flushTests, - getVideoPlaylist, - immutableAssign, - killallServers, + HttpStatusCode, + VideoPlaylistCreate, + VideoPlaylistCreateResult, + VideoPlaylistElementCreate, + VideoPlaylistElementUpdate, + VideoPlaylistPrivacy, + VideoPlaylistReorder, + VideoPlaylistType +} from '@shared/models' +import { + cleanupTests, + createSingleServer, makeGetRequest, - runServer, - ServerInfo, + PeerTubeServer, + PlaylistsCommand, setAccessTokensToServers, - updateVideoPlaylist, - userLogin, - addVideoInPlaylist, uploadVideo, updateVideoPlaylistElement, removeVideoFromPlaylist, reorderVideosPlaylist -} from '../../../../shared/utils' -import { - checkBadCountPagination, - checkBadSortPagination, - checkBadStartPagination -} from '../../../../shared/utils/requests/check-api-params' -import { VideoPlaylistPrivacy } from '../../../../shared/models/videos/playlist/video-playlist-privacy.model' + setDefaultVideoChannel +} from '@shared/server-commands' describe('Test video playlists API validator', function () { - let server: ServerInfo - let userAccessToken = '' - let playlistUUID: string + let server: PeerTubeServer + let userAccessToken: string + + let playlist: VideoPlaylistCreateResult + let privatePlaylistUUID: string + + let watchLaterPlaylistId: number let videoId: number - let videoId2: number + let elementId: number + + let command: PlaylistsCommand // --------------------------------------------------------------- before(async function () { this.timeout(30000) - await flushTests() - - server = await runServer(1) + server = await createSingleServer(1) await setAccessTokensToServers([ server ]) + await setDefaultVideoChannel([ server ]) - const username = 'user1' - const password = 'my super password' - await createUser(server.url, server.accessToken, username, password) - userAccessToken = await userLogin(server, { username, password }) + userAccessToken = await server.users.generateUserAndToken('user1') + videoId = (await server.videos.quickUpload({ name: 'video 1' })).id + + command = server.playlists { - const res = await uploadVideo(server.url, server.accessToken, { name: 'video 1' }) - videoId = res.body.video.id + const { data } = await command.listByAccount({ + token: server.accessToken, + handle: 'root', + start: 0, + count: 5, + playlistType: VideoPlaylistType.WATCH_LATER + }) + watchLaterPlaylistId = data[0].id } { - const res = await uploadVideo(server.url, server.accessToken, { name: 'video 2' }) - videoId2 = res.body.video.id + playlist = await command.create({ + attributes: { + displayName: 'super playlist', + privacy: VideoPlaylistPrivacy.PUBLIC, + videoChannelId: server.store.channel.id + } + }) } { - const res = await createVideoPlaylist({ - url: server.url, - token: server.accessToken, - playlistAttrs: { - displayName: 'super playlist', - privacy: VideoPlaylistPrivacy.PUBLIC + const created = await command.create({ + attributes: { + displayName: 'private', + privacy: VideoPlaylistPrivacy.PRIVATE } }) - playlistUUID = res.body.videoPlaylist.uuid + privatePlaylistUUID = created.uuid } }) @@ -93,475 +105,356 @@ describe('Test video playlists API validator', function () { await checkBadSortPagination(server.url, videoChannelPath, server.accessToken) }) + it('Should fail with a bad playlist type', async function () { + await makeGetRequest({ url: server.url, path: globalPath, query: { playlistType: 3 } }) + await makeGetRequest({ url: server.url, path: accountPath, query: { playlistType: 3 } }) + await makeGetRequest({ url: server.url, path: videoChannelPath, query: { playlistType: 3 } }) + }) + it('Should fail with a bad account parameter', async function () { const accountPath = '/api/v1/accounts/root2/video-playlists' - await makeGetRequest({ url: server.url, path: accountPath, statusCodeExpected: 404, token: server.accessToken }) + await makeGetRequest({ + url: server.url, + path: accountPath, + expectedStatus: HttpStatusCode.NOT_FOUND_404, + token: server.accessToken + }) }) it('Should fail with a bad video channel parameter', async function () { const accountPath = '/api/v1/video-channels/bad_channel/video-playlists' - await makeGetRequest({ url: server.url, path: accountPath, statusCodeExpected: 404, token: server.accessToken }) + await makeGetRequest({ + url: server.url, + path: accountPath, + expectedStatus: HttpStatusCode.NOT_FOUND_404, + token: server.accessToken + }) }) it('Should success with the correct parameters', async function () { - await makeGetRequest({ url: server.url, path: globalPath, statusCodeExpected: 200, token: server.accessToken }) - await makeGetRequest({ url: server.url, path: accountPath, statusCodeExpected: 200, token: server.accessToken }) - await makeGetRequest({ url: server.url, path: videoChannelPath, statusCodeExpected: 200, token: server.accessToken }) + await makeGetRequest({ url: server.url, path: globalPath, expectedStatus: HttpStatusCode.OK_200, token: server.accessToken }) + await makeGetRequest({ url: server.url, path: accountPath, expectedStatus: HttpStatusCode.OK_200, token: server.accessToken }) + await makeGetRequest({ + url: server.url, + path: videoChannelPath, + expectedStatus: HttpStatusCode.OK_200, + token: server.accessToken + }) }) }) describe('When listing videos of a playlist', function () { - const path = '/api/v1/video-playlists' + const path = '/api/v1/video-playlists/' it('Should fail with a bad start pagination', async function () { - await checkBadStartPagination(server.url, path, server.accessToken) + await checkBadStartPagination(server.url, path + playlist.shortUUID + '/videos', server.accessToken) }) it('Should fail with a bad count pagination', async function () { - await checkBadCountPagination(server.url, path, server.accessToken) + await checkBadCountPagination(server.url, path + playlist.shortUUID + '/videos', server.accessToken) }) - it('Should fail with a bad filter', async function () { - await checkBadSortPagination(server.url, path, server.accessToken) + it('Should success with the correct parameters', async function () { + await makeGetRequest({ url: server.url, path: path + playlist.shortUUID + '/videos', expectedStatus: HttpStatusCode.OK_200 }) }) }) describe('When getting a video playlist', function () { it('Should fail with a bad id or uuid', async function () { - await getVideoPlaylist(server.url, 'toto', 400) + await command.get({ playlistId: 'toto', expectedStatus: HttpStatusCode.BAD_REQUEST_400 }) }) it('Should fail with an unknown playlist', async function () { - await getVideoPlaylist(server.url, 42, 404) + await command.get({ playlistId: 42, expectedStatus: HttpStatusCode.NOT_FOUND_404 }) }) it('Should fail to get an unlisted playlist with the number id', async function () { - const res = await createVideoPlaylist({ - url: server.url, - token: server.accessToken, - playlistAttrs: { + const playlist = await command.create({ + attributes: { displayName: 'super playlist', + videoChannelId: server.store.channel.id, privacy: VideoPlaylistPrivacy.UNLISTED } }) - const playlist = res.body.videoPlaylist - await getVideoPlaylist(server.url, playlist.id, 404) - await getVideoPlaylist(server.url, playlist.uuid, 200) + await command.get({ playlistId: playlist.id, expectedStatus: HttpStatusCode.NOT_FOUND_404 }) + await command.get({ playlistId: playlist.uuid, expectedStatus: HttpStatusCode.OK_200 }) }) it('Should succeed with the correct params', async function () { - await getVideoPlaylist(server.url, playlistUUID, 200) + await command.get({ playlistId: playlist.uuid, expectedStatus: HttpStatusCode.OK_200 }) }) }) describe('When creating/updating a video playlist', function () { + const getBase = ( + attributes?: Partial, + wrapper?: Partial[0]> + ) => { + return { + attributes: { + displayName: 'display name', + privacy: VideoPlaylistPrivacy.UNLISTED, + thumbnailfile: 'thumbnail.jpg', + videoChannelId: server.store.channel.id, - it('Should fail with an unauthenticated user', async function () { - const baseParams = { - url: server.url, - token: null, - playlistAttrs: { - displayName: 'super playlist', - privacy: VideoPlaylistPrivacy.PUBLIC + ...attributes }, - expectedStatus: 401 + + expectedStatus: HttpStatusCode.BAD_REQUEST_400, + + ...wrapper } + } + const getUpdate = (params: any, playlistId: number | string) => { + return { ...params, playlistId } + } + + it('Should fail with an unauthenticated user', async function () { + const params = getBase({}, { token: null, expectedStatus: HttpStatusCode.UNAUTHORIZED_401 }) - await createVideoPlaylist(baseParams) - await updateVideoPlaylist(immutableAssign(baseParams, { playlistId: playlistUUID })) + await command.create(params) + await command.update(getUpdate(params, playlist.shortUUID)) }) it('Should fail without displayName', async function () { - const baseParams = { - url: server.url, - token: server.accessToken, - playlistAttrs: { - privacy: VideoPlaylistPrivacy.PUBLIC - } as any, - expectedStatus: 400 - } + const params = getBase({ displayName: undefined }) - await createVideoPlaylist(baseParams) - await updateVideoPlaylist(immutableAssign(baseParams, { playlistId: playlistUUID })) + await command.create(params) }) it('Should fail with an incorrect display name', async function () { - const baseParams = { - url: server.url, - token: server.accessToken, - playlistAttrs: { - displayName: 's'.repeat(300), - privacy: VideoPlaylistPrivacy.PUBLIC - }, - expectedStatus: 400 - } + const params = getBase({ displayName: 's'.repeat(300) }) - await createVideoPlaylist(baseParams) - await updateVideoPlaylist(immutableAssign(baseParams, { playlistId: playlistUUID })) + await command.create(params) + await command.update(getUpdate(params, playlist.shortUUID)) }) it('Should fail with an incorrect description', async function () { - const baseParams = { - url: server.url, - token: server.accessToken, - playlistAttrs: { - displayName: 'display name', - privacy: VideoPlaylistPrivacy.PUBLIC, - description: 't' - }, - expectedStatus: 400 - } + const params = getBase({ description: 't' }) - await createVideoPlaylist(baseParams) - await updateVideoPlaylist(immutableAssign(baseParams, { playlistId: playlistUUID })) + await command.create(params) + await command.update(getUpdate(params, playlist.shortUUID)) }) it('Should fail with an incorrect privacy', async function () { - const baseParams = { - url: server.url, - token: server.accessToken, - playlistAttrs: { - displayName: 'display name', - privacy: 45 - } as any, - expectedStatus: 400 - } + const params = getBase({ privacy: 45 }) - await createVideoPlaylist(baseParams) - await updateVideoPlaylist(immutableAssign(baseParams, { playlistId: playlistUUID })) + await command.create(params) + await command.update(getUpdate(params, playlist.shortUUID)) }) it('Should fail with an unknown video channel id', async function () { - const baseParams = { - url: server.url, - token: server.accessToken, - playlistAttrs: { - displayName: 'display name', - privacy: VideoPlaylistPrivacy.PUBLIC, - videoChannelId: 42 - }, - expectedStatus: 404 - } + const params = getBase({ videoChannelId: 42 }, { expectedStatus: HttpStatusCode.NOT_FOUND_404 }) - await createVideoPlaylist(baseParams) - await updateVideoPlaylist(immutableAssign(baseParams, { playlistId: playlistUUID })) + await command.create(params) + await command.update(getUpdate(params, playlist.shortUUID)) }) it('Should fail with an incorrect thumbnail file', async function () { - const baseParams = { - url: server.url, - token: server.accessToken, - playlistAttrs: { - displayName: 'display name', - privacy: VideoPlaylistPrivacy.PUBLIC, - thumbnailfile: 'avatar.png' - }, - expectedStatus: 400 - } + const params = getBase({ thumbnailfile: 'video_short.mp4' }) - await createVideoPlaylist(baseParams) - await updateVideoPlaylist(immutableAssign(baseParams, { playlistId: playlistUUID })) + await command.create(params) + await command.update(getUpdate(params, playlist.shortUUID)) + }) + + it('Should fail with a thumbnail file too big', async function () { + const params = getBase({ thumbnailfile: 'preview-big.png' }) + + await command.create(params) + await command.update(getUpdate(params, playlist.shortUUID)) + }) + + it('Should fail to set "public" a playlist not assigned to a channel', async function () { + const params = getBase({ privacy: VideoPlaylistPrivacy.PUBLIC, videoChannelId: undefined }) + const params2 = getBase({ privacy: VideoPlaylistPrivacy.PUBLIC, videoChannelId: 'null' as any }) + const params3 = getBase({ privacy: undefined, videoChannelId: 'null' as any }) + + await command.create(params) + await command.create(params2) + await command.update(getUpdate(params, privatePlaylistUUID)) + await command.update(getUpdate(params2, playlist.shortUUID)) + await command.update(getUpdate(params3, playlist.shortUUID)) }) it('Should fail with an unknown playlist to update', async function () { - await updateVideoPlaylist({ - url: server.url, - token: server.accessToken, - playlistId: 42, - playlistAttrs: { - displayName: 'display name', - privacy: VideoPlaylistPrivacy.PUBLIC - }, - expectedStatus: 404 - }) + await command.update(getUpdate( + getBase({}, { expectedStatus: HttpStatusCode.NOT_FOUND_404 }), + 42 + )) }) it('Should fail to update a playlist of another user', async function () { - await updateVideoPlaylist({ - url: server.url, - token: userAccessToken, - playlistId: playlistUUID, - playlistAttrs: { - displayName: 'display name', - privacy: VideoPlaylistPrivacy.PUBLIC - }, - expectedStatus: 403 - }) + await command.update(getUpdate( + getBase({}, { token: userAccessToken, expectedStatus: HttpStatusCode.FORBIDDEN_403 }), + playlist.shortUUID + )) }) - it('Should fail to update to private a public/unlisted playlist', async function () { - const res = await createVideoPlaylist({ - url: server.url, - token: server.accessToken, - playlistAttrs: { - displayName: 'super playlist', - privacy: VideoPlaylistPrivacy.PUBLIC - } - }) - const playlist = res.body.videoPlaylist - - await updateVideoPlaylist({ - url: server.url, - token: server.accessToken, - playlistId: playlist.id, - playlistAttrs: { - displayName: 'display name', - privacy: VideoPlaylistPrivacy.PRIVATE - }, - expectedStatus: 409 - }) + it('Should fail to update the watch later playlist', async function () { + await command.update(getUpdate( + getBase({}, { expectedStatus: HttpStatusCode.BAD_REQUEST_400 }), + watchLaterPlaylistId + )) }) it('Should succeed with the correct params', async function () { - const baseParams = { - url: server.url, - token: server.accessToken, - playlistAttrs: { - displayName: 'display name', - privacy: VideoPlaylistPrivacy.UNLISTED, - thumbnailfile: 'thumbnail.jpg' - } + { + const params = getBase({}, { expectedStatus: HttpStatusCode.OK_200 }) + await command.create(params) } - await createVideoPlaylist(baseParams) - await updateVideoPlaylist(immutableAssign(baseParams, { playlistId: playlistUUID })) + { + const params = getBase({}, { expectedStatus: HttpStatusCode.NO_CONTENT_204 }) + await command.update(getUpdate(params, playlist.shortUUID)) + } }) }) describe('When adding an element in a playlist', function () { - it('Should fail with an unauthenticated user', async function () { - await addVideoInPlaylist({ - url: server.url, - token: null, - elementAttrs: { - videoId: videoId + const getBase = ( + attributes?: Partial, + wrapper?: Partial[0]> + ) => { + return { + attributes: { + videoId, + startTimestamp: 2, + stopTimestamp: 3, + + ...attributes }, - playlistId: playlistUUID, - expectedStatus: 401 - }) + + expectedStatus: HttpStatusCode.BAD_REQUEST_400, + playlistId: playlist.id, + + ...wrapper + } + } + + it('Should fail with an unauthenticated user', async function () { + const params = getBase({}, { token: null, expectedStatus: HttpStatusCode.UNAUTHORIZED_401 }) + await command.addElement(params) }) it('Should fail with the playlist of another user', async function () { - await addVideoInPlaylist({ - url: server.url, - token: userAccessToken, - elementAttrs: { - videoId: videoId - }, - playlistId: playlistUUID, - expectedStatus: 403 - }) + const params = getBase({}, { token: userAccessToken, expectedStatus: HttpStatusCode.FORBIDDEN_403 }) + await command.addElement(params) }) it('Should fail with an unknown or incorrect playlist id', async function () { - await addVideoInPlaylist({ - url: server.url, - token: server.accessToken, - elementAttrs: { - videoId: videoId - }, - playlistId: 'toto', - expectedStatus: 400 - }) + { + const params = getBase({}, { playlistId: 'toto' }) + await command.addElement(params) + } - await addVideoInPlaylist({ - url: server.url, - token: server.accessToken, - elementAttrs: { - videoId: videoId - }, - playlistId: 42, - expectedStatus: 404 - }) + { + const params = getBase({}, { playlistId: 42, expectedStatus: HttpStatusCode.NOT_FOUND_404 }) + await command.addElement(params) + } }) it('Should fail with an unknown or incorrect video id', async function () { - await addVideoInPlaylist({ - url: server.url, - token: server.accessToken, - elementAttrs: { - videoId: 'toto' as any - }, - playlistId: playlistUUID, - expectedStatus: 400 - }) - - await addVideoInPlaylist({ - url: server.url, - token: server.accessToken, - elementAttrs: { - videoId: 42 - }, - playlistId: playlistUUID, - expectedStatus: 404 - }) + const params = getBase({ videoId: 42 }, { expectedStatus: HttpStatusCode.NOT_FOUND_404 }) + await command.addElement(params) }) it('Should fail with a bad start/stop timestamp', async function () { - await addVideoInPlaylist({ - url: server.url, - token: server.accessToken, - elementAttrs: { - videoId: videoId, - startTimestamp: -42 - }, - playlistId: playlistUUID, - expectedStatus: 400 - }) + { + const params = getBase({ startTimestamp: -42 }) + await command.addElement(params) + } - await addVideoInPlaylist({ - url: server.url, - token: server.accessToken, - elementAttrs: { - videoId: videoId, - stopTimestamp: 'toto' as any - }, - playlistId: playlistUUID, - expectedStatus: 400 - }) + { + const params = getBase({ stopTimestamp: 'toto' as any }) + await command.addElement(params) + } }) it('Succeed with the correct params', async function () { - await addVideoInPlaylist({ - url: server.url, - token: server.accessToken, - elementAttrs: { - videoId: videoId, - stopTimestamp: 3 - }, - playlistId: playlistUUID, - expectedStatus: 200 - }) - }) - - it('Should fail if the video was already added in the playlist', async function () { - await addVideoInPlaylist({ - url: server.url, - token: server.accessToken, - elementAttrs: { - videoId: videoId, - stopTimestamp: 3 - }, - playlistId: playlistUUID, - expectedStatus: 409 - }) + const params = getBase({}, { expectedStatus: HttpStatusCode.OK_200 }) + const created = await command.addElement(params) + elementId = created.id }) }) describe('When updating an element in a playlist', function () { + const getBase = ( + attributes?: Partial, + wrapper?: Partial[0]> + ) => { + return { + attributes: { + startTimestamp: 1, + stopTimestamp: 2, + + ...attributes + }, + + elementId, + playlistId: playlist.id, + expectedStatus: HttpStatusCode.BAD_REQUEST_400, + + ...wrapper + } + } + it('Should fail with an unauthenticated user', async function () { - await updateVideoPlaylistElement({ - url: server.url, - token: null, - elementAttrs: { }, - videoId: videoId, - playlistId: playlistUUID, - expectedStatus: 401 - }) + const params = getBase({}, { token: null, expectedStatus: HttpStatusCode.UNAUTHORIZED_401 }) + await command.updateElement(params) }) it('Should fail with the playlist of another user', async function () { - await updateVideoPlaylistElement({ - url: server.url, - token: userAccessToken, - elementAttrs: { }, - videoId: videoId, - playlistId: playlistUUID, - expectedStatus: 403 - }) + const params = getBase({}, { token: userAccessToken, expectedStatus: HttpStatusCode.FORBIDDEN_403 }) + await command.updateElement(params) }) it('Should fail with an unknown or incorrect playlist id', async function () { - await updateVideoPlaylistElement({ - url: server.url, - token: server.accessToken, - elementAttrs: { }, - videoId: videoId, - playlistId: 'toto', - expectedStatus: 400 - }) + { + const params = getBase({}, { playlistId: 'toto' }) + await command.updateElement(params) + } - await updateVideoPlaylistElement({ - url: server.url, - token: server.accessToken, - elementAttrs: { }, - videoId: videoId, - playlistId: 42, - expectedStatus: 404 - }) + { + const params = getBase({}, { playlistId: 42, expectedStatus: HttpStatusCode.NOT_FOUND_404 }) + await command.updateElement(params) + } }) - it('Should fail with an unknown or incorrect video id', async function () { - await updateVideoPlaylistElement({ - url: server.url, - token: server.accessToken, - elementAttrs: { }, - videoId: 'toto', - playlistId: playlistUUID, - expectedStatus: 400 - }) + it('Should fail with an unknown or incorrect playlistElement id', async function () { + { + const params = getBase({}, { elementId: 'toto' }) + await command.updateElement(params) + } - await updateVideoPlaylistElement({ - url: server.url, - token: server.accessToken, - elementAttrs: { }, - videoId: 42, - playlistId: playlistUUID, - expectedStatus: 404 - }) + { + const params = getBase({}, { elementId: 42, expectedStatus: HttpStatusCode.NOT_FOUND_404 }) + await command.updateElement(params) + } }) it('Should fail with a bad start/stop timestamp', async function () { - await updateVideoPlaylistElement({ - url: server.url, - token: server.accessToken, - elementAttrs: { - startTimestamp: 'toto' as any - }, - videoId: videoId, - playlistId: playlistUUID, - expectedStatus: 400 - }) + { + const params = getBase({ startTimestamp: 'toto' as any }) + await command.updateElement(params) + } - await updateVideoPlaylistElement({ - url: server.url, - token: server.accessToken, - elementAttrs: { - stopTimestamp: -42 - }, - videoId: videoId, - playlistId: playlistUUID, - expectedStatus: 400 - }) + { + const params = getBase({ stopTimestamp: -42 }) + await command.updateElement(params) + } }) it('Should fail with an unknown element', async function () { - await updateVideoPlaylistElement({ - url: server.url, - token: server.accessToken, - elementAttrs: { - stopTimestamp: 2 - }, - videoId: videoId2, - playlistId: playlistUUID, - expectedStatus: 404 - }) + const params = getBase({}, { elementId: 888, expectedStatus: HttpStatusCode.NOT_FOUND_404 }) + await command.updateElement(params) }) it('Succeed with the correct params', async function () { - await updateVideoPlaylistElement({ - url: server.url, - token: server.accessToken, - elementAttrs: { - stopTimestamp: 2 - }, - videoId: videoId, - playlistId: playlistUUID, - expectedStatus: 204 - }) + const params = getBase({}, { expectedStatus: HttpStatusCode.NO_CONTENT_204 }) + await command.updateElement(params) }) }) @@ -569,303 +462,235 @@ describe('Test video playlists API validator', function () { let videoId3: number let videoId4: number - before(async function () { - { - const res = await uploadVideo(server.url, server.accessToken, { name: 'video 3' }) - videoId3 = res.body.video.id - } + const getBase = ( + attributes?: Partial, + wrapper?: Partial[0]> + ) => { + return { + attributes: { + startPosition: 1, + insertAfterPosition: 2, + reorderLength: 3, - { - const res = await uploadVideo(server.url, server.accessToken, { name: 'video 4' }) - videoId4 = res.body.video.id + ...attributes + }, + + playlistId: playlist.shortUUID, + expectedStatus: HttpStatusCode.BAD_REQUEST_400, + + ...wrapper } + } - await addVideoInPlaylist({ - url: server.url, - token: server.accessToken, - playlistId: playlistUUID, - elementAttrs: { videoId: videoId3 } - }) + before(async function () { + videoId3 = (await server.videos.quickUpload({ name: 'video 3' })).id + videoId4 = (await server.videos.quickUpload({ name: 'video 4' })).id - await addVideoInPlaylist({ - url: server.url, - token: server.accessToken, - playlistId: playlistUUID, - elementAttrs: { videoId: videoId4 } - }) + for (const id of [ videoId3, videoId4 ]) { + await command.addElement({ playlistId: playlist.shortUUID, attributes: { videoId: id } }) + } }) it('Should fail with an unauthenticated user', async function () { - await reorderVideosPlaylist({ - url: server.url, - token: null, - playlistId: playlistUUID, - elementAttrs: { - startPosition: 1, - insertAfterPosition: 2 - }, - expectedStatus: 401 - }) + const params = getBase({}, { token: null, expectedStatus: HttpStatusCode.UNAUTHORIZED_401 }) + await command.reorderElements(params) }) it('Should fail with the playlist of another user', async function () { - await reorderVideosPlaylist({ - url: server.url, - token: userAccessToken, - playlistId: playlistUUID, - elementAttrs: { - startPosition: 1, - insertAfterPosition: 2 - }, - expectedStatus: 403 - }) + const params = getBase({}, { token: userAccessToken, expectedStatus: HttpStatusCode.FORBIDDEN_403 }) + await command.reorderElements(params) }) it('Should fail with an invalid playlist', async function () { - await reorderVideosPlaylist({ - url: server.url, - token: server.accessToken, - playlistId: 'toto', - elementAttrs: { - startPosition: 1, - insertAfterPosition: 2 - }, - expectedStatus: 400 - }) + { + const params = getBase({}, { playlistId: 'toto' }) + await command.reorderElements(params) + } - await reorderVideosPlaylist({ - url: server.url, - token: server.accessToken, - playlistId: 42, - elementAttrs: { - startPosition: 1, - insertAfterPosition: 2 - }, - expectedStatus: 404 - }) + { + const params = getBase({}, { playlistId: 42, expectedStatus: HttpStatusCode.NOT_FOUND_404 }) + await command.reorderElements(params) + } }) it('Should fail with an invalid start position', async function () { - await reorderVideosPlaylist({ - url: server.url, - token: server.accessToken, - playlistId: playlistUUID, - elementAttrs: { - startPosition: -1, - insertAfterPosition: 2 - }, - expectedStatus: 400 - }) + { + const params = getBase({ startPosition: -1 }) + await command.reorderElements(params) + } - await reorderVideosPlaylist({ - url: server.url, - token: server.accessToken, - playlistId: playlistUUID, - elementAttrs: { - startPosition: 'toto' as any, - insertAfterPosition: 2 - }, - expectedStatus: 400 - }) + { + const params = getBase({ startPosition: 'toto' as any }) + await command.reorderElements(params) + } - await reorderVideosPlaylist({ - url: server.url, - token: server.accessToken, - playlistId: playlistUUID, - elementAttrs: { - startPosition: 42, - insertAfterPosition: 2 - }, - expectedStatus: 400 - }) + { + const params = getBase({ startPosition: 42 }) + await command.reorderElements(params) + } }) it('Should fail with an invalid insert after position', async function () { - await reorderVideosPlaylist({ - url: server.url, - token: server.accessToken, - playlistId: playlistUUID, - elementAttrs: { - startPosition: 1, - insertAfterPosition: 'toto' as any - }, - expectedStatus: 400 - }) + { + const params = getBase({ insertAfterPosition: 'toto' as any }) + await command.reorderElements(params) + } - await reorderVideosPlaylist({ - url: server.url, - token: server.accessToken, - playlistId: playlistUUID, - elementAttrs: { - startPosition: 1, - insertAfterPosition: -2 - }, - expectedStatus: 400 - }) + { + const params = getBase({ insertAfterPosition: -2 }) + await command.reorderElements(params) + } + + { + const params = getBase({ insertAfterPosition: 42 }) + await command.reorderElements(params) + } + }) - await reorderVideosPlaylist({ + it('Should fail with an invalid reorder length', async function () { + { + const params = getBase({ reorderLength: 'toto' as any }) + await command.reorderElements(params) + } + + { + const params = getBase({ reorderLength: -2 }) + await command.reorderElements(params) + } + + { + const params = getBase({ reorderLength: 42 }) + await command.reorderElements(params) + } + }) + + it('Succeed with the correct params', async function () { + const params = getBase({}, { expectedStatus: HttpStatusCode.NO_CONTENT_204 }) + await command.reorderElements(params) + }) + }) + + describe('When checking exists in playlist endpoint', function () { + const path = '/api/v1/users/me/video-playlists/videos-exist' + + it('Should fail with an unauthenticated user', async function () { + await makeGetRequest({ url: server.url, - token: server.accessToken, - playlistId: playlistUUID, - elementAttrs: { - startPosition: 1, - insertAfterPosition: 42 - }, - expectedStatus: 400 + path, + query: { videoIds: [ 1, 2 ] }, + expectedStatus: HttpStatusCode.UNAUTHORIZED_401 }) }) - it('Should fail with an invalid reorder length', async function () { - await reorderVideosPlaylist({ + it('Should fail with invalid video ids', async function () { + await makeGetRequest({ url: server.url, token: server.accessToken, - playlistId: playlistUUID, - elementAttrs: { - startPosition: 1, - insertAfterPosition: 2, - reorderLength: 'toto' as any - }, - expectedStatus: 400 + path, + query: { videoIds: 'toto' } }) - await reorderVideosPlaylist({ + await makeGetRequest({ url: server.url, token: server.accessToken, - playlistId: playlistUUID, - elementAttrs: { - startPosition: 1, - insertAfterPosition: 2, - reorderLength: -1 - }, - expectedStatus: 400 + path, + query: { videoIds: [ 'toto' ] } }) - await reorderVideosPlaylist({ + await makeGetRequest({ url: server.url, token: server.accessToken, - playlistId: playlistUUID, - elementAttrs: { - startPosition: 1, - insertAfterPosition: 2, - reorderLength: 4 - }, - expectedStatus: 400 + path, + query: { videoIds: [ 1, 'toto' ] } }) }) - it('Succeed with the correct params', async function () { - await reorderVideosPlaylist({ + it('Should succeed with the correct params', async function () { + await makeGetRequest({ url: server.url, token: server.accessToken, - playlistId: playlistUUID, - elementAttrs: { - startPosition: 1, - insertAfterPosition: 2, - reorderLength: 3 - }, - expectedStatus: 204 + path, + query: { videoIds: [ 1, 2 ] }, + expectedStatus: HttpStatusCode.OK_200 }) }) }) describe('When deleting an element in a playlist', function () { + const getBase = (wrapper: Partial[0]>) => { + return { + elementId, + playlistId: playlist.uuid, + expectedStatus: HttpStatusCode.BAD_REQUEST_400, + + ...wrapper + } + } + it('Should fail with an unauthenticated user', async function () { - await removeVideoFromPlaylist({ - url: server.url, - token: null, - videoId, - playlistId: playlistUUID, - expectedStatus: 401 - }) + const params = getBase({ token: null, expectedStatus: HttpStatusCode.UNAUTHORIZED_401 }) + await command.removeElement(params) }) it('Should fail with the playlist of another user', async function () { - await removeVideoFromPlaylist({ - url: server.url, - token: userAccessToken, - videoId, - playlistId: playlistUUID, - expectedStatus: 403 - }) + const params = getBase({ token: userAccessToken, expectedStatus: HttpStatusCode.FORBIDDEN_403 }) + await command.removeElement(params) }) it('Should fail with an unknown or incorrect playlist id', async function () { - await removeVideoFromPlaylist({ - url: server.url, - token: server.accessToken, - videoId, - playlistId: 'toto', - expectedStatus: 400 - }) + { + const params = getBase({ playlistId: 'toto' }) + await command.removeElement(params) + } - await removeVideoFromPlaylist({ - url: server.url, - token: server.accessToken, - videoId, - playlistId: 42, - expectedStatus: 404 - }) + { + const params = getBase({ playlistId: 42, expectedStatus: HttpStatusCode.NOT_FOUND_404 }) + await command.removeElement(params) + } }) it('Should fail with an unknown or incorrect video id', async function () { - await removeVideoFromPlaylist({ - url: server.url, - token: server.accessToken, - videoId: 'toto', - playlistId: playlistUUID, - expectedStatus: 400 - }) + { + const params = getBase({ elementId: 'toto' as any }) + await command.removeElement(params) + } - await removeVideoFromPlaylist({ - url: server.url, - token: server.accessToken, - videoId: 42, - playlistId: playlistUUID, - expectedStatus: 404 - }) + { + const params = getBase({ elementId: 42, expectedStatus: HttpStatusCode.NOT_FOUND_404 }) + await command.removeElement(params) + } }) it('Should fail with an unknown element', async function () { - await removeVideoFromPlaylist({ - url: server.url, - token: server.accessToken, - videoId: videoId2, - playlistId: playlistUUID, - expectedStatus: 404 - }) + const params = getBase({ elementId: 888, expectedStatus: HttpStatusCode.NOT_FOUND_404 }) + await command.removeElement(params) }) it('Succeed with the correct params', async function () { - await removeVideoFromPlaylist({ - url: server.url, - token: server.accessToken, - videoId: videoId, - playlistId: playlistUUID, - expectedStatus: 204 - }) + const params = getBase({ expectedStatus: HttpStatusCode.NO_CONTENT_204 }) + await command.removeElement(params) }) }) describe('When deleting a playlist', function () { it('Should fail with an unknown playlist', async function () { - await deleteVideoPlaylist(server.url, server.accessToken, 42, 404) + await command.delete({ playlistId: 42, expectedStatus: HttpStatusCode.NOT_FOUND_404 }) }) it('Should fail with a playlist of another user', async function () { - await deleteVideoPlaylist(server.url, userAccessToken, playlistUUID, 403) + await command.delete({ token: userAccessToken, playlistId: playlist.uuid, expectedStatus: HttpStatusCode.FORBIDDEN_403 }) + }) + + it('Should fail with the watch later playlist', async function () { + await command.delete({ playlistId: watchLaterPlaylistId, expectedStatus: HttpStatusCode.BAD_REQUEST_400 }) }) it('Should succeed with the correct params', async function () { - await deleteVideoPlaylist(server.url, server.accessToken, playlistUUID) + await command.delete({ playlistId: playlist.uuid }) }) }) after(async function () { - killallServers([ server ]) - - // Keep the logs if the test failed - if (this['ok']) { - await flushTests() - } + await cleanupTests([ server ]) }) })