Introduce channels command
This commit is contained in:
parent
57f879a540
commit
a54618880c
|
@ -5,7 +5,6 @@ import { omit } from 'lodash'
|
||||||
import { User, UserRole, VideoCreateResult } from '../../../../shared'
|
import { User, UserRole, VideoCreateResult } from '../../../../shared'
|
||||||
import { HttpStatusCode } from '../../../../shared/core-utils/miscs/http-error-codes'
|
import { HttpStatusCode } from '../../../../shared/core-utils/miscs/http-error-codes'
|
||||||
import {
|
import {
|
||||||
addVideoChannel,
|
|
||||||
blockUser,
|
blockUser,
|
||||||
buildAbsoluteFixturePath,
|
buildAbsoluteFixturePath,
|
||||||
cleanupTests,
|
cleanupTests,
|
||||||
|
@ -1041,8 +1040,8 @@ describe('Test users API validators', function () {
|
||||||
})
|
})
|
||||||
|
|
||||||
it('Should fail with an existing channel', async function () {
|
it('Should fail with an existing channel', async function () {
|
||||||
const videoChannelAttributesArg = { name: 'existing_channel', displayName: 'hello', description: 'super description' }
|
const attributes = { name: 'existing_channel', displayName: 'hello', description: 'super description' }
|
||||||
await addVideoChannel(server.url, server.accessToken, videoChannelAttributesArg)
|
await server.channelsCommand.create({ attributes })
|
||||||
|
|
||||||
const fields = immutableAssign(baseCorrectParams, { channel: { name: 'existing_channel', displayName: 'toto' } })
|
const fields = immutableAssign(baseCorrectParams, { channel: { name: 'existing_channel', displayName: 'toto' } })
|
||||||
|
|
||||||
|
|
|
@ -6,11 +6,10 @@ import { omit } from 'lodash'
|
||||||
import { HttpStatusCode } from '../../../../shared/core-utils/miscs/http-error-codes'
|
import { HttpStatusCode } from '../../../../shared/core-utils/miscs/http-error-codes'
|
||||||
import {
|
import {
|
||||||
buildAbsoluteFixturePath,
|
buildAbsoluteFixturePath,
|
||||||
|
ChannelsCommand,
|
||||||
cleanupTests,
|
cleanupTests,
|
||||||
createUser,
|
createUser,
|
||||||
deleteVideoChannel,
|
|
||||||
flushAndRunServer,
|
flushAndRunServer,
|
||||||
getAccountVideoChannelsList,
|
|
||||||
immutableAssign,
|
immutableAssign,
|
||||||
makeGetRequest,
|
makeGetRequest,
|
||||||
makePostBodyRequest,
|
makePostBodyRequest,
|
||||||
|
@ -33,6 +32,7 @@ describe('Test video channels API validator', function () {
|
||||||
const videoChannelPath = '/api/v1/video-channels'
|
const videoChannelPath = '/api/v1/video-channels'
|
||||||
let server: ServerInfo
|
let server: ServerInfo
|
||||||
let accessTokenUser: string
|
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 })
|
await createUser({ url: server.url, accessToken: server.accessToken, username: user.username, password: user.password })
|
||||||
accessTokenUser = await userLogin(server, user)
|
accessTokenUser = await userLogin(server, user)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
command = server.channelsCommand
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('When listing a video channels', function () {
|
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 () {
|
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 () {
|
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 () {
|
describe('When deleting a video channel', function () {
|
||||||
it('Should fail with a non authenticated user', async 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 () {
|
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 () {
|
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 () {
|
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 () {
|
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 })
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,6 @@ import {
|
||||||
ServerInfo,
|
ServerInfo,
|
||||||
updateMyUser,
|
updateMyUser,
|
||||||
updateVideo,
|
updateVideo,
|
||||||
updateVideoChannel,
|
|
||||||
uploadRandomVideoOnServers,
|
uploadRandomVideoOnServers,
|
||||||
wait,
|
wait,
|
||||||
waitJobs
|
waitJobs
|
||||||
|
@ -404,7 +403,11 @@ describe('Test user notifications', function () {
|
||||||
displayName: 'super root 2 name'
|
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 () {
|
it('Should notify when a local channel is following one of our channel', async function () {
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
|
/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
|
||||||
|
|
||||||
import 'mocha'
|
import 'mocha'
|
||||||
|
import { expect } from 'chai'
|
||||||
import {
|
import {
|
||||||
cleanupTests,
|
cleanupTests,
|
||||||
flushAndRunServer,
|
flushAndRunServer,
|
||||||
|
@ -15,8 +16,6 @@ import {
|
||||||
} from '@shared/extra-utils'
|
} from '@shared/extra-utils'
|
||||||
import { VideoPrivacy } from '@shared/models'
|
import { VideoPrivacy } from '@shared/models'
|
||||||
|
|
||||||
const expect = chai.expect
|
|
||||||
|
|
||||||
describe('Test redundancy constraints', function () {
|
describe('Test redundancy constraints', function () {
|
||||||
let remoteServer: ServerInfo
|
let remoteServer: ServerInfo
|
||||||
let localServer: ServerInfo
|
let localServer: ServerInfo
|
||||||
|
|
|
@ -3,19 +3,15 @@
|
||||||
import 'mocha'
|
import 'mocha'
|
||||||
import * as chai from 'chai'
|
import * as chai from 'chai'
|
||||||
import {
|
import {
|
||||||
addVideoChannel,
|
|
||||||
cleanupTests,
|
cleanupTests,
|
||||||
createUser,
|
createUser,
|
||||||
deleteVideoChannel,
|
|
||||||
flushAndRunMultipleServers,
|
flushAndRunMultipleServers,
|
||||||
getVideoChannelsList,
|
|
||||||
getVideoChannelVideos,
|
getVideoChannelVideos,
|
||||||
SearchCommand,
|
SearchCommand,
|
||||||
ServerInfo,
|
ServerInfo,
|
||||||
setAccessTokensToServers,
|
setAccessTokensToServers,
|
||||||
updateMyUser,
|
updateMyUser,
|
||||||
updateVideo,
|
updateVideo,
|
||||||
updateVideoChannel,
|
|
||||||
uploadVideo,
|
uploadVideo,
|
||||||
userLogin,
|
userLogin,
|
||||||
wait,
|
wait,
|
||||||
|
@ -45,7 +41,7 @@ describe('Test ActivityPub video channels search', function () {
|
||||||
name: 'channel1_server1',
|
name: 'channel1_server1',
|
||||||
displayName: 'Channel 1 server 1'
|
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',
|
name: 'channel1_server2',
|
||||||
displayName: 'Channel 1 server 2'
|
displayName: 'Channel 1 server 2'
|
||||||
}
|
}
|
||||||
const resChannel = await addVideoChannel(servers[1].url, userServer2Token, channel)
|
const created = await servers[1].channelsCommand.create({ token: userServer2Token, attributes: channel })
|
||||||
channelIdServer2 = resChannel.body.videoChannel.id
|
channelIdServer2 = created.id
|
||||||
|
|
||||||
const res = await uploadVideo(servers[1].url, userServer2Token, { name: 'video 1 server 2', channelId: channelIdServer2 })
|
const res = await uploadVideo(servers[1].url, userServer2Token, { name: 'video 1 server 2', channelId: channelIdServer2 })
|
||||||
videoServer2UUID = res.body.video.uuid
|
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 () {
|
it('Should not list this remote video channel', async function () {
|
||||||
const res = await getVideoChannelsList(servers[0].url, 0, 5)
|
const body = await servers[0].channelsCommand.list()
|
||||||
expect(res.body.total).to.equal(3)
|
expect(body.total).to.equal(3)
|
||||||
expect(res.body.data).to.have.lengthOf(3)
|
expect(body.data).to.have.lengthOf(3)
|
||||||
expect(res.body.data[0].name).to.equal('channel1_server1')
|
expect(body.data[0].name).to.equal('channel1_server1')
|
||||||
expect(res.body.data[1].name).to.equal('user1_server1_channel')
|
expect(body.data[1].name).to.equal('user1_server1_channel')
|
||||||
expect(res.body.data[2].name).to.equal('root_channel')
|
expect(body.data[2].name).to.equal('root_channel')
|
||||||
})
|
})
|
||||||
|
|
||||||
it('Should list video channel videos of server 2 without token', async function () {
|
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 () {
|
it('Should update video channel of server 2, and refresh it on server 1', async function () {
|
||||||
this.timeout(60000)
|
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 updateMyUser({ url: servers[1].url, accessToken: userServer2Token, displayName: 'user updated' })
|
||||||
|
|
||||||
await waitJobs(servers)
|
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 () {
|
it('Should delete video channel of server 2, and delete it on server 1', async function () {
|
||||||
this.timeout(60000)
|
this.timeout(60000)
|
||||||
|
|
||||||
await deleteVideoChannel(servers[1].url, userServer2Token, 'channel1_server2')
|
await servers[1].channelsCommand.delete({ token: userServer2Token, channelName: 'channel1_server2' })
|
||||||
|
|
||||||
await waitJobs(servers)
|
await waitJobs(servers)
|
||||||
// Expire video
|
// Expire video
|
||||||
|
|
|
@ -3,7 +3,6 @@
|
||||||
import 'mocha'
|
import 'mocha'
|
||||||
import * as chai from 'chai'
|
import * as chai from 'chai'
|
||||||
import {
|
import {
|
||||||
addVideoChannel,
|
|
||||||
cleanupTests,
|
cleanupTests,
|
||||||
flushAndRunMultipleServers,
|
flushAndRunMultipleServers,
|
||||||
getVideosList,
|
getVideosList,
|
||||||
|
@ -123,8 +122,8 @@ describe('Test ActivityPub videos search', function () {
|
||||||
name: 'super_channel',
|
name: 'super_channel',
|
||||||
displayName: 'super channel'
|
displayName: 'super channel'
|
||||||
}
|
}
|
||||||
const resChannel = await addVideoChannel(servers[1].url, servers[1].accessToken, channelAttributes)
|
const created = await servers[1].channelsCommand.create({ attributes: channelAttributes })
|
||||||
const videoChannelId = resChannel.body.videoChannel.id
|
const videoChannelId = created.id
|
||||||
|
|
||||||
const attributes = {
|
const attributes = {
|
||||||
name: 'updated',
|
name: 'updated',
|
||||||
|
|
|
@ -2,15 +2,7 @@
|
||||||
|
|
||||||
import 'mocha'
|
import 'mocha'
|
||||||
import * as chai from 'chai'
|
import * as chai from 'chai'
|
||||||
import {
|
import { cleanupTests, createUser, flushAndRunServer, SearchCommand, ServerInfo, setAccessTokensToServers } from '@shared/extra-utils'
|
||||||
addVideoChannel,
|
|
||||||
cleanupTests,
|
|
||||||
createUser,
|
|
||||||
flushAndRunServer,
|
|
||||||
SearchCommand,
|
|
||||||
ServerInfo,
|
|
||||||
setAccessTokensToServers
|
|
||||||
} from '@shared/extra-utils'
|
|
||||||
import { VideoChannel } from '@shared/models'
|
import { VideoChannel } from '@shared/models'
|
||||||
|
|
||||||
const expect = chai.expect
|
const expect = chai.expect
|
||||||
|
@ -32,7 +24,7 @@ describe('Test channels search', function () {
|
||||||
name: 'squall_channel',
|
name: 'squall_channel',
|
||||||
displayName: 'Squall channel'
|
displayName: 'Squall channel'
|
||||||
}
|
}
|
||||||
await addVideoChannel(server.url, server.accessToken, channel)
|
await server.channelsCommand.create({ attributes: channel })
|
||||||
}
|
}
|
||||||
|
|
||||||
command = server.searchCommand
|
command = server.searchCommand
|
||||||
|
|
|
@ -37,6 +37,8 @@ describe('Test plugins', function () {
|
||||||
}
|
}
|
||||||
server = await flushAndRunServer(1, configOverride)
|
server = await flushAndRunServer(1, configOverride)
|
||||||
await setAccessTokensToServers([ server ])
|
await setAccessTokensToServers([ server ])
|
||||||
|
|
||||||
|
command = server.pluginsCommand
|
||||||
})
|
})
|
||||||
|
|
||||||
it('Should list and search available plugins and themes', async function () {
|
it('Should list and search available plugins and themes', async function () {
|
||||||
|
|
|
@ -3,7 +3,6 @@
|
||||||
import 'mocha'
|
import 'mocha'
|
||||||
import * as chai from 'chai'
|
import * as chai from 'chai'
|
||||||
import {
|
import {
|
||||||
addVideoChannel,
|
|
||||||
addVideoCommentThread,
|
addVideoCommentThread,
|
||||||
cleanupTests,
|
cleanupTests,
|
||||||
createUser,
|
createUser,
|
||||||
|
@ -143,12 +142,12 @@ describe('Test stats (excluding redundancy)', function () {
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
const channelAttributes = {
|
const attributes = {
|
||||||
name: 'stats_channel',
|
name: 'stats_channel',
|
||||||
displayName: 'My stats channel'
|
displayName: 'My stats channel'
|
||||||
}
|
}
|
||||||
const resChannel = await addVideoChannel(server.url, server.accessToken, channelAttributes)
|
const created = await server.channelsCommand.create({ attributes })
|
||||||
channelId = resChannel.body.videoChannel.id
|
channelId = created.id
|
||||||
|
|
||||||
const data = await server.statsCommand.get()
|
const data = await server.statsCommand.get()
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,6 @@ import {
|
||||||
flushAndRunMultipleServers,
|
flushAndRunMultipleServers,
|
||||||
getAccountVideos,
|
getAccountVideos,
|
||||||
getMyUserInformation,
|
getMyUserInformation,
|
||||||
getVideoChannelsList,
|
|
||||||
removeUser,
|
removeUser,
|
||||||
ServerInfo,
|
ServerInfo,
|
||||||
setAccessTokensToServers,
|
setAccessTokensToServers,
|
||||||
|
@ -23,7 +22,7 @@ import {
|
||||||
userLogin,
|
userLogin,
|
||||||
waitJobs
|
waitJobs
|
||||||
} from '@shared/extra-utils'
|
} from '@shared/extra-utils'
|
||||||
import { User, VideoChannel } from '@shared/models'
|
import { User } from '@shared/models'
|
||||||
|
|
||||||
const expect = chai.expect
|
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)
|
const accountDeleted = body.data.find(a => a.name === 'user1' && a.host === 'localhost:' + servers[0].port)
|
||||||
expect(accountDeleted).not.to.be.undefined
|
expect(accountDeleted).not.to.be.undefined
|
||||||
|
|
||||||
const resVideoChannels = await getVideoChannelsList(server.url, 0, 10)
|
const { data } = await server.channelsCommand.list()
|
||||||
const videoChannelDeleted = resVideoChannels.body.data.find(a => {
|
const videoChannelDeleted = data.find(a => a.displayName === 'Main user1 channel' && a.host === 'localhost:' + servers[0].port)
|
||||||
return a.displayName === 'Main user1 channel' && a.host === 'localhost:' + servers[0].port
|
|
||||||
}) as VideoChannel
|
|
||||||
expect(videoChannelDeleted).not.to.be.undefined
|
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)
|
const accountDeleted = body.data.find(a => a.name === 'user1' && a.host === 'localhost:' + servers[0].port)
|
||||||
expect(accountDeleted).to.be.undefined
|
expect(accountDeleted).to.be.undefined
|
||||||
|
|
||||||
const resVideoChannels = await getVideoChannelsList(server.url, 0, 10)
|
const { data } = await server.channelsCommand.list()
|
||||||
const videoChannelDeleted = resVideoChannels.body.data.find(a => {
|
const videoChannelDeleted = data.find(a => a.name === 'Main user1 channel' && a.host === 'localhost:' + servers[0].port)
|
||||||
return a.name === 'Main user1 channel' && a.host === 'localhost:' + servers[0].port
|
|
||||||
}) as VideoChannel
|
|
||||||
expect(videoChannelDeleted).to.be.undefined
|
expect(videoChannelDeleted).to.be.undefined
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
|
@ -18,7 +18,6 @@ import {
|
||||||
getUserInformation,
|
getUserInformation,
|
||||||
getUsersList,
|
getUsersList,
|
||||||
getUsersListPaginationAndSort,
|
getUsersListPaginationAndSort,
|
||||||
getVideoChannel,
|
|
||||||
getVideosList,
|
getVideosList,
|
||||||
killallServers,
|
killallServers,
|
||||||
login,
|
login,
|
||||||
|
@ -864,9 +863,9 @@ describe('Test users', function () {
|
||||||
})
|
})
|
||||||
|
|
||||||
it('Should have created the channel', async 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 () {
|
it('Should remove me', async function () {
|
||||||
|
|
|
@ -5,7 +5,6 @@ import * as chai from 'chai'
|
||||||
import * as request from 'supertest'
|
import * as request from 'supertest'
|
||||||
import { HttpStatusCode } from '../../../../shared/core-utils/miscs/http-error-codes'
|
import { HttpStatusCode } from '../../../../shared/core-utils/miscs/http-error-codes'
|
||||||
import {
|
import {
|
||||||
addVideoChannel,
|
|
||||||
buildAbsoluteFixturePath,
|
buildAbsoluteFixturePath,
|
||||||
checkTmpIsEmpty,
|
checkTmpIsEmpty,
|
||||||
checkVideoFilesWereRemoved,
|
checkVideoFilesWereRemoved,
|
||||||
|
@ -17,7 +16,6 @@ import {
|
||||||
flushAndRunMultipleServers,
|
flushAndRunMultipleServers,
|
||||||
getLocalVideos,
|
getLocalVideos,
|
||||||
getVideo,
|
getVideo,
|
||||||
getVideoChannelsList,
|
|
||||||
getVideosList,
|
getVideosList,
|
||||||
rateVideo,
|
rateVideo,
|
||||||
removeVideo,
|
removeVideo,
|
||||||
|
@ -64,9 +62,9 @@ describe('Test multiple servers', function () {
|
||||||
displayName: 'my channel',
|
displayName: 'my channel',
|
||||||
description: 'super channel'
|
description: 'super channel'
|
||||||
}
|
}
|
||||||
await addVideoChannel(servers[0].url, servers[0].accessToken, videoChannel)
|
await servers[0].channelsCommand.create({ attributes: videoChannel })
|
||||||
const channelRes = await getVideoChannelsList(servers[0].url, 0, 1)
|
const { data } = await servers[0].channelsCommand.list({ start: 0, count: 1 })
|
||||||
videoChannelId = channelRes.body.data[0].id
|
videoChannelId = data[0].id
|
||||||
}
|
}
|
||||||
|
|
||||||
// Server 1 and server 2 follow each other
|
// Server 1 and server 2 follow each other
|
||||||
|
|
|
@ -7,43 +7,29 @@ import { ACTOR_IMAGES_SIZE } from '@server/initializers/constants'
|
||||||
import {
|
import {
|
||||||
cleanupTests,
|
cleanupTests,
|
||||||
createUser,
|
createUser,
|
||||||
deleteVideoChannelImage,
|
|
||||||
doubleFollow,
|
doubleFollow,
|
||||||
flushAndRunMultipleServers,
|
flushAndRunMultipleServers,
|
||||||
getActorImage,
|
getActorImage,
|
||||||
getVideo,
|
getVideo,
|
||||||
getVideoChannel,
|
|
||||||
getVideoChannelVideos,
|
getVideoChannelVideos,
|
||||||
setDefaultVideoChannel,
|
setDefaultVideoChannel,
|
||||||
testFileExistsOrNot,
|
testFileExistsOrNot,
|
||||||
testImage,
|
testImage,
|
||||||
updateVideo,
|
updateVideo,
|
||||||
updateVideoChannelImage,
|
|
||||||
uploadVideo,
|
uploadVideo,
|
||||||
userLogin,
|
userLogin,
|
||||||
wait
|
wait
|
||||||
} from '../../../../shared/extra-utils'
|
} from '../../../../shared/extra-utils'
|
||||||
import {
|
import { getMyUserInformation, ServerInfo, setAccessTokensToServers, viewVideo } from '../../../../shared/extra-utils/index'
|
||||||
addVideoChannel,
|
|
||||||
deleteVideoChannel,
|
|
||||||
getAccountVideoChannelsList,
|
|
||||||
getMyUserInformation,
|
|
||||||
getVideoChannelsList,
|
|
||||||
ServerInfo,
|
|
||||||
setAccessTokensToServers,
|
|
||||||
updateVideoChannel,
|
|
||||||
viewVideo
|
|
||||||
} from '../../../../shared/extra-utils/index'
|
|
||||||
import { waitJobs } from '../../../../shared/extra-utils/server/jobs'
|
import { waitJobs } from '../../../../shared/extra-utils/server/jobs'
|
||||||
import { User, Video, VideoChannel, VideoDetails } from '../../../../shared/index'
|
import { User, Video, VideoChannel, VideoDetails } from '../../../../shared/index'
|
||||||
|
|
||||||
const expect = chai.expect
|
const expect = chai.expect
|
||||||
|
|
||||||
async function findChannel (server: ServerInfo, channelId: number) {
|
async function findChannel (server: ServerInfo, channelId: number) {
|
||||||
const res = await getVideoChannelsList(server.url, 0, 5, '-name')
|
const body = await server.channelsCommand.list({ sort: '-name' })
|
||||||
const videoChannel = res.body.data.find(c => c.id === channelId)
|
|
||||||
|
|
||||||
return videoChannel as VideoChannel
|
return body.data.find(c => c.id === channelId)
|
||||||
}
|
}
|
||||||
|
|
||||||
describe('Test video channels', function () {
|
describe('Test video channels', function () {
|
||||||
|
@ -69,11 +55,11 @@ describe('Test video channels', function () {
|
||||||
})
|
})
|
||||||
|
|
||||||
it('Should have one video channel (created with root)', async () => {
|
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(body.total).to.equal(1)
|
||||||
expect(res.body.data).to.be.an('array')
|
expect(body.data).to.be.an('array')
|
||||||
expect(res.body.data).to.have.lengthOf(1)
|
expect(body.data).to.have.lengthOf(1)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('Should create another video channel', async function () {
|
it('Should create another video channel', async function () {
|
||||||
|
@ -86,8 +72,8 @@ describe('Test video channels', function () {
|
||||||
description: 'super video channel description',
|
description: 'super video channel description',
|
||||||
support: 'super video channel support text'
|
support: 'super video channel support text'
|
||||||
}
|
}
|
||||||
const res = await addVideoChannel(servers[0].url, servers[0].accessToken, videoChannel)
|
const created = await servers[0].channelsCommand.create({ attributes: videoChannel })
|
||||||
secondVideoChannelId = res.body.videoChannel.id
|
secondVideoChannelId = created.id
|
||||||
}
|
}
|
||||||
|
|
||||||
// The channel is 1 is propagated to servers 2
|
// 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 () {
|
it('Should have two video channels when getting account channels on server 1', async function () {
|
||||||
const res = await getAccountVideoChannelsList({
|
const body = await servers[0].channelsCommand.listByAccount({ accountName })
|
||||||
url: servers[0].url,
|
expect(body.total).to.equal(2)
|
||||||
accountName
|
|
||||||
})
|
|
||||||
|
|
||||||
expect(res.body.total).to.equal(2)
|
const videoChannels = body.data
|
||||||
expect(res.body.data).to.be.an('array')
|
|
||||||
expect(res.body.data).to.have.lengthOf(2)
|
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].name).to.equal('root_channel')
|
||||||
expect(videoChannels[0].displayName).to.equal('Main 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 () {
|
it('Should paginate and sort account channels', async function () {
|
||||||
{
|
{
|
||||||
const res = await getAccountVideoChannelsList({
|
const body = await servers[0].channelsCommand.listByAccount({
|
||||||
url: servers[0].url,
|
|
||||||
accountName,
|
accountName,
|
||||||
start: 0,
|
start: 0,
|
||||||
count: 1,
|
count: 1,
|
||||||
sort: 'createdAt'
|
sort: 'createdAt'
|
||||||
})
|
})
|
||||||
|
|
||||||
expect(res.body.total).to.equal(2)
|
expect(body.total).to.equal(2)
|
||||||
expect(res.body.data).to.have.lengthOf(1)
|
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')
|
expect(videoChannel.name).to.equal('root_channel')
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
const res = await getAccountVideoChannelsList({
|
const body = await servers[0].channelsCommand.listByAccount({
|
||||||
url: servers[0].url,
|
|
||||||
accountName,
|
accountName,
|
||||||
start: 0,
|
start: 0,
|
||||||
count: 1,
|
count: 1,
|
||||||
sort: '-createdAt'
|
sort: '-createdAt'
|
||||||
})
|
})
|
||||||
|
|
||||||
expect(res.body.total).to.equal(2)
|
expect(body.total).to.equal(2)
|
||||||
expect(res.body.data).to.have.lengthOf(1)
|
expect(body.data).to.have.lengthOf(1)
|
||||||
|
expect(body.data[0].name).to.equal('second_video_channel')
|
||||||
const videoChannel: VideoChannel = res.body.data[0]
|
|
||||||
expect(videoChannel.name).to.equal('second_video_channel')
|
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
const res = await getAccountVideoChannelsList({
|
const body = await servers[0].channelsCommand.listByAccount({
|
||||||
url: servers[0].url,
|
|
||||||
accountName,
|
accountName,
|
||||||
start: 1,
|
start: 1,
|
||||||
count: 1,
|
count: 1,
|
||||||
sort: '-createdAt'
|
sort: '-createdAt'
|
||||||
})
|
})
|
||||||
|
|
||||||
expect(res.body.total).to.equal(2)
|
expect(body.total).to.equal(2)
|
||||||
expect(res.body.data).to.have.lengthOf(1)
|
expect(body.data).to.have.lengthOf(1)
|
||||||
|
expect(body.data[0].name).to.equal('root_channel')
|
||||||
const videoChannel: VideoChannel = res.body.data[0]
|
|
||||||
expect(videoChannel.name).to.equal('root_channel')
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
it('Should have one video channel when getting account channels on server 2', async function () {
|
it('Should have one video channel when getting account channels on server 2', async function () {
|
||||||
const res = await getAccountVideoChannelsList({
|
const body = await servers[1].channelsCommand.listByAccount({ accountName })
|
||||||
url: servers[1].url,
|
|
||||||
accountName
|
|
||||||
})
|
|
||||||
|
|
||||||
expect(res.body.total).to.equal(1)
|
expect(body.total).to.equal(1)
|
||||||
expect(res.body.data).to.be.an('array')
|
expect(body.data).to.be.an('array')
|
||||||
expect(res.body.data).to.have.lengthOf(1)
|
expect(body.data).to.have.lengthOf(1)
|
||||||
|
|
||||||
const videoChannels = res.body.data
|
const videoChannel = body.data[0]
|
||||||
expect(videoChannels[0].name).to.equal('second_video_channel')
|
expect(videoChannel.name).to.equal('second_video_channel')
|
||||||
expect(videoChannels[0].displayName).to.equal('second video channel')
|
expect(videoChannel.displayName).to.equal('second video channel')
|
||||||
expect(videoChannels[0].description).to.equal('super video channel description')
|
expect(videoChannel.description).to.equal('super video channel description')
|
||||||
expect(videoChannels[0].support).to.equal('super video channel support text')
|
expect(videoChannel.support).to.equal('super video channel support text')
|
||||||
})
|
})
|
||||||
|
|
||||||
it('Should list video channels', async function () {
|
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(body.total).to.equal(2)
|
||||||
expect(res.body.data).to.be.an('array')
|
expect(body.data).to.be.an('array')
|
||||||
expect(res.body.data).to.have.lengthOf(1)
|
expect(body.data).to.have.lengthOf(1)
|
||||||
expect(res.body.data[0].name).to.equal('root_channel')
|
expect(body.data[0].name).to.equal('root_channel')
|
||||||
expect(res.body.data[0].displayName).to.equal('Main root channel')
|
expect(body.data[0].displayName).to.equal('Main root channel')
|
||||||
})
|
})
|
||||||
|
|
||||||
it('Should update video channel', async function () {
|
it('Should update video channel', async function () {
|
||||||
|
@ -225,22 +199,23 @@ describe('Test video channels', function () {
|
||||||
support: 'support updated'
|
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)
|
await waitJobs(servers)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('Should have video channel updated', async function () {
|
it('Should have video channel updated', async function () {
|
||||||
for (const server of servers) {
|
for (const server of servers) {
|
||||||
const res = await getVideoChannelsList(server.url, 0, 1, '-name')
|
const body = await server.channelsCommand.list({ start: 0, count: 1, sort: '-name' })
|
||||||
|
|
||||||
expect(res.body.total).to.equal(2)
|
expect(body.total).to.equal(2)
|
||||||
expect(res.body.data).to.be.an('array')
|
expect(body.data).to.be.an('array')
|
||||||
expect(res.body.data).to.have.lengthOf(1)
|
expect(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(body.data[0].name).to.equal('second_video_channel')
|
||||||
expect(res.body.data[0].description).to.equal('video channel description updated')
|
expect(body.data[0].displayName).to.equal('video channel updated')
|
||||||
expect(res.body.data[0].support).to.equal('support 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
|
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)
|
await waitJobs(servers)
|
||||||
|
|
||||||
|
@ -278,10 +253,8 @@ describe('Test video channels', function () {
|
||||||
|
|
||||||
const fixture = 'avatar.png'
|
const fixture = 'avatar.png'
|
||||||
|
|
||||||
await updateVideoChannelImage({
|
await servers[0].channelsCommand.updateImage({
|
||||||
url: servers[0].url,
|
channelName: 'second_video_channel',
|
||||||
accessToken: servers[0].accessToken,
|
|
||||||
videoChannelName: 'second_video_channel',
|
|
||||||
fixture,
|
fixture,
|
||||||
type: 'avatar'
|
type: 'avatar'
|
||||||
})
|
})
|
||||||
|
@ -306,10 +279,8 @@ describe('Test video channels', function () {
|
||||||
|
|
||||||
const fixture = 'banner.jpg'
|
const fixture = 'banner.jpg'
|
||||||
|
|
||||||
await updateVideoChannelImage({
|
await servers[0].channelsCommand.updateImage({
|
||||||
url: servers[0].url,
|
channelName: 'second_video_channel',
|
||||||
accessToken: servers[0].accessToken,
|
|
||||||
videoChannelName: 'second_video_channel',
|
|
||||||
fixture,
|
fixture,
|
||||||
type: 'banner'
|
type: 'banner'
|
||||||
})
|
})
|
||||||
|
@ -317,8 +288,7 @@ describe('Test video channels', function () {
|
||||||
await waitJobs(servers)
|
await waitJobs(servers)
|
||||||
|
|
||||||
for (const server of servers) {
|
for (const server of servers) {
|
||||||
const res = await getVideoChannel(server.url, 'second_video_channel@' + servers[0].host)
|
const videoChannel = await server.channelsCommand.get({ channelName: 'second_video_channel@' + servers[0].host })
|
||||||
const videoChannel = res.body
|
|
||||||
|
|
||||||
bannerPaths[server.port] = videoChannel.banner.path
|
bannerPaths[server.port] = videoChannel.banner.path
|
||||||
await testImage(server.url, 'banner-resized', bannerPaths[server.port])
|
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 () {
|
it('Should delete the video channel avatar', async function () {
|
||||||
this.timeout(15000)
|
this.timeout(15000)
|
||||||
|
|
||||||
await deleteVideoChannelImage({
|
await servers[0].channelsCommand.deleteImage({ channelName: 'second_video_channel', type: 'avatar' })
|
||||||
url: servers[0].url,
|
|
||||||
accessToken: servers[0].accessToken,
|
|
||||||
videoChannelName: 'second_video_channel',
|
|
||||||
type: 'avatar'
|
|
||||||
})
|
|
||||||
|
|
||||||
await waitJobs(servers)
|
await waitJobs(servers)
|
||||||
|
|
||||||
|
@ -353,12 +318,7 @@ describe('Test video channels', function () {
|
||||||
it('Should delete the video channel banner', async function () {
|
it('Should delete the video channel banner', async function () {
|
||||||
this.timeout(15000)
|
this.timeout(15000)
|
||||||
|
|
||||||
await deleteVideoChannelImage({
|
await servers[0].channelsCommand.deleteImage({ channelName: 'second_video_channel', type: 'banner' })
|
||||||
url: servers[0].url,
|
|
||||||
accessToken: servers[0].accessToken,
|
|
||||||
videoChannelName: 'second_video_channel',
|
|
||||||
type: 'banner'
|
|
||||||
})
|
|
||||||
|
|
||||||
await waitJobs(servers)
|
await waitJobs(servers)
|
||||||
|
|
||||||
|
@ -411,23 +371,23 @@ describe('Test video channels', function () {
|
||||||
})
|
})
|
||||||
|
|
||||||
it('Should delete video channel', async 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 () {
|
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(body.total).to.equal(1)
|
||||||
expect(res.body.data).to.be.an('array')
|
expect(body.data).to.be.an('array')
|
||||||
expect(res.body.data).to.have.lengthOf(1)
|
expect(body.data).to.have.lengthOf(1)
|
||||||
expect(res.body.data[0].displayName).to.equal('Main root channel')
|
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 () {
|
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 videoChannel = { name: 'toto_channel', displayName: 'My toto channel' }
|
||||||
const res = await addVideoChannel(servers[0].url, servers[0].accessToken, videoChannel)
|
const created = await servers[0].channelsCommand.create({ attributes: videoChannel })
|
||||||
totoChannel = res.body.videoChannel.id
|
totoChannel = created.id
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -444,15 +404,9 @@ describe('Test video channels', function () {
|
||||||
this.timeout(10000)
|
this.timeout(10000)
|
||||||
|
|
||||||
{
|
{
|
||||||
const res = await getAccountVideoChannelsList({
|
const { data } = await servers[0].channelsCommand.listByAccount({ accountName, withStats: true })
|
||||||
url: servers[0].url,
|
|
||||||
accountName,
|
|
||||||
withStats: true
|
|
||||||
})
|
|
||||||
|
|
||||||
const channels: VideoChannel[] = res.body.data
|
for (const channel of data) {
|
||||||
|
|
||||||
for (const channel of channels) {
|
|
||||||
expect(channel).to.haveOwnProperty('viewsPerDay')
|
expect(channel).to.haveOwnProperty('viewsPerDay')
|
||||||
expect(channel.viewsPerDay).to.have.length(30 + 1) // daysPrior + today
|
expect(channel.viewsPerDay).to.have.length(30 + 1) // daysPrior + today
|
||||||
|
|
||||||
|
@ -471,26 +425,17 @@ describe('Test video channels', function () {
|
||||||
// Wait the repeatable job
|
// Wait the repeatable job
|
||||||
await wait(8000)
|
await wait(8000)
|
||||||
|
|
||||||
const res = await getAccountVideoChannelsList({
|
const { data } = await servers[0].channelsCommand.listByAccount({ accountName, withStats: true })
|
||||||
url: servers[0].url,
|
const channelWithView = data.find(channel => channel.id === servers[0].videoChannel.id)
|
||||||
accountName,
|
|
||||||
withStats: true
|
|
||||||
})
|
|
||||||
const channelWithView = res.body.data.find((channel: VideoChannel) => channel.id === servers[0].videoChannel.id)
|
|
||||||
expect(channelWithView.viewsPerDay.slice(-1)[0].views).to.equal(2)
|
expect(channelWithView.viewsPerDay.slice(-1)[0].views).to.equal(2)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
it('Should report correct videos count', async function () {
|
it('Should report correct videos count', async function () {
|
||||||
const res = await getAccountVideoChannelsList({
|
const { data } = await servers[0].channelsCommand.listByAccount({ accountName, withStats: true })
|
||||||
url: servers[0].url,
|
|
||||||
accountName,
|
|
||||||
withStats: true
|
|
||||||
})
|
|
||||||
const channels: VideoChannel[] = res.body.data
|
|
||||||
|
|
||||||
const totoChannel = channels.find(c => c.name === 'toto_channel')
|
const totoChannel = data.find(c => c.name === 'toto_channel')
|
||||||
const rootChannel = channels.find(c => c.name === 'root_channel')
|
const rootChannel = data.find(c => c.name === 'root_channel')
|
||||||
|
|
||||||
expect(rootChannel.videosCount).to.equal(1)
|
expect(rootChannel.videosCount).to.equal(1)
|
||||||
expect(totoChannel.videosCount).to.equal(0)
|
expect(totoChannel.videosCount).to.equal(0)
|
||||||
|
@ -498,26 +443,18 @@ describe('Test video channels', function () {
|
||||||
|
|
||||||
it('Should search among account video channels', async function () {
|
it('Should search among account video channels', async function () {
|
||||||
{
|
{
|
||||||
const res = await getAccountVideoChannelsList({
|
const body = await servers[0].channelsCommand.listByAccount({ accountName, search: 'root' })
|
||||||
url: servers[0].url,
|
expect(body.total).to.equal(1)
|
||||||
accountName,
|
|
||||||
search: 'root'
|
|
||||||
})
|
|
||||||
expect(res.body.total).to.equal(1)
|
|
||||||
|
|
||||||
const channels = res.body.data
|
const channels = body.data
|
||||||
expect(channels).to.have.lengthOf(1)
|
expect(channels).to.have.lengthOf(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
const res = await getAccountVideoChannelsList({
|
const body = await servers[0].channelsCommand.listByAccount({ accountName, search: 'does not exist' })
|
||||||
url: servers[0].url,
|
expect(body.total).to.equal(0)
|
||||||
accountName,
|
|
||||||
search: 'does not exist'
|
|
||||||
})
|
|
||||||
expect(res.body.total).to.equal(0)
|
|
||||||
|
|
||||||
const channels = res.body.data
|
const channels = body.data
|
||||||
expect(channels).to.have.lengthOf(0)
|
expect(channels).to.have.lengthOf(0)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -529,30 +466,20 @@ describe('Test video channels', function () {
|
||||||
await waitJobs(servers)
|
await waitJobs(servers)
|
||||||
|
|
||||||
for (const server of servers) {
|
for (const server of servers) {
|
||||||
const res = await getAccountVideoChannelsList({
|
const { data } = await server.channelsCommand.listByAccount({ accountName, sort: '-updatedAt' })
|
||||||
url: server.url,
|
|
||||||
accountName,
|
|
||||||
sort: '-updatedAt'
|
|
||||||
})
|
|
||||||
|
|
||||||
const channels: VideoChannel[] = res.body.data
|
expect(data[0].name).to.equal('toto_channel')
|
||||||
expect(channels[0].name).to.equal('toto_channel')
|
expect(data[1].name).to.equal('root_channel')
|
||||||
expect(channels[1].name).to.equal('root_channel')
|
|
||||||
}
|
}
|
||||||
|
|
||||||
await uploadVideo(servers[0].url, servers[0].accessToken, { channelId: servers[0].videoChannel.id })
|
await uploadVideo(servers[0].url, servers[0].accessToken, { channelId: servers[0].videoChannel.id })
|
||||||
await waitJobs(servers)
|
await waitJobs(servers)
|
||||||
|
|
||||||
for (const server of servers) {
|
for (const server of servers) {
|
||||||
const res = await getAccountVideoChannelsList({
|
const { data } = await server.channelsCommand.listByAccount({ accountName, sort: '-updatedAt' })
|
||||||
url: server.url,
|
|
||||||
accountName,
|
|
||||||
sort: '-updatedAt'
|
|
||||||
})
|
|
||||||
|
|
||||||
const channels: VideoChannel[] = res.body.data
|
expect(data[0].name).to.equal('root_channel')
|
||||||
expect(channels[0].name).to.equal('root_channel')
|
expect(data[1].name).to.equal('toto_channel')
|
||||||
expect(channels[1].name).to.equal('toto_channel')
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -4,11 +4,9 @@ import 'mocha'
|
||||||
import * as chai from 'chai'
|
import * as chai from 'chai'
|
||||||
import { HttpStatusCode } from '@shared/core-utils'
|
import { HttpStatusCode } from '@shared/core-utils'
|
||||||
import {
|
import {
|
||||||
addVideoChannel,
|
|
||||||
checkPlaylistFilesWereRemoved,
|
checkPlaylistFilesWereRemoved,
|
||||||
cleanupTests,
|
cleanupTests,
|
||||||
createUser,
|
createUser,
|
||||||
deleteVideoChannel,
|
|
||||||
doubleFollow,
|
doubleFollow,
|
||||||
flushAndRunMultipleServers,
|
flushAndRunMultipleServers,
|
||||||
generateUserAccessToken,
|
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 () {
|
it('Should delete a channel and put the associated playlist in private mode', async function () {
|
||||||
this.timeout(30000)
|
this.timeout(30000)
|
||||||
|
|
||||||
const res = await addVideoChannel(servers[0].url, servers[0].accessToken, { name: 'super_channel', displayName: 'super channel' })
|
const channel = await servers[0].channelsCommand.create({ attributes: { name: 'super_channel', displayName: 'super channel' } })
|
||||||
const videoChannelId = res.body.videoChannel.id
|
|
||||||
|
|
||||||
const playlistCreated = await commands[0].create({
|
const playlistCreated = await commands[0].create({
|
||||||
attributes: {
|
attributes: {
|
||||||
displayName: 'channel playlist',
|
displayName: 'channel playlist',
|
||||||
privacy: VideoPlaylistPrivacy.PUBLIC,
|
privacy: VideoPlaylistPrivacy.PUBLIC,
|
||||||
videoChannelId
|
videoChannelId: channel.id
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
await waitJobs(servers)
|
await waitJobs(servers)
|
||||||
|
|
||||||
await deleteVideoChannel(servers[0].url, servers[0].accessToken, 'super_channel')
|
await servers[0].channelsCommand.delete({ channelName: 'super_channel' })
|
||||||
|
|
||||||
await waitJobs(servers)
|
await waitJobs(servers)
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,6 @@ import 'mocha'
|
||||||
import { expect } from 'chai'
|
import { expect } from 'chai'
|
||||||
import { Video, VideoDetails } from '../../../shared'
|
import { Video, VideoDetails } from '../../../shared'
|
||||||
import {
|
import {
|
||||||
addVideoChannel,
|
|
||||||
areHttpImportTestsDisabled,
|
areHttpImportTestsDisabled,
|
||||||
buildAbsoluteFixturePath,
|
buildAbsoluteFixturePath,
|
||||||
cleanupTests,
|
cleanupTests,
|
||||||
|
@ -44,8 +43,8 @@ describe('Test CLI wrapper', function () {
|
||||||
userAccessToken = await userLogin(server, { username: 'user_1', password: 'super_password' })
|
userAccessToken = await userLogin(server, { username: 'user_1', password: 'super_password' })
|
||||||
|
|
||||||
{
|
{
|
||||||
const args = { name: 'user_channel', displayName: 'User channel', support: 'super support text' }
|
const attributes = { name: 'user_channel', displayName: 'User channel', support: 'super support text' }
|
||||||
await addVideoChannel(server.url, userAccessToken, args)
|
await server.channelsCommand.create({ token: userAccessToken, attributes })
|
||||||
}
|
}
|
||||||
|
|
||||||
cliCommand = server.cliCommand
|
cliCommand = server.cliCommand
|
||||||
|
|
|
@ -2,13 +2,11 @@
|
||||||
|
|
||||||
import 'mocha'
|
import 'mocha'
|
||||||
import {
|
import {
|
||||||
addVideoChannel,
|
|
||||||
addVideoCommentThread,
|
addVideoCommentThread,
|
||||||
cleanupTests,
|
cleanupTests,
|
||||||
createUser,
|
createUser,
|
||||||
flushAndRunServer,
|
flushAndRunServer,
|
||||||
getVideo,
|
getVideo,
|
||||||
getVideoChannelsList,
|
|
||||||
getVideosList,
|
getVideosList,
|
||||||
killallServers,
|
killallServers,
|
||||||
makeActivityPubGetRequest,
|
makeActivityPubGetRequest,
|
||||||
|
@ -53,7 +51,7 @@ describe('Test update host scripts', function () {
|
||||||
displayName: 'second video channel',
|
displayName: 'second video channel',
|
||||||
description: 'super video channel description'
|
description: 'super video channel description'
|
||||||
}
|
}
|
||||||
await addVideoChannel(server.url, server.accessToken, videoChannel)
|
await server.channelsCommand.create({ attributes: videoChannel })
|
||||||
|
|
||||||
// Create comments
|
// Create comments
|
||||||
const text = 'my super first comment'
|
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 () {
|
it('Should have updated video channels url', async function () {
|
||||||
const res = await getVideoChannelsList(server.url, 0, 5, '-name')
|
const { data, total } = await server.channelsCommand.list({ sort: '-name' })
|
||||||
expect(res.body.total).to.equal(3)
|
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)
|
const { body } = await makeActivityPubGetRequest(server.url, '/video-channels/' + channel.name)
|
||||||
|
|
||||||
expect(body.id).to.equal('http://localhost:9002/video-channels/' + channel.name)
|
expect(body.id).to.equal('http://localhost:9002/video-channels/' + channel.name)
|
||||||
|
|
|
@ -16,7 +16,6 @@ import {
|
||||||
setAccessTokensToServers,
|
setAccessTokensToServers,
|
||||||
setDefaultVideoChannel,
|
setDefaultVideoChannel,
|
||||||
updateMyUser,
|
updateMyUser,
|
||||||
updateVideoChannel,
|
|
||||||
uploadVideo,
|
uploadVideo,
|
||||||
waitJobs
|
waitJobs
|
||||||
} from '../../shared/extra-utils'
|
} from '../../shared/extra-utils'
|
||||||
|
@ -63,7 +62,10 @@ describe('Test a client controllers', function () {
|
||||||
|
|
||||||
await setDefaultVideoChannel(servers)
|
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
|
// Video
|
||||||
|
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
|
|
||||||
import 'mocha'
|
import 'mocha'
|
||||||
import * as chai from 'chai'
|
import * as chai from 'chai'
|
||||||
|
import { HttpStatusCode } from '@shared/core-utils'
|
||||||
import {
|
import {
|
||||||
addVideoChannel,
|
|
||||||
cleanupTests,
|
cleanupTests,
|
||||||
createUser,
|
createUser,
|
||||||
flushAndRunServer,
|
flushAndRunServer,
|
||||||
|
@ -13,7 +13,6 @@ import {
|
||||||
uploadVideo
|
uploadVideo
|
||||||
} from '../../shared/extra-utils'
|
} from '../../shared/extra-utils'
|
||||||
import { VideoPrivacy } from '../../shared/models/videos'
|
import { VideoPrivacy } from '../../shared/models/videos'
|
||||||
import { HttpStatusCode } from '@shared/core-utils'
|
|
||||||
|
|
||||||
const expect = chai.expect
|
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 2', nsfw: false })
|
||||||
await uploadVideo(server.url, server.accessToken, { name: 'video 3', privacy: VideoPrivacy.PRIVATE })
|
await uploadVideo(server.url, server.accessToken, { name: 'video 3', privacy: VideoPrivacy.PRIVATE })
|
||||||
|
|
||||||
await addVideoChannel(server.url, server.accessToken, { name: 'channel1', displayName: 'channel 1' })
|
await server.channelsCommand.create({ attributes: { name: 'channel1', displayName: 'channel 1' } })
|
||||||
await addVideoChannel(server.url, server.accessToken, { name: 'channel2', displayName: 'channel 2' })
|
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: 'user1', password: 'password' })
|
||||||
await createUser({ url: server.url, accessToken: server.accessToken, username: 'user2', password: 'password' })
|
await createUser({ url: server.url, accessToken: server.accessToken, username: 'user2', password: 'password' })
|
||||||
|
|
|
@ -22,6 +22,7 @@ import {
|
||||||
BlacklistCommand,
|
BlacklistCommand,
|
||||||
CaptionsCommand,
|
CaptionsCommand,
|
||||||
ChangeOwnershipCommand,
|
ChangeOwnershipCommand,
|
||||||
|
ChannelsCommand,
|
||||||
HistoryCommand,
|
HistoryCommand,
|
||||||
ImportsCommand,
|
ImportsCommand,
|
||||||
LiveCommand,
|
LiveCommand,
|
||||||
|
@ -119,6 +120,7 @@ interface ServerInfo {
|
||||||
historyCommand?: HistoryCommand
|
historyCommand?: HistoryCommand
|
||||||
importsCommand?: ImportsCommand
|
importsCommand?: ImportsCommand
|
||||||
streamingPlaylistsCommand?: StreamingPlaylistsCommand
|
streamingPlaylistsCommand?: StreamingPlaylistsCommand
|
||||||
|
channelsCommand?: ChannelsCommand
|
||||||
}
|
}
|
||||||
|
|
||||||
function parallelTests () {
|
function parallelTests () {
|
||||||
|
@ -353,6 +355,7 @@ async function runServer (server: ServerInfo, configOverrideArg?: any, args = []
|
||||||
server.historyCommand = new HistoryCommand(server)
|
server.historyCommand = new HistoryCommand(server)
|
||||||
server.importsCommand = new ImportsCommand(server)
|
server.importsCommand = new ImportsCommand(server)
|
||||||
server.streamingPlaylistsCommand = new StreamingPlaylistsCommand(server)
|
server.streamingPlaylistsCommand = new StreamingPlaylistsCommand(server)
|
||||||
|
server.channelsCommand = new ChannelsCommand(server)
|
||||||
|
|
||||||
res(server)
|
res(server)
|
||||||
})
|
})
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
|
import { isAbsolute, join } from 'path'
|
||||||
import { HttpStatusCode } from '@shared/core-utils'
|
import { HttpStatusCode } from '@shared/core-utils'
|
||||||
|
import { root } from '../miscs'
|
||||||
import {
|
import {
|
||||||
makeDeleteRequest,
|
makeDeleteRequest,
|
||||||
makeGetRequest,
|
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) {
|
private buildCommonRequestOptions (options: InternalCommonCommandOptions) {
|
||||||
const { path } = options
|
const { path } = options
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
|
@ -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
|
||||||
|
}
|
|
@ -1,7 +1,9 @@
|
||||||
export * from './blacklist-command'
|
export * from './blacklist-command'
|
||||||
export * from './captions'
|
|
||||||
export * from './captions-command'
|
export * from './captions-command'
|
||||||
|
export * from './captions'
|
||||||
export * from './change-ownership-command'
|
export * from './change-ownership-command'
|
||||||
|
export * from './channels'
|
||||||
|
export * from './channels-command'
|
||||||
export * from './history-command'
|
export * from './history-command'
|
||||||
export * from './imports-command'
|
export * from './imports-command'
|
||||||
export * from './live-command'
|
export * from './live-command'
|
||||||
|
@ -11,6 +13,5 @@ export * from './playlists'
|
||||||
export * from './services-command'
|
export * from './services-command'
|
||||||
export * from './streaming-playlists-command'
|
export * from './streaming-playlists-command'
|
||||||
export * from './streaming-playlists'
|
export * from './streaming-playlists'
|
||||||
export * from './video-channels'
|
|
||||||
export * from './video-comments'
|
export * from './video-comments'
|
||||||
export * from './videos'
|
export * from './videos'
|
||||||
|
|
|
@ -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
|
|
||||||
}
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
export * from './video-channel-create-result.model'
|
||||||
export * from './video-channel-create.model'
|
export * from './video-channel-create.model'
|
||||||
export * from './video-channel-update.model'
|
export * from './video-channel-update.model'
|
||||||
export * from './video-channel.model'
|
export * from './video-channel.model'
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
export interface VideoChannelCreateResult {
|
||||||
|
id: number
|
||||||
|
}
|
Loading…
Reference in New Issue