]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/tests/api/check-params/services.ts
Fix s3 mock cleanup
[github/Chocobozzz/PeerTube.git] / server / tests / api / check-params / services.ts
index 62a14f51f7e374565ec4d1dd2c1b6f2d5cdf583e..d45868f36f7f2fa0cf9ea99651ac2f2fafad8b48 100644 (file)
@@ -1,24 +1,66 @@
-/* tslint:disable:no-unused-expression */
+/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
+
+import { HttpStatusCode, VideoCreateResult, VideoPlaylistCreateResult, VideoPlaylistPrivacy, VideoPrivacy } from '@shared/models'
+import {
+  cleanupTests,
+  createSingleServer,
+  makeGetRequest,
+  PeerTubeServer,
+  setAccessTokensToServers,
+  setDefaultVideoChannel
+} from '@shared/server-commands'
 
-import 'mocha'
+describe('Test services API validators', function () {
+  let server: PeerTubeServer
+  let playlistUUID: string
 
-import { flushTests, killallServers, makeGetRequest, runServer, ServerInfo, setAccessTokensToServers, uploadVideo } from '../../utils'
+  let privateVideo: VideoCreateResult
+  let unlistedVideo: VideoCreateResult
 
-describe('Test services API validators', function () {
-  let server: ServerInfo
+  let privatePlaylist: VideoPlaylistCreateResult
+  let unlistedPlaylist: VideoPlaylistCreateResult
 
   // ---------------------------------------------------------------
 
   before(async function () {
     this.timeout(60000)
 
-    await flushTests()
-
-    server = await runServer(1)
+    server = await createSingleServer(1)
     await setAccessTokensToServers([ server ])
-
-    const res = await uploadVideo(server.url, server.accessToken, { name: 'my super name' })
-    server.video = res.body.video
+    await setDefaultVideoChannel([ server ])
+
+    server.store.videoCreated = await server.videos.upload({ attributes: { name: 'my super name' } })
+
+    privateVideo = await server.videos.quickUpload({ name: 'private', privacy: VideoPrivacy.PRIVATE })
+    unlistedVideo = await server.videos.quickUpload({ name: 'unlisted', privacy: VideoPrivacy.UNLISTED })
+
+    {
+      const created = await server.playlists.create({
+        attributes: {
+          displayName: 'super playlist',
+          privacy: VideoPlaylistPrivacy.PUBLIC,
+          videoChannelId: server.store.channel.id
+        }
+      })
+
+      playlistUUID = created.uuid
+
+      privatePlaylist = await server.playlists.create({
+        attributes: {
+          displayName: 'private',
+          privacy: VideoPlaylistPrivacy.PRIVATE,
+          videoChannelId: server.store.channel.id
+        }
+      })
+
+      unlistedPlaylist = await server.playlists.create({
+        attributes: {
+          displayName: 'unlisted',
+          privacy: VideoPlaylistPrivacy.UNLISTED,
+          videoChannelId: server.store.channel.id
+        }
+      })
+    }
   })
 
   describe('Test oEmbed API validators', function () {
@@ -29,80 +71,125 @@ describe('Test services API validators', function () {
     })
 
     it('Should fail with an invalid host', async function () {
-      const embedUrl = 'http://hello.com/videos/watch/' + server.video.uuid
+      const embedUrl = 'http://hello.com/videos/watch/' + server.store.videoCreated.uuid
       await checkParamEmbed(server, embedUrl)
     })
 
-    it('Should fail with an invalid video id', async function () {
-      const embedUrl = 'http://localhost:9001/videos/watch/blabla'
+    it('Should fail with an invalid element id', async function () {
+      const embedUrl = `${server.url}/videos/watch/blabla`
       await checkParamEmbed(server, embedUrl)
     })
 
-    it('Should fail with an unknown video', async function () {
-      const embedUrl = 'http://localhost:9001/videos/watch/88fc0165-d1f0-4a35-a51a-3b47f668689c'
-      await checkParamEmbed(server, embedUrl, 404)
+    it('Should fail with an unknown element', async function () {
+      const embedUrl = `${server.url}/videos/watch/88fc0165-d1f0-4a35-a51a-3b47f668689c`
+      await checkParamEmbed(server, embedUrl, HttpStatusCode.NOT_FOUND_404)
     })
 
     it('Should fail with an invalid path', async function () {
-      const embedUrl = 'http://localhost:9001/videos/watchs/' + server.video.uuid
+      const embedUrl = `${server.url}/videos/watchs/${server.store.videoCreated.uuid}`
 
       await checkParamEmbed(server, embedUrl)
     })
 
     it('Should fail with an invalid max height', async function () {
-      const embedUrl = 'http://localhost:9001/videos/watch/' + server.video.uuid
+      const embedUrl = `${server.url}/videos/watch/${server.store.videoCreated.uuid}`
 
-      await checkParamEmbed(server, embedUrl, 400, { maxheight: 'hello' })
+      await checkParamEmbed(server, embedUrl, HttpStatusCode.BAD_REQUEST_400, { maxheight: 'hello' })
     })
 
     it('Should fail with an invalid max width', async function () {
-      const embedUrl = 'http://localhost:9001/videos/watch/' + server.video.uuid
+      const embedUrl = `${server.url}/videos/watch/${server.store.videoCreated.uuid}`
 
-      await checkParamEmbed(server, embedUrl, 400, { maxwidth: 'hello' })
+      await checkParamEmbed(server, embedUrl, HttpStatusCode.BAD_REQUEST_400, { maxwidth: 'hello' })
     })
 
     it('Should fail with an invalid format', async function () {
-      const embedUrl = 'http://localhost:9001/videos/watch/' + server.video.uuid
+      const embedUrl = `${server.url}/videos/watch/${server.store.videoCreated.uuid}`
 
-      await checkParamEmbed(server, embedUrl, 400, { format: 'blabla' })
+      await checkParamEmbed(server, embedUrl, HttpStatusCode.BAD_REQUEST_400, { format: 'blabla' })
     })
 
     it('Should fail with a non supported format', async function () {
-      const embedUrl = 'http://localhost:9001/videos/watch/' + server.video.uuid
+      const embedUrl = `${server.url}/videos/watch/${server.store.videoCreated.uuid}`
+
+      await checkParamEmbed(server, embedUrl, HttpStatusCode.NOT_IMPLEMENTED_501, { format: 'xml' })
+    })
+
+    it('Should fail with a private video', async function () {
+      const embedUrl = `${server.url}/videos/watch/${privateVideo.uuid}`
+
+      await checkParamEmbed(server, embedUrl, HttpStatusCode.FORBIDDEN_403)
+    })
+
+    it('Should fail with an unlisted video with the int id', async function () {
+      const embedUrl = `${server.url}/videos/watch/${unlistedVideo.id}`
+
+      await checkParamEmbed(server, embedUrl, HttpStatusCode.FORBIDDEN_403)
+    })
+
+    it('Should succeed with an unlisted video using the uuid id', async function () {
+      for (const uuid of [ unlistedVideo.uuid, unlistedVideo.shortUUID ]) {
+        const embedUrl = `${server.url}/videos/watch/${uuid}`
+
+        await checkParamEmbed(server, embedUrl, HttpStatusCode.OK_200)
+      }
+    })
+
+    it('Should fail with a private playlist', async function () {
+      const embedUrl = `${server.url}/videos/watch/playlist/${privatePlaylist.uuid}`
 
-      await checkParamEmbed(server, embedUrl, 501, { format: 'xml' })
+      await checkParamEmbed(server, embedUrl, HttpStatusCode.FORBIDDEN_403)
     })
 
-    it('Should succeed with the correct params', async function () {
-      const embedUrl = 'http://localhost:9001/videos/watch/' + server.video.uuid
+    it('Should fail with an unlisted playlist using the int id', async function () {
+      const embedUrl = `${server.url}/videos/watch/playlist/${unlistedPlaylist.id}`
+
+      await checkParamEmbed(server, embedUrl, HttpStatusCode.FORBIDDEN_403)
+    })
+
+    it('Should succeed with an unlisted playlist using the uuid id', async function () {
+      for (const uuid of [ unlistedPlaylist.uuid, unlistedPlaylist.shortUUID ]) {
+        const embedUrl = `${server.url}/videos/watch/playlist/${uuid}`
+
+        await checkParamEmbed(server, embedUrl, HttpStatusCode.OK_200)
+      }
+    })
+
+    it('Should succeed with the correct params with a video', async function () {
+      const embedUrl = `${server.url}/videos/watch/${server.store.videoCreated.uuid}`
       const query = {
         format: 'json',
         maxheight: 400,
         maxwidth: 400
       }
 
-      await checkParamEmbed(server, embedUrl, 200, query)
+      await checkParamEmbed(server, embedUrl, HttpStatusCode.OK_200, query)
+    })
+
+    it('Should succeed with the correct params with a playlist', async function () {
+      const embedUrl = `${server.url}/videos/watch/playlist/${playlistUUID}`
+      const query = {
+        format: 'json',
+        maxheight: 400,
+        maxwidth: 400
+      }
+
+      await checkParamEmbed(server, embedUrl, HttpStatusCode.OK_200, query)
     })
   })
 
   after(async function () {
-    killallServers([ server ])
-
-    // Keep the logs if the test failed
-    if (this['ok']) {
-      await flushTests()
-    }
+    await cleanupTests([ server ])
   })
 })
 
-function checkParamEmbed (server: ServerInfo, embedUrl: string, statusCodeExpected = 400, query = {}) {
+function checkParamEmbed (server: PeerTubeServer, embedUrl: string, expectedStatus = HttpStatusCode.BAD_REQUEST_400, query = {}) {
   const path = '/services/oembed'
 
   return makeGetRequest({
     url: server.url,
     path,
     query: Object.assign(query, { url: embedUrl }),
-    token: server.accessToken,
-    statusCodeExpected
+    expectedStatus
   })
 }