]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/commitdiff
Introduce channels command
authorChocobozzz <me@florianbigard.com>
Fri, 9 Jul 2021 09:21:30 +0000 (11:21 +0200)
committerChocobozzz <me@florianbigard.com>
Tue, 20 Jul 2021 13:27:18 +0000 (15:27 +0200)
26 files changed:
server/tests/api/check-params/users.ts
server/tests/api/check-params/video-channels.ts
server/tests/api/notifications/user-notifications.ts
server/tests/api/redundancy/redundancy-constraints.ts
server/tests/api/search/search-activitypub-video-channels.ts
server/tests/api/search/search-activitypub-videos.ts
server/tests/api/search/search-channels.ts
server/tests/api/server/plugins.ts
server/tests/api/server/stats.ts
server/tests/api/users/users-multiple-servers.ts
server/tests/api/users/users.ts
server/tests/api/videos/multiple-servers.ts
server/tests/api/videos/video-channels.ts
server/tests/api/videos/video-playlists.ts
server/tests/cli/peertube.ts
server/tests/cli/update-host.ts
server/tests/client.ts
server/tests/misc-endpoints.ts
shared/extra-utils/server/servers.ts
shared/extra-utils/shared/abstract-command.ts
shared/extra-utils/videos/channels-command.ts [new file with mode: 0644]
shared/extra-utils/videos/channels.ts [new file with mode: 0644]
shared/extra-utils/videos/index.ts
shared/extra-utils/videos/video-channels.ts [deleted file]
shared/models/videos/channel/index.ts
shared/models/videos/channel/video-channel-create-result.model.ts [new file with mode: 0644]

index da0f55bf8174f93024cb66cc4543f94b778e2afc..88fc8e8b168557b7a1bef448233fc30b3c99cbc4 100644 (file)
@@ -5,7 +5,6 @@ import { omit } from 'lodash'
 import { User, UserRole, VideoCreateResult } from '../../../../shared'
 import { HttpStatusCode } from '../../../../shared/core-utils/miscs/http-error-codes'
 import {
-  addVideoChannel,
   blockUser,
   buildAbsoluteFixturePath,
   cleanupTests,
@@ -1041,8 +1040,8 @@ describe('Test users API validators', function () {
     })
 
     it('Should fail with an existing channel', async function () {
-      const videoChannelAttributesArg = { name: 'existing_channel', displayName: 'hello', description: 'super description' }
-      await addVideoChannel(server.url, server.accessToken, videoChannelAttributesArg)
+      const attributes = { name: 'existing_channel', displayName: 'hello', description: 'super description' }
+      await server.channelsCommand.create({ attributes })
 
       const fields = immutableAssign(baseCorrectParams, { channel: { name: 'existing_channel', displayName: 'toto' } })
 
index 5c02afd31d9fda8410ef4bad99bed4c1f8c9a708..d29346dc3f048c14654270754fef8c89cb518d53 100644 (file)
@@ -6,11 +6,10 @@ import { omit } from 'lodash'
 import { HttpStatusCode } from '../../../../shared/core-utils/miscs/http-error-codes'
 import {
   buildAbsoluteFixturePath,
+  ChannelsCommand,
   cleanupTests,
   createUser,
-  deleteVideoChannel,
   flushAndRunServer,
-  getAccountVideoChannelsList,
   immutableAssign,
   makeGetRequest,
   makePostBodyRequest,
@@ -33,6 +32,7 @@ describe('Test video channels API validator', function () {
   const videoChannelPath = '/api/v1/video-channels'
   let server: ServerInfo
   let accessTokenUser: string
+  let command: ChannelsCommand
 
   // ---------------------------------------------------------------
 
@@ -52,6 +52,8 @@ describe('Test video channels API validator', function () {
       await createUser({ url: server.url, accessToken: server.accessToken, username: user.username, password: user.password })
       accessTokenUser = await userLogin(server, user)
     }
+
+    command = server.channelsCommand
   })
 
   describe('When listing a video channels', function () {
@@ -84,7 +86,7 @@ describe('Test video channels API validator', function () {
     })
 
     it('Should fail with a unknown account', async function () {
-      await getAccountVideoChannelsList({ url: server.url, accountName: 'unknown', specialStatus: HttpStatusCode.NOT_FOUND_404 })
+      await server.channelsCommand.listByAccount({ accountName: 'unknown', expectedStatus: HttpStatusCode.NOT_FOUND_404 })
     })
 
     it('Should succeed with the correct parameters', async function () {
@@ -327,23 +329,23 @@ describe('Test video channels API validator', function () {
 
   describe('When deleting a video channel', function () {
     it('Should fail with a non authenticated user', async function () {
-      await deleteVideoChannel(server.url, 'coucou', 'super_channel', HttpStatusCode.UNAUTHORIZED_401)
+      await command.delete({ token: 'coucou', channelName: 'super_channel', expectedStatus: HttpStatusCode.UNAUTHORIZED_401 })
     })
 
     it('Should fail with another authenticated user', async function () {
-      await deleteVideoChannel(server.url, accessTokenUser, 'super_channel', HttpStatusCode.FORBIDDEN_403)
+      await command.delete({ token: accessTokenUser, channelName: 'super_channel', expectedStatus: HttpStatusCode.FORBIDDEN_403 })
     })
 
     it('Should fail with an unknown video channel id', async function () {
-      await deleteVideoChannel(server.url, server.accessToken, 'super_channel2', HttpStatusCode.NOT_FOUND_404)
+      await command.delete({ channelName: 'super_channel2', expectedStatus: HttpStatusCode.NOT_FOUND_404 })
     })
 
     it('Should succeed with the correct parameters', async function () {
-      await deleteVideoChannel(server.url, server.accessToken, 'super_channel')
+      await command.delete({ channelName: 'super_channel' })
     })
 
     it('Should fail to delete the last user video channel', async function () {
-      await deleteVideoChannel(server.url, server.accessToken, 'root_channel', HttpStatusCode.CONFLICT_409)
+      await command.delete({ channelName: 'root_channel', expectedStatus: HttpStatusCode.CONFLICT_409 })
     })
   })
 
index a9315c818f7945f9979637d697230acf5a71256c..1d159c48f41b1e792736ddb3c69ee7665bedcb1c 100644 (file)
@@ -17,7 +17,6 @@ import {
   ServerInfo,
   updateMyUser,
   updateVideo,
-  updateVideoChannel,
   uploadRandomVideoOnServers,
   wait,
   waitJobs
@@ -404,7 +403,11 @@ describe('Test user notifications', function () {
         displayName: 'super root 2 name'
       })
 
-      await updateVideoChannel(servers[0].url, userAccessToken, 'user_1_channel', { displayName: myChannelName })
+      await servers[0].channelsCommand.update({
+        token: userAccessToken,
+        channelName: 'user_1_channel',
+        attributes: { displayName: myChannelName }
+      })
     })
 
     it('Should notify when a local channel is following one of our channel', async function () {
index a666976b3865e2284262144e5e77e055225aad74..500b967473634f0d6aa359dfa2e62b19467dfecf 100644 (file)
@@ -1,6 +1,7 @@
 /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
 
 import 'mocha'
+import { expect } from 'chai'
 import {
   cleanupTests,
   flushAndRunServer,
@@ -15,8 +16,6 @@ import {
 } from '@shared/extra-utils'
 import { VideoPrivacy } from '@shared/models'
 
-const expect = chai.expect
-
 describe('Test redundancy constraints', function () {
   let remoteServer: ServerInfo
   let localServer: ServerInfo
index cf5158b6670a38a2b8c255ce987f2060e9f57323..83be9cd1eb7d00117c7fc519b378ab3de629f55c 100644 (file)
@@ -3,19 +3,15 @@
 import 'mocha'
 import * as chai from 'chai'
 import {
-  addVideoChannel,
   cleanupTests,
   createUser,
-  deleteVideoChannel,
   flushAndRunMultipleServers,
-  getVideoChannelsList,
   getVideoChannelVideos,
   SearchCommand,
   ServerInfo,
   setAccessTokensToServers,
   updateMyUser,
   updateVideo,
-  updateVideoChannel,
   uploadVideo,
   userLogin,
   wait,
@@ -45,7 +41,7 @@ describe('Test ActivityPub video channels search', function () {
         name: 'channel1_server1',
         displayName: 'Channel 1 server 1'
       }
-      await addVideoChannel(servers[0].url, servers[0].accessToken, channel)
+      await servers[0].channelsCommand.create({ attributes: channel })
     }
 
     {
@@ -57,8 +53,8 @@ describe('Test ActivityPub video channels search', function () {
         name: 'channel1_server2',
         displayName: 'Channel 1 server 2'
       }
-      const resChannel = await addVideoChannel(servers[1].url, userServer2Token, channel)
-      channelIdServer2 = resChannel.body.videoChannel.id
+      const created = await servers[1].channelsCommand.create({ token: userServer2Token, attributes: channel })
+      channelIdServer2 = created.id
 
       const res = await uploadVideo(servers[1].url, userServer2Token, { name: 'video 1 server 2', channelId: channelIdServer2 })
       videoServer2UUID = res.body.video.uuid
@@ -143,12 +139,12 @@ describe('Test ActivityPub video channels search', function () {
   })
 
   it('Should not list this remote video channel', async function () {
-    const res = await getVideoChannelsList(servers[0].url, 0, 5)
-    expect(res.body.total).to.equal(3)
-    expect(res.body.data).to.have.lengthOf(3)
-    expect(res.body.data[0].name).to.equal('channel1_server1')
-    expect(res.body.data[1].name).to.equal('user1_server1_channel')
-    expect(res.body.data[2].name).to.equal('root_channel')
+    const body = await servers[0].channelsCommand.list()
+    expect(body.total).to.equal(3)
+    expect(body.data).to.have.lengthOf(3)
+    expect(body.data[0].name).to.equal('channel1_server1')
+    expect(body.data[1].name).to.equal('user1_server1_channel')
+    expect(body.data[2].name).to.equal('root_channel')
   })
 
   it('Should list video channel videos of server 2 without token', async function () {
@@ -171,7 +167,11 @@ describe('Test ActivityPub video channels search', function () {
   it('Should update video channel of server 2, and refresh it on server 1', async function () {
     this.timeout(60000)
 
-    await updateVideoChannel(servers[1].url, userServer2Token, 'channel1_server2', { displayName: 'channel updated' })
+    await servers[1].channelsCommand.update({
+      token: userServer2Token,
+      channelName: 'channel1_server2',
+      attributes: { displayName: 'channel updated' }
+    })
     await updateMyUser({ url: servers[1].url, accessToken: userServer2Token, displayName: 'user updated' })
 
     await waitJobs(servers)
@@ -217,7 +217,7 @@ describe('Test ActivityPub video channels search', function () {
   it('Should delete video channel of server 2, and delete it on server 1', async function () {
     this.timeout(60000)
 
-    await deleteVideoChannel(servers[1].url, userServer2Token, 'channel1_server2')
+    await servers[1].channelsCommand.delete({ token: userServer2Token, channelName: 'channel1_server2' })
 
     await waitJobs(servers)
     // Expire video
index 7c64552581a1bf066ce8dbb088a2049004bd3e75..403c840105f758edba43545e04cdafb7b2c4af53 100644 (file)
@@ -3,7 +3,6 @@
 import 'mocha'
 import * as chai from 'chai'
 import {
-  addVideoChannel,
   cleanupTests,
   flushAndRunMultipleServers,
   getVideosList,
@@ -123,8 +122,8 @@ describe('Test ActivityPub videos search', function () {
       name: 'super_channel',
       displayName: 'super channel'
     }
-    const resChannel = await addVideoChannel(servers[1].url, servers[1].accessToken, channelAttributes)
-    const videoChannelId = resChannel.body.videoChannel.id
+    const created = await servers[1].channelsCommand.create({ attributes: channelAttributes })
+    const videoChannelId = created.id
 
     const attributes = {
       name: 'updated',
index 307bc063d0cbfcd760f4e635c70e9c10f592dc70..6c9ee73cee8d00595ccd6287de72b2655c8d1f95 100644 (file)
@@ -2,15 +2,7 @@
 
 import 'mocha'
 import * as chai from 'chai'
-import {
-  addVideoChannel,
-  cleanupTests,
-  createUser,
-  flushAndRunServer,
-  SearchCommand,
-  ServerInfo,
-  setAccessTokensToServers
-} from '@shared/extra-utils'
+import { cleanupTests, createUser, flushAndRunServer, SearchCommand, ServerInfo, setAccessTokensToServers } from '@shared/extra-utils'
 import { VideoChannel } from '@shared/models'
 
 const expect = chai.expect
@@ -32,7 +24,7 @@ describe('Test channels search', function () {
         name: 'squall_channel',
         displayName: 'Squall channel'
       }
-      await addVideoChannel(server.url, server.accessToken, channel)
+      await server.channelsCommand.create({ attributes: channel })
     }
 
     command = server.searchCommand
index 528bbbe58ed5c66aedf7c7b961a2be8fa708cfa3..e22ecfad957e9b7aff59946152982410303157b9 100644 (file)
@@ -37,6 +37,8 @@ describe('Test plugins', function () {
     }
     server = await flushAndRunServer(1, configOverride)
     await setAccessTokensToServers([ server ])
+
+    command = server.pluginsCommand
   })
 
   it('Should list and search available plugins and themes', async function () {
index c877a65eb63736cb86519920593a9ae8a427ffbd..9c954c347bbe255a43bd6f504bddac4cbfb50b5d 100644 (file)
@@ -3,7 +3,6 @@
 import 'mocha'
 import * as chai from 'chai'
 import {
-  addVideoChannel,
   addVideoCommentThread,
   cleanupTests,
   createUser,
@@ -143,12 +142,12 @@ describe('Test stats (excluding redundancy)', function () {
     }
 
     {
-      const channelAttributes = {
+      const attributes = {
         name: 'stats_channel',
         displayName: 'My stats channel'
       }
-      const resChannel = await addVideoChannel(server.url, server.accessToken, channelAttributes)
-      channelId = resChannel.body.videoChannel.id
+      const created = await server.channelsCommand.create({ attributes })
+      channelId = created.id
 
       const data = await server.statsCommand.get()
 
index 03fbfabebd87cd631399233ee1298231fa5b69b5..47056be785909a61fb55f7a09e5dd40ba49e395a 100644 (file)
@@ -12,7 +12,6 @@ import {
   flushAndRunMultipleServers,
   getAccountVideos,
   getMyUserInformation,
-  getVideoChannelsList,
   removeUser,
   ServerInfo,
   setAccessTokensToServers,
@@ -23,7 +22,7 @@ import {
   userLogin,
   waitJobs
 } from '@shared/extra-utils'
-import { User, VideoChannel } from '@shared/models'
+import { User } from '@shared/models'
 
 const expect = chai.expect
 
@@ -199,10 +198,8 @@ describe('Test users with multiple servers', function () {
       const accountDeleted = body.data.find(a => a.name === 'user1' && a.host === 'localhost:' + servers[0].port)
       expect(accountDeleted).not.to.be.undefined
 
-      const resVideoChannels = await getVideoChannelsList(server.url, 0, 10)
-      const videoChannelDeleted = resVideoChannels.body.data.find(a => {
-        return a.displayName === 'Main user1 channel' && a.host === 'localhost:' + servers[0].port
-      }) as VideoChannel
+      const { data } = await server.channelsCommand.list()
+      const videoChannelDeleted = data.find(a => a.displayName === 'Main user1 channel' && a.host === 'localhost:' + servers[0].port)
       expect(videoChannelDeleted).not.to.be.undefined
     }
 
@@ -216,10 +213,8 @@ describe('Test users with multiple servers', function () {
       const accountDeleted = body.data.find(a => a.name === 'user1' && a.host === 'localhost:' + servers[0].port)
       expect(accountDeleted).to.be.undefined
 
-      const resVideoChannels = await getVideoChannelsList(server.url, 0, 10)
-      const videoChannelDeleted = resVideoChannels.body.data.find(a => {
-        return a.name === 'Main user1 channel' && a.host === 'localhost:' + servers[0].port
-      }) as VideoChannel
+      const { data } = await server.channelsCommand.list()
+      const videoChannelDeleted = data.find(a => a.name === 'Main user1 channel' && a.host === 'localhost:' + servers[0].port)
       expect(videoChannelDeleted).to.be.undefined
     }
   })
index 4b9056306bc53bab21d124ab2da81f48903b0b38..ed670b3c9270f03baa1e330d72e7638019485a63 100644 (file)
@@ -18,7 +18,6 @@ import {
   getUserInformation,
   getUsersList,
   getUsersListPaginationAndSort,
-  getVideoChannel,
   getVideosList,
   killallServers,
   login,
@@ -864,9 +863,9 @@ describe('Test users', function () {
     })
 
     it('Should have created the channel', async function () {
-      const res = await getVideoChannel(server.url, 'my_user_15_channel')
+      const { displayName } = await server.channelsCommand.get({ channelName: 'my_user_15_channel' })
 
-      expect(res.body.displayName).to.equal('my channel rocks')
+      expect(displayName).to.equal('my channel rocks')
     })
 
     it('Should remove me', async function () {
index a8c8a889b11e8774f3be5322018fafe69c6ec557..a59d5a8587768ad9ac12fce2d5524267b7283035 100644 (file)
@@ -5,7 +5,6 @@ import * as chai from 'chai'
 import * as request from 'supertest'
 import { HttpStatusCode } from '../../../../shared/core-utils/miscs/http-error-codes'
 import {
-  addVideoChannel,
   buildAbsoluteFixturePath,
   checkTmpIsEmpty,
   checkVideoFilesWereRemoved,
@@ -17,7 +16,6 @@ import {
   flushAndRunMultipleServers,
   getLocalVideos,
   getVideo,
-  getVideoChannelsList,
   getVideosList,
   rateVideo,
   removeVideo,
@@ -64,9 +62,9 @@ describe('Test multiple servers', function () {
         displayName: 'my channel',
         description: 'super channel'
       }
-      await addVideoChannel(servers[0].url, servers[0].accessToken, videoChannel)
-      const channelRes = await getVideoChannelsList(servers[0].url, 0, 1)
-      videoChannelId = channelRes.body.data[0].id
+      await servers[0].channelsCommand.create({ attributes: videoChannel })
+      const { data } = await servers[0].channelsCommand.list({ start: 0, count: 1 })
+      videoChannelId = data[0].id
     }
 
     // Server 1 and server 2 follow each other
index 8650987777f77745ea7d1cbe1f02d3a478626eb8..daf066eb1a06138efaaae6235026ba7b70733524 100644 (file)
@@ -7,43 +7,29 @@ import { ACTOR_IMAGES_SIZE } from '@server/initializers/constants'
 import {
   cleanupTests,
   createUser,
-  deleteVideoChannelImage,
   doubleFollow,
   flushAndRunMultipleServers,
   getActorImage,
   getVideo,
-  getVideoChannel,
   getVideoChannelVideos,
   setDefaultVideoChannel,
   testFileExistsOrNot,
   testImage,
   updateVideo,
-  updateVideoChannelImage,
   uploadVideo,
   userLogin,
   wait
 } from '../../../../shared/extra-utils'
-import {
-  addVideoChannel,
-  deleteVideoChannel,
-  getAccountVideoChannelsList,
-  getMyUserInformation,
-  getVideoChannelsList,
-  ServerInfo,
-  setAccessTokensToServers,
-  updateVideoChannel,
-  viewVideo
-} from '../../../../shared/extra-utils/index'
+import { getMyUserInformation, ServerInfo, setAccessTokensToServers, viewVideo } from '../../../../shared/extra-utils/index'
 import { waitJobs } from '../../../../shared/extra-utils/server/jobs'
 import { User, Video, VideoChannel, VideoDetails } from '../../../../shared/index'
 
 const expect = chai.expect
 
 async function findChannel (server: ServerInfo, channelId: number) {
-  const res = await getVideoChannelsList(server.url, 0, 5, '-name')
-  const videoChannel = res.body.data.find(c => c.id === channelId)
+  const body = await server.channelsCommand.list({ sort: '-name' })
 
-  return videoChannel as VideoChannel
+  return body.data.find(c => c.id === channelId)
 }
 
 describe('Test video channels', function () {
@@ -69,11 +55,11 @@ describe('Test video channels', function () {
   })
 
   it('Should have one video channel (created with root)', async () => {
-    const res = await getVideoChannelsList(servers[0].url, 0, 2)
+    const body = await servers[0].channelsCommand.list({ start: 0, count: 2 })
 
-    expect(res.body.total).to.equal(1)
-    expect(res.body.data).to.be.an('array')
-    expect(res.body.data).to.have.lengthOf(1)
+    expect(body.total).to.equal(1)
+    expect(body.data).to.be.an('array')
+    expect(body.data).to.have.lengthOf(1)
   })
 
   it('Should create another video channel', async function () {
@@ -86,8 +72,8 @@ describe('Test video channels', function () {
         description: 'super video channel description',
         support: 'super video channel support text'
       }
-      const res = await addVideoChannel(servers[0].url, servers[0].accessToken, videoChannel)
-      secondVideoChannelId = res.body.videoChannel.id
+      const created = await servers[0].channelsCommand.create({ attributes: videoChannel })
+      secondVideoChannelId = created.id
     }
 
     // The channel is 1 is propagated to servers 2
@@ -120,16 +106,14 @@ describe('Test video channels', function () {
   })
 
   it('Should have two video channels when getting account channels on server 1', async function () {
-    const res = await getAccountVideoChannelsList({
-      url: servers[0].url,
-      accountName
-    })
+    const body = await servers[0].channelsCommand.listByAccount({ accountName })
+    expect(body.total).to.equal(2)
 
-    expect(res.body.total).to.equal(2)
-    expect(res.body.data).to.be.an('array')
-    expect(res.body.data).to.have.lengthOf(2)
+    const videoChannels = body.data
+
+    expect(videoChannels).to.be.an('array')
+    expect(videoChannels).to.have.lengthOf(2)
 
-    const videoChannels = res.body.data
     expect(videoChannels[0].name).to.equal('root_channel')
     expect(videoChannels[0].displayName).to.equal('Main root channel')
 
@@ -141,79 +125,69 @@ describe('Test video channels', function () {
 
   it('Should paginate and sort account channels', async function () {
     {
-      const res = await getAccountVideoChannelsList({
-        url: servers[0].url,
+      const body = await servers[0].channelsCommand.listByAccount({
         accountName,
         start: 0,
         count: 1,
         sort: 'createdAt'
       })
 
-      expect(res.body.total).to.equal(2)
-      expect(res.body.data).to.have.lengthOf(1)
+      expect(body.total).to.equal(2)
+      expect(body.data).to.have.lengthOf(1)
 
-      const videoChannel: VideoChannel = res.body.data[0]
+      const videoChannel: VideoChannel = body.data[0]
       expect(videoChannel.name).to.equal('root_channel')
     }
 
     {
-      const res = await getAccountVideoChannelsList({
-        url: servers[0].url,
+      const body = await servers[0].channelsCommand.listByAccount({
         accountName,
         start: 0,
         count: 1,
         sort: '-createdAt'
       })
 
-      expect(res.body.total).to.equal(2)
-      expect(res.body.data).to.have.lengthOf(1)
-
-      const videoChannel: VideoChannel = res.body.data[0]
-      expect(videoChannel.name).to.equal('second_video_channel')
+      expect(body.total).to.equal(2)
+      expect(body.data).to.have.lengthOf(1)
+      expect(body.data[0].name).to.equal('second_video_channel')
     }
 
     {
-      const res = await getAccountVideoChannelsList({
-        url: servers[0].url,
+      const body = await servers[0].channelsCommand.listByAccount({
         accountName,
         start: 1,
         count: 1,
         sort: '-createdAt'
       })
 
-      expect(res.body.total).to.equal(2)
-      expect(res.body.data).to.have.lengthOf(1)
-
-      const videoChannel: VideoChannel = res.body.data[0]
-      expect(videoChannel.name).to.equal('root_channel')
+      expect(body.total).to.equal(2)
+      expect(body.data).to.have.lengthOf(1)
+      expect(body.data[0].name).to.equal('root_channel')
     }
   })
 
   it('Should have one video channel when getting account channels on server 2', async function () {
-    const res = await getAccountVideoChannelsList({
-      url: servers[1].url,
-      accountName
-    })
+    const body = await servers[1].channelsCommand.listByAccount({ accountName })
 
-    expect(res.body.total).to.equal(1)
-    expect(res.body.data).to.be.an('array')
-    expect(res.body.data).to.have.lengthOf(1)
+    expect(body.total).to.equal(1)
+    expect(body.data).to.be.an('array')
+    expect(body.data).to.have.lengthOf(1)
 
-    const videoChannels = res.body.data
-    expect(videoChannels[0].name).to.equal('second_video_channel')
-    expect(videoChannels[0].displayName).to.equal('second video channel')
-    expect(videoChannels[0].description).to.equal('super video channel description')
-    expect(videoChannels[0].support).to.equal('super video channel support text')
+    const videoChannel = body.data[0]
+    expect(videoChannel.name).to.equal('second_video_channel')
+    expect(videoChannel.displayName).to.equal('second video channel')
+    expect(videoChannel.description).to.equal('super video channel description')
+    expect(videoChannel.support).to.equal('super video channel support text')
   })
 
   it('Should list video channels', async function () {
-    const res = await getVideoChannelsList(servers[0].url, 1, 1, '-name')
+    const body = await servers[0].channelsCommand.list({ start: 1, count: 1, sort: '-name' })
 
-    expect(res.body.total).to.equal(2)
-    expect(res.body.data).to.be.an('array')
-    expect(res.body.data).to.have.lengthOf(1)
-    expect(res.body.data[0].name).to.equal('root_channel')
-    expect(res.body.data[0].displayName).to.equal('Main root channel')
+    expect(body.total).to.equal(2)
+    expect(body.data).to.be.an('array')
+    expect(body.data).to.have.lengthOf(1)
+    expect(body.data[0].name).to.equal('root_channel')
+    expect(body.data[0].displayName).to.equal('Main root channel')
   })
 
   it('Should update video channel', async function () {
@@ -225,22 +199,23 @@ describe('Test video channels', function () {
       support: 'support updated'
     }
 
-    await updateVideoChannel(servers[0].url, servers[0].accessToken, 'second_video_channel', videoChannelAttributes)
+    await servers[0].channelsCommand.update({ channelName: 'second_video_channel', attributes: videoChannelAttributes })
 
     await waitJobs(servers)
   })
 
   it('Should have video channel updated', async function () {
     for (const server of servers) {
-      const res = await getVideoChannelsList(server.url, 0, 1, '-name')
-
-      expect(res.body.total).to.equal(2)
-      expect(res.body.data).to.be.an('array')
-      expect(res.body.data).to.have.lengthOf(1)
-      expect(res.body.data[0].name).to.equal('second_video_channel')
-      expect(res.body.data[0].displayName).to.equal('video channel updated')
-      expect(res.body.data[0].description).to.equal('video channel description updated')
-      expect(res.body.data[0].support).to.equal('support updated')
+      const body = await server.channelsCommand.list({ start: 0, count: 1, sort: '-name' })
+
+      expect(body.total).to.equal(2)
+      expect(body.data).to.be.an('array')
+      expect(body.data).to.have.lengthOf(1)
+
+      expect(body.data[0].name).to.equal('second_video_channel')
+      expect(body.data[0].displayName).to.equal('video channel updated')
+      expect(body.data[0].description).to.equal('video channel description updated')
+      expect(body.data[0].support).to.equal('support updated')
     }
   })
 
@@ -261,7 +236,7 @@ describe('Test video channels', function () {
       bulkVideosSupportUpdate: true
     }
 
-    await updateVideoChannel(servers[0].url, servers[0].accessToken, 'second_video_channel', videoChannelAttributes)
+    await servers[0].channelsCommand.update({ channelName: 'second_video_channel', attributes: videoChannelAttributes })
 
     await waitJobs(servers)
 
@@ -278,10 +253,8 @@ describe('Test video channels', function () {
 
     const fixture = 'avatar.png'
 
-    await updateVideoChannelImage({
-      url: servers[0].url,
-      accessToken: servers[0].accessToken,
-      videoChannelName: 'second_video_channel',
+    await servers[0].channelsCommand.updateImage({
+      channelName: 'second_video_channel',
       fixture,
       type: 'avatar'
     })
@@ -306,10 +279,8 @@ describe('Test video channels', function () {
 
     const fixture = 'banner.jpg'
 
-    await updateVideoChannelImage({
-      url: servers[0].url,
-      accessToken: servers[0].accessToken,
-      videoChannelName: 'second_video_channel',
+    await servers[0].channelsCommand.updateImage({
+      channelName: 'second_video_channel',
       fixture,
       type: 'banner'
     })
@@ -317,8 +288,7 @@ describe('Test video channels', function () {
     await waitJobs(servers)
 
     for (const server of servers) {
-      const res = await getVideoChannel(server.url, 'second_video_channel@' + servers[0].host)
-      const videoChannel = res.body
+      const videoChannel = await server.channelsCommand.get({ channelName: 'second_video_channel@' + servers[0].host })
 
       bannerPaths[server.port] = videoChannel.banner.path
       await testImage(server.url, 'banner-resized', bannerPaths[server.port])
@@ -333,12 +303,7 @@ describe('Test video channels', function () {
   it('Should delete the video channel avatar', async function () {
     this.timeout(15000)
 
-    await deleteVideoChannelImage({
-      url: servers[0].url,
-      accessToken: servers[0].accessToken,
-      videoChannelName: 'second_video_channel',
-      type: 'avatar'
-    })
+    await servers[0].channelsCommand.deleteImage({ channelName: 'second_video_channel', type: 'avatar' })
 
     await waitJobs(servers)
 
@@ -353,12 +318,7 @@ describe('Test video channels', function () {
   it('Should delete the video channel banner', async function () {
     this.timeout(15000)
 
-    await deleteVideoChannelImage({
-      url: servers[0].url,
-      accessToken: servers[0].accessToken,
-      videoChannelName: 'second_video_channel',
-      type: 'banner'
-    })
+    await servers[0].channelsCommand.deleteImage({ channelName: 'second_video_channel', type: 'banner' })
 
     await waitJobs(servers)
 
@@ -411,23 +371,23 @@ describe('Test video channels', function () {
   })
 
   it('Should delete video channel', async function () {
-    await deleteVideoChannel(servers[0].url, servers[0].accessToken, 'second_video_channel')
+    await servers[0].channelsCommand.delete({ channelName: 'second_video_channel' })
   })
 
   it('Should have video channel deleted', async function () {
-    const res = await getVideoChannelsList(servers[0].url, 0, 10)
+    const body = await servers[0].channelsCommand.list({ start: 0, count: 10 })
 
-    expect(res.body.total).to.equal(1)
-    expect(res.body.data).to.be.an('array')
-    expect(res.body.data).to.have.lengthOf(1)
-    expect(res.body.data[0].displayName).to.equal('Main root channel')
+    expect(body.total).to.equal(1)
+    expect(body.data).to.be.an('array')
+    expect(body.data).to.have.lengthOf(1)
+    expect(body.data[0].displayName).to.equal('Main root channel')
   })
 
   it('Should create the main channel with an uuid if there is a conflict', async function () {
     {
       const videoChannel = { name: 'toto_channel', displayName: 'My toto channel' }
-      const res = await addVideoChannel(servers[0].url, servers[0].accessToken, videoChannel)
-      totoChannel = res.body.videoChannel.id
+      const created = await servers[0].channelsCommand.create({ attributes: videoChannel })
+      totoChannel = created.id
     }
 
     {
@@ -444,15 +404,9 @@ describe('Test video channels', function () {
     this.timeout(10000)
 
     {
-      const res = await getAccountVideoChannelsList({
-        url: servers[0].url,
-        accountName,
-        withStats: true
-      })
-
-      const channels: VideoChannel[] = res.body.data
+      const { data } = await servers[0].channelsCommand.listByAccount({ accountName, withStats: true })
 
-      for (const channel of channels) {
+      for (const channel of data) {
         expect(channel).to.haveOwnProperty('viewsPerDay')
         expect(channel.viewsPerDay).to.have.length(30 + 1) // daysPrior + today
 
@@ -471,26 +425,17 @@ describe('Test video channels', function () {
       // Wait the repeatable job
       await wait(8000)
 
-      const res = await getAccountVideoChannelsList({
-        url: servers[0].url,
-        accountName,
-        withStats: true
-      })
-      const channelWithView = res.body.data.find((channel: VideoChannel) => channel.id === servers[0].videoChannel.id)
+      const { data } = await servers[0].channelsCommand.listByAccount({ accountName, withStats: true })
+      const channelWithView = data.find(channel => channel.id === servers[0].videoChannel.id)
       expect(channelWithView.viewsPerDay.slice(-1)[0].views).to.equal(2)
     }
   })
 
   it('Should report correct videos count', async function () {
-    const res = await getAccountVideoChannelsList({
-      url: servers[0].url,
-      accountName,
-      withStats: true
-    })
-    const channels: VideoChannel[] = res.body.data
+    const { data } = await servers[0].channelsCommand.listByAccount({ accountName, withStats: true })
 
-    const totoChannel = channels.find(c => c.name === 'toto_channel')
-    const rootChannel = channels.find(c => c.name === 'root_channel')
+    const totoChannel = data.find(c => c.name === 'toto_channel')
+    const rootChannel = data.find(c => c.name === 'root_channel')
 
     expect(rootChannel.videosCount).to.equal(1)
     expect(totoChannel.videosCount).to.equal(0)
@@ -498,26 +443,18 @@ describe('Test video channels', function () {
 
   it('Should search among account video channels', async function () {
     {
-      const res = await getAccountVideoChannelsList({
-        url: servers[0].url,
-        accountName,
-        search: 'root'
-      })
-      expect(res.body.total).to.equal(1)
+      const body = await servers[0].channelsCommand.listByAccount({ accountName, search: 'root' })
+      expect(body.total).to.equal(1)
 
-      const channels = res.body.data
+      const channels = body.data
       expect(channels).to.have.lengthOf(1)
     }
 
     {
-      const res = await getAccountVideoChannelsList({
-        url: servers[0].url,
-        accountName,
-        search: 'does not exist'
-      })
-      expect(res.body.total).to.equal(0)
+      const body = await servers[0].channelsCommand.listByAccount({ accountName, search: 'does not exist' })
+      expect(body.total).to.equal(0)
 
-      const channels = res.body.data
+      const channels = body.data
       expect(channels).to.have.lengthOf(0)
     }
   })
@@ -529,30 +466,20 @@ describe('Test video channels', function () {
     await waitJobs(servers)
 
     for (const server of servers) {
-      const res = await getAccountVideoChannelsList({
-        url: server.url,
-        accountName,
-        sort: '-updatedAt'
-      })
+      const { data } = await server.channelsCommand.listByAccount({ accountName, sort: '-updatedAt' })
 
-      const channels: VideoChannel[] = res.body.data
-      expect(channels[0].name).to.equal('toto_channel')
-      expect(channels[1].name).to.equal('root_channel')
+      expect(data[0].name).to.equal('toto_channel')
+      expect(data[1].name).to.equal('root_channel')
     }
 
     await uploadVideo(servers[0].url, servers[0].accessToken, { channelId: servers[0].videoChannel.id })
     await waitJobs(servers)
 
     for (const server of servers) {
-      const res = await getAccountVideoChannelsList({
-        url: server.url,
-        accountName,
-        sort: '-updatedAt'
-      })
+      const { data } = await server.channelsCommand.listByAccount({ accountName, sort: '-updatedAt' })
 
-      const channels: VideoChannel[] = res.body.data
-      expect(channels[0].name).to.equal('root_channel')
-      expect(channels[1].name).to.equal('toto_channel')
+      expect(data[0].name).to.equal('root_channel')
+      expect(data[1].name).to.equal('toto_channel')
     }
   })
 
index 4de6b3abfbe5b733c11cf714f8c1a046b4d8de09..2bb019348929a9645f2b1139d1f7b764df7b16c9 100644 (file)
@@ -4,11 +4,9 @@ import 'mocha'
 import * as chai from 'chai'
 import { HttpStatusCode } from '@shared/core-utils'
 import {
-  addVideoChannel,
   checkPlaylistFilesWereRemoved,
   cleanupTests,
   createUser,
-  deleteVideoChannel,
   doubleFollow,
   flushAndRunMultipleServers,
   generateUserAccessToken,
@@ -1096,20 +1094,19 @@ describe('Test video playlists', function () {
     it('Should delete a channel and put the associated playlist in private mode', async function () {
       this.timeout(30000)
 
-      const res = await addVideoChannel(servers[0].url, servers[0].accessToken, { name: 'super_channel', displayName: 'super channel' })
-      const videoChannelId = res.body.videoChannel.id
+      const channel = await servers[0].channelsCommand.create({ attributes: { name: 'super_channel', displayName: 'super channel' } })
 
       const playlistCreated = await commands[0].create({
         attributes: {
           displayName: 'channel playlist',
           privacy: VideoPlaylistPrivacy.PUBLIC,
-          videoChannelId
+          videoChannelId: channel.id
         }
       })
 
       await waitJobs(servers)
 
-      await deleteVideoChannel(servers[0].url, servers[0].accessToken, 'super_channel')
+      await servers[0].channelsCommand.delete({ channelName: 'super_channel' })
 
       await waitJobs(servers)
 
index 64a93ebb552f34028cfeca41685277f7174d5512..ef7ab5bd5baeee4a9ea3ede4df00ed7233ea3037 100644 (file)
@@ -4,7 +4,6 @@ import 'mocha'
 import { expect } from 'chai'
 import { Video, VideoDetails } from '../../../shared'
 import {
-  addVideoChannel,
   areHttpImportTestsDisabled,
   buildAbsoluteFixturePath,
   cleanupTests,
@@ -44,8 +43,8 @@ describe('Test CLI wrapper', function () {
     userAccessToken = await userLogin(server, { username: 'user_1', password: 'super_password' })
 
     {
-      const args = { name: 'user_channel', displayName: 'User channel', support: 'super support text' }
-      await addVideoChannel(server.url, userAccessToken, args)
+      const attributes = { name: 'user_channel', displayName: 'User channel', support: 'super support text' }
+      await server.channelsCommand.create({ token: userAccessToken, attributes })
     }
 
     cliCommand = server.cliCommand
index f6131a99f0f4add024698e3f49eae5853030b622..09a3dd1e7a181c47d622e3da780ff405843628ff 100644 (file)
@@ -2,13 +2,11 @@
 
 import 'mocha'
 import {
-  addVideoChannel,
   addVideoCommentThread,
   cleanupTests,
   createUser,
   flushAndRunServer,
   getVideo,
-  getVideoChannelsList,
   getVideosList,
   killallServers,
   makeActivityPubGetRequest,
@@ -53,7 +51,7 @@ describe('Test update host scripts', function () {
       displayName: 'second video channel',
       description: 'super video channel description'
     }
-    await addVideoChannel(server.url, server.accessToken, videoChannel)
+    await server.channelsCommand.create({ attributes: videoChannel })
 
     // Create comments
     const text = 'my super first comment'
@@ -91,10 +89,10 @@ describe('Test update host scripts', function () {
   })
 
   it('Should have updated video channels url', async function () {
-    const res = await getVideoChannelsList(server.url, 0, 5, '-name')
-    expect(res.body.total).to.equal(3)
+    const { data, total } = await server.channelsCommand.list({ sort: '-name' })
+    expect(total).to.equal(3)
 
-    for (const channel of res.body.data) {
+    for (const channel of data) {
       const { body } = await makeActivityPubGetRequest(server.url, '/video-channels/' + channel.name)
 
       expect(body.id).to.equal('http://localhost:9002/video-channels/' + channel.name)
index 129f1e1c017923b10a90a9c42999bccda207edd2..1bdb2eb641e326c37a0d8a2b95597a3160449b60 100644 (file)
@@ -16,7 +16,6 @@ import {
   setAccessTokensToServers,
   setDefaultVideoChannel,
   updateMyUser,
-  updateVideoChannel,
   uploadVideo,
   waitJobs
 } from '../../shared/extra-utils'
@@ -63,7 +62,10 @@ describe('Test a client controllers', function () {
 
     await setDefaultVideoChannel(servers)
 
-    await updateVideoChannel(servers[0].url, servers[0].accessToken, servers[0].videoChannel.name, { description: channelDescription })
+    await servers[0].channelsCommand.update({
+      channelName: servers[0].videoChannel.name,
+      attributes: { description: channelDescription }
+    })
 
     // Video
 
index 09e5afcf9b4bc6c9fc58eb3032638f3798d520da..4b7b2163ddc2ea956f46a8f74e9f594f1a8006c6 100644 (file)
@@ -2,8 +2,8 @@
 
 import 'mocha'
 import * as chai from 'chai'
+import { HttpStatusCode } from '@shared/core-utils'
 import {
-  addVideoChannel,
   cleanupTests,
   createUser,
   flushAndRunServer,
@@ -13,7 +13,6 @@ import {
   uploadVideo
 } from '../../shared/extra-utils'
 import { VideoPrivacy } from '../../shared/models/videos'
-import { HttpStatusCode } from '@shared/core-utils'
 
 const expect = chai.expect
 
@@ -171,8 +170,8 @@ describe('Test misc endpoints', function () {
       await uploadVideo(server.url, server.accessToken, { name: 'video 2', nsfw: false })
       await uploadVideo(server.url, server.accessToken, { name: 'video 3', privacy: VideoPrivacy.PRIVATE })
 
-      await addVideoChannel(server.url, server.accessToken, { name: 'channel1', displayName: 'channel 1' })
-      await addVideoChannel(server.url, server.accessToken, { name: 'channel2', displayName: 'channel 2' })
+      await server.channelsCommand.create({ attributes: { name: 'channel1', displayName: 'channel 1' } })
+      await server.channelsCommand.create({ attributes: { name: 'channel2', displayName: 'channel 2' } })
 
       await createUser({ url: server.url, accessToken: server.accessToken, username: 'user1', password: 'password' })
       await createUser({ url: server.url, accessToken: server.accessToken, username: 'user2', password: 'password' })
index 6a1dadbccc311ee4f95f64bc4b0232c329b99304..68e10af5fd576e2377735c473b44fbebecf6a30b 100644 (file)
@@ -22,6 +22,7 @@ import {
   BlacklistCommand,
   CaptionsCommand,
   ChangeOwnershipCommand,
+  ChannelsCommand,
   HistoryCommand,
   ImportsCommand,
   LiveCommand,
@@ -119,6 +120,7 @@ interface ServerInfo {
   historyCommand?: HistoryCommand
   importsCommand?: ImportsCommand
   streamingPlaylistsCommand?: StreamingPlaylistsCommand
+  channelsCommand?: ChannelsCommand
 }
 
 function parallelTests () {
@@ -353,6 +355,7 @@ async function runServer (server: ServerInfo, configOverrideArg?: any, args = []
       server.historyCommand = new HistoryCommand(server)
       server.importsCommand = new ImportsCommand(server)
       server.streamingPlaylistsCommand = new StreamingPlaylistsCommand(server)
+      server.channelsCommand = new ChannelsCommand(server)
 
       res(server)
     })
index be368376f75d305560a9b95d01477d8134065a40..6a9ab1348d8c37b533e91085195cbb17c5c73ecf 100644 (file)
@@ -1,4 +1,6 @@
+import { isAbsolute, join } from 'path'
 import { HttpStatusCode } from '@shared/core-utils'
+import { root } from '../miscs'
 import {
   makeDeleteRequest,
   makeGetRequest,
@@ -146,6 +148,25 @@ abstract class AbstractCommand {
     })
   }
 
+  protected updateImageRequest (options: InternalCommonCommandOptions & {
+    fixture: string
+    fieldname: string
+  }) {
+    let filePath = ''
+    if (isAbsolute(options.fixture)) {
+      filePath = options.fixture
+    } else {
+      filePath = join(root(), 'server', 'tests', 'fixtures', options.fixture)
+    }
+
+    return this.postUploadRequest({
+      ...options,
+
+      fields: {},
+      attaches: { [options.fieldname]: filePath }
+    })
+  }
+
   private buildCommonRequestOptions (options: InternalCommonCommandOptions) {
     const { path } = options
 
diff --git a/shared/extra-utils/videos/channels-command.ts b/shared/extra-utils/videos/channels-command.ts
new file mode 100644 (file)
index 0000000..a98c5cc
--- /dev/null
@@ -0,0 +1,157 @@
+import { pick } from 'lodash'
+import { ResultList, VideoChannel, VideoChannelCreateResult } from '@shared/models'
+import { HttpStatusCode } from '../../core-utils/miscs/http-error-codes'
+import { VideoChannelCreate } from '../../models/videos/channel/video-channel-create.model'
+import { VideoChannelUpdate } from '../../models/videos/channel/video-channel-update.model'
+import { unwrapBody } from '../requests'
+import { AbstractCommand, OverrideCommandOptions } from '../shared'
+
+export class ChannelsCommand extends AbstractCommand {
+
+  list (options: OverrideCommandOptions & {
+    start?: number
+    count?: number
+    sort?: string
+    withStats?: boolean
+  } = {}) {
+    const path = '/api/v1/video-channels'
+
+    return this.getRequestBody<ResultList<VideoChannel>>({
+      ...options,
+
+      path,
+      query: pick(options, [ 'start', 'count', 'sort', 'withStats' ]),
+      implicitToken: false,
+      defaultExpectedStatus: HttpStatusCode.OK_200
+    })
+  }
+
+  listByAccount (options: OverrideCommandOptions & {
+    accountName: string
+    start?: number
+    count?: number
+    sort?: string
+    withStats?: boolean
+    search?: string
+  }) {
+    const { accountName, sort = 'createdAt' } = options
+    const path = '/api/v1/accounts/' + accountName + '/video-channels'
+
+    return this.getRequestBody<ResultList<VideoChannel>>({
+      ...options,
+
+      path,
+      query: { sort, ...pick(options, [ 'start', 'count', 'withStats', 'search' ]) },
+      implicitToken: false,
+      defaultExpectedStatus: HttpStatusCode.OK_200
+    })
+  }
+
+  async create (options: OverrideCommandOptions & {
+    attributes: VideoChannelCreate
+  }) {
+    const path = '/api/v1/video-channels/'
+
+    // Default attributes
+    const defaultAttributes = {
+      displayName: 'my super video channel',
+      description: 'my super channel description',
+      support: 'my super channel support'
+    }
+    const attributes = { ...defaultAttributes, ...options.attributes }
+
+    const body = await unwrapBody<{ videoChannel: VideoChannelCreateResult }>(this.postBodyRequest({
+      ...options,
+
+      path,
+      fields: attributes,
+      implicitToken: true,
+      defaultExpectedStatus: HttpStatusCode.OK_200
+    }))
+
+    return body.videoChannel
+  }
+
+  update (options: OverrideCommandOptions & {
+    channelName: string
+    attributes: VideoChannelUpdate
+  }) {
+    const { channelName, attributes } = options
+    const path = '/api/v1/video-channels/' + channelName
+
+    return this.putBodyRequest({
+      ...options,
+
+      path,
+      fields: attributes,
+      implicitToken: true,
+      defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204
+    })
+  }
+
+  delete (options: OverrideCommandOptions & {
+    channelName: string
+  }) {
+    const path = '/api/v1/video-channels/' + options.channelName
+
+    return this.deleteRequest({
+      ...options,
+
+      path,
+      implicitToken: true,
+      defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204
+    })
+  }
+
+  get (options: OverrideCommandOptions & {
+    channelName: string
+  }) {
+    const path = '/api/v1/video-channels/' + options.channelName
+
+    return this.getRequestBody<VideoChannel>({
+      ...options,
+
+      path,
+      implicitToken: false,
+      defaultExpectedStatus: HttpStatusCode.OK_200
+    })
+  }
+
+  updateImage (options: OverrideCommandOptions & {
+    fixture: string
+    channelName: string | number
+    type: 'avatar' | 'banner'
+  }) {
+    const { channelName, fixture, type } = options
+
+    const path = `/api/v1/video-channels/${channelName}/${type}/pick`
+
+    return this.updateImageRequest({
+      ...options,
+
+      path,
+      fixture,
+      fieldname: type + 'file',
+
+      implicitToken: true,
+      defaultExpectedStatus: HttpStatusCode.OK_200
+    })
+  }
+
+  deleteImage (options: OverrideCommandOptions & {
+    channelName: string | number
+    type: 'avatar' | 'banner'
+  }) {
+    const { channelName, type } = options
+
+    const path = `/api/v1/video-channels/${channelName}/${type}`
+
+    return this.deleteRequest({
+      ...options,
+
+      path,
+      implicitToken: true,
+      defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204
+    })
+  }
+}
diff --git a/shared/extra-utils/videos/channels.ts b/shared/extra-utils/videos/channels.ts
new file mode 100644 (file)
index 0000000..a77543c
--- /dev/null
@@ -0,0 +1,20 @@
+import { User } from '../../models/users/user.model'
+import { ServerInfo } from '../server/servers'
+import { getMyUserInformation } from '../users/users'
+
+function setDefaultVideoChannel (servers: ServerInfo[]) {
+  const tasks: Promise<any>[] = []
+
+  for (const server of servers) {
+    const p = getMyUserInformation(server.url, server.accessToken)
+      .then(res => { server.videoChannel = (res.body as User).videoChannels[0] })
+
+    tasks.push(p)
+  }
+
+  return Promise.all(tasks)
+}
+
+export {
+  setDefaultVideoChannel
+}
index f87ae8eea5763c7c9af3d2ff2a9adc211c61061a..3bc219281dd92807f37047ff3193aa7e0132f7d9 100644 (file)
@@ -1,7 +1,9 @@
 export * from './blacklist-command'
-export * from './captions'
 export * from './captions-command'
+export * from './captions'
 export * from './change-ownership-command'
+export * from './channels'
+export * from './channels-command'
 export * from './history-command'
 export * from './imports-command'
 export * from './live-command'
@@ -11,6 +13,5 @@ export * from './playlists'
 export * from './services-command'
 export * from './streaming-playlists-command'
 export * from './streaming-playlists'
-export * from './video-channels'
 export * from './video-comments'
 export * from './videos'
diff --git a/shared/extra-utils/videos/video-channels.ts b/shared/extra-utils/videos/video-channels.ts
deleted file mode 100644 (file)
index 0aab93e..0000000
+++ /dev/null
@@ -1,192 +0,0 @@
-/* eslint-disable @typescript-eslint/no-floating-promises */
-
-import * as request from 'supertest'
-import { VideoChannelUpdate } from '../../models/videos/channel/video-channel-update.model'
-import { VideoChannelCreate } from '../../models/videos/channel/video-channel-create.model'
-import { makeDeleteRequest, makeGetRequest, updateImageRequest } from '../requests/requests'
-import { ServerInfo } from '../server/servers'
-import { MyUser, User } from '../../models/users/user.model'
-import { getMyUserInformation } from '../users/users'
-import { HttpStatusCode } from '../../../shared/core-utils/miscs/http-error-codes'
-
-function getVideoChannelsList (url: string, start: number, count: number, sort?: string, withStats?: boolean) {
-  const path = '/api/v1/video-channels'
-
-  const req = request(url)
-    .get(path)
-    .query({ start: start })
-    .query({ count: count })
-
-  if (sort) req.query({ sort })
-  if (withStats) req.query({ withStats })
-
-  return req.set('Accept', 'application/json')
-            .expect(HttpStatusCode.OK_200)
-            .expect('Content-Type', /json/)
-}
-
-function getAccountVideoChannelsList (parameters: {
-  url: string
-  accountName: string
-  start?: number
-  count?: number
-  sort?: string
-  specialStatus?: HttpStatusCode
-  withStats?: boolean
-  search?: string
-}) {
-  const {
-    url,
-    accountName,
-    start,
-    count,
-    sort = 'createdAt',
-    specialStatus = HttpStatusCode.OK_200,
-    withStats = false,
-    search
-  } = parameters
-
-  const path = '/api/v1/accounts/' + accountName + '/video-channels'
-
-  return makeGetRequest({
-    url,
-    path,
-    query: {
-      start,
-      count,
-      sort,
-      withStats,
-      search
-    },
-    statusCodeExpected: specialStatus
-  })
-}
-
-function addVideoChannel (
-  url: string,
-  token: string,
-  videoChannelAttributesArg: VideoChannelCreate,
-  expectedStatus = HttpStatusCode.OK_200
-) {
-  const path = '/api/v1/video-channels/'
-
-  // Default attributes
-  let attributes = {
-    displayName: 'my super video channel',
-    description: 'my super channel description',
-    support: 'my super channel support'
-  }
-  attributes = Object.assign(attributes, videoChannelAttributesArg)
-
-  return request(url)
-    .post(path)
-    .send(attributes)
-    .set('Accept', 'application/json')
-    .set('Authorization', 'Bearer ' + token)
-    .expect(expectedStatus)
-}
-
-function updateVideoChannel (
-  url: string,
-  token: string,
-  channelName: string,
-  attributes: VideoChannelUpdate,
-  expectedStatus = HttpStatusCode.NO_CONTENT_204
-) {
-  const body: any = {}
-  const path = '/api/v1/video-channels/' + channelName
-
-  if (attributes.displayName) body.displayName = attributes.displayName
-  if (attributes.description) body.description = attributes.description
-  if (attributes.support) body.support = attributes.support
-  if (attributes.bulkVideosSupportUpdate) body.bulkVideosSupportUpdate = attributes.bulkVideosSupportUpdate
-
-  return request(url)
-    .put(path)
-    .send(body)
-    .set('Accept', 'application/json')
-    .set('Authorization', 'Bearer ' + token)
-    .expect(expectedStatus)
-}
-
-function deleteVideoChannel (url: string, token: string, channelName: string, expectedStatus = HttpStatusCode.NO_CONTENT_204) {
-  const path = '/api/v1/video-channels/' + channelName
-
-  return request(url)
-    .delete(path)
-    .set('Accept', 'application/json')
-    .set('Authorization', 'Bearer ' + token)
-    .expect(expectedStatus)
-}
-
-function getVideoChannel (url: string, channelName: string) {
-  const path = '/api/v1/video-channels/' + channelName
-
-  return request(url)
-    .get(path)
-    .set('Accept', 'application/json')
-    .expect(HttpStatusCode.OK_200)
-    .expect('Content-Type', /json/)
-}
-
-function updateVideoChannelImage (options: {
-  url: string
-  accessToken: string
-  fixture: string
-  videoChannelName: string | number
-  type: 'avatar' | 'banner'
-}) {
-  const path = `/api/v1/video-channels/${options.videoChannelName}/${options.type}/pick`
-
-  return updateImageRequest({ ...options, path, fieldname: options.type + 'file' })
-}
-
-function deleteVideoChannelImage (options: {
-  url: string
-  accessToken: string
-  videoChannelName: string | number
-  type: 'avatar' | 'banner'
-}) {
-  const path = `/api/v1/video-channels/${options.videoChannelName}/${options.type}`
-
-  return makeDeleteRequest({
-    url: options.url,
-    token: options.accessToken,
-    path,
-    statusCodeExpected: 204
-  })
-}
-
-function setDefaultVideoChannel (servers: ServerInfo[]) {
-  const tasks: Promise<any>[] = []
-
-  for (const server of servers) {
-    const p = getMyUserInformation(server.url, server.accessToken)
-      .then(res => { server.videoChannel = (res.body as User).videoChannels[0] })
-
-    tasks.push(p)
-  }
-
-  return Promise.all(tasks)
-}
-
-async function getDefaultVideoChannel (url: string, token: string) {
-  const res = await getMyUserInformation(url, token)
-
-  return (res.body as MyUser).videoChannels[0].id
-}
-
-// ---------------------------------------------------------------------------
-
-export {
-  updateVideoChannelImage,
-  getVideoChannelsList,
-  getAccountVideoChannelsList,
-  addVideoChannel,
-  updateVideoChannel,
-  deleteVideoChannel,
-  getVideoChannel,
-  setDefaultVideoChannel,
-  deleteVideoChannelImage,
-  getDefaultVideoChannel
-}
index 9dbaa42da9024e86e356eefbe2cfda4629de875d..6cdabffbd67bd3990a8d1960ad3eb3b0779daf1b 100644 (file)
@@ -1,3 +1,4 @@
+export * from './video-channel-create-result.model'
 export * from './video-channel-create.model'
 export * from './video-channel-update.model'
 export * from './video-channel.model'
diff --git a/shared/models/videos/channel/video-channel-create-result.model.ts b/shared/models/videos/channel/video-channel-create-result.model.ts
new file mode 100644 (file)
index 0000000..e3d7aeb
--- /dev/null
@@ -0,0 +1,3 @@
+export interface VideoChannelCreateResult {
+  id: number
+}