Verified Commit a5461888 authored by Chocobozzz's avatar Chocobozzz
Browse files

Introduce channels command

parent 57f879a5
......@@ -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' } })
......
......@@ -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 })
})
})
......
......@@ -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 () {
......
/* 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
......
......@@ -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
......
......@@ -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',
......
......@@ -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
......
......@@ -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 () {
......
......@@ -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()
......
......@@ -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
}
})
......
......@@ -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 () {
......
......@@ -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
......
......@@ -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')