]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/tests/api/search/search-playlists.ts
shared/ typescript types dir server-commands
[github/Chocobozzz/PeerTube.git] / server / tests / api / search / search-playlists.ts
index 22e9b8fca08d132e0d5ad09b1ed8c0d3d61afea2..1e9c8d4bb1ba46721d9f474097c45447b6a1d0f0 100644 (file)
@@ -5,49 +5,62 @@ import * as chai from 'chai'
 import {
   cleanupTests,
   createSingleServer,
+  doubleFollow,
   PeerTubeServer,
   SearchCommand,
   setAccessTokensToServers,
   setDefaultVideoChannel
-} from '@shared/extra-utils'
+} from '@shared/server-commands'
 import { VideoPlaylistPrivacy } from '@shared/models'
 
 const expect = chai.expect
 
 describe('Test playlists search', function () {
-  let server: PeerTubeServer = null
+  let server: PeerTubeServer
+  let remoteServer: PeerTubeServer
   let command: SearchCommand
+  let playlistUUID: string
+  let playlistShortUUID: string
 
   before(async function () {
-    this.timeout(30000)
+    this.timeout(120000)
 
-    server = await createSingleServer(1)
+    const servers = await Promise.all([
+      createSingleServer(1),
+      createSingleServer(2, { transcoding: { enabled: false } })
+    ])
+    server = servers[0]
+    remoteServer = servers[1]
 
-    await setAccessTokensToServers([ server ])
-    await setDefaultVideoChannel([ server ])
-
-    const videoId = (await server.videos.quickUpload({ name: 'video' })).uuid
+    await setAccessTokensToServers([ remoteServer, server ])
+    await setDefaultVideoChannel([ remoteServer, server ])
 
     {
+      const videoId = (await server.videos.upload()).uuid
+
       const attributes = {
         displayName: 'Dr. Kenzo Tenma hospital videos',
         privacy: VideoPlaylistPrivacy.PUBLIC,
         videoChannelId: server.store.channel.id
       }
       const created = await server.playlists.create({ attributes })
+      playlistUUID = created.uuid
+      playlistShortUUID = created.shortUUID
 
       await server.playlists.addElement({ playlistId: created.id, attributes: { videoId } })
     }
 
     {
+      const videoId = (await remoteServer.videos.upload()).uuid
+
       const attributes = {
-        displayName: 'Johan & Anna Libert musics',
+        displayName: 'Johan & Anna Libert music videos',
         privacy: VideoPlaylistPrivacy.PUBLIC,
-        videoChannelId: server.store.channel.id
+        videoChannelId: remoteServer.store.channel.id
       }
-      const created = await server.playlists.create({ attributes })
+      const created = await remoteServer.playlists.create({ attributes })
 
-      await server.playlists.addElement({ playlistId: created.id, attributes: { videoId } })
+      await remoteServer.playlists.addElement({ playlistId: created.id, attributes: { videoId } })
     }
 
     {
@@ -59,6 +72,8 @@ describe('Test playlists search', function () {
       await server.playlists.create({ attributes })
     }
 
+    await doubleFollow(server, remoteServer)
+
     command = server.search
   })
 
@@ -87,7 +102,7 @@ describe('Test playlists search', function () {
 
     {
       const search = {
-        search: 'Anna Livert',
+        search: 'Anna Livert music',
         start: 0,
         count: 1
       }
@@ -96,7 +111,52 @@ describe('Test playlists search', function () {
       expect(body.data).to.have.lengthOf(1)
 
       const playlist = body.data[0]
-      expect(playlist.displayName).to.equal('Johan & Anna Libert musics')
+      expect(playlist.displayName).to.equal('Johan & Anna Libert music videos')
+    }
+  })
+
+  it('Should filter by host', async function () {
+    {
+      const search = { search: 'tenma', host: server.host }
+      const body = await command.advancedPlaylistSearch({ search })
+      expect(body.total).to.equal(1)
+      expect(body.data).to.have.lengthOf(1)
+
+      const playlist = body.data[0]
+      expect(playlist.displayName).to.equal('Dr. Kenzo Tenma hospital videos')
+    }
+
+    {
+      const search = { search: 'Anna', host: 'example.com' }
+      const body = await command.advancedPlaylistSearch({ search })
+      expect(body.total).to.equal(0)
+      expect(body.data).to.have.lengthOf(0)
+    }
+
+    {
+      const search = { search: 'video', host: remoteServer.host }
+      const body = await command.advancedPlaylistSearch({ search })
+      expect(body.total).to.equal(1)
+      expect(body.data).to.have.lengthOf(1)
+
+      const playlist = body.data[0]
+      expect(playlist.displayName).to.equal('Johan & Anna Libert music videos')
+    }
+  })
+
+  it('Should filter by UUIDs', async function () {
+    for (const uuid of [ playlistUUID, playlistShortUUID ]) {
+      const body = await command.advancedPlaylistSearch({ search: { uuids: [ uuid ] } })
+
+      expect(body.total).to.equal(1)
+      expect(body.data[0].displayName).to.equal('Dr. Kenzo Tenma hospital videos')
+    }
+
+    {
+      const body = await command.advancedPlaylistSearch({ search: { uuids: [ 'dfd70b83-639f-4980-94af-304a56ab4b35' ] } })
+
+      expect(body.total).to.equal(0)
+      expect(body.data).to.have.lengthOf(0)
     }
   })
 
@@ -112,6 +172,6 @@ describe('Test playlists search', function () {
   })
 
   after(async function () {
-    await cleanupTests([ server ])
+    await cleanupTests([ server, remoteServer ])
   })
 })