Add pagination to account video channels endpoint
This commit is contained in:
parent
b247a13270
commit
91b6631984
5 changed files with 129 additions and 16 deletions
|
@ -16,7 +16,8 @@ import {
|
||||||
accountNameWithHostGetValidator,
|
accountNameWithHostGetValidator,
|
||||||
accountsSortValidator,
|
accountsSortValidator,
|
||||||
ensureAuthUserOwnsAccountValidator,
|
ensureAuthUserOwnsAccountValidator,
|
||||||
videosSortValidator
|
videosSortValidator,
|
||||||
|
videoChannelsSortValidator
|
||||||
} from '../../middlewares/validators'
|
} from '../../middlewares/validators'
|
||||||
import { AccountModel } from '../../models/account/account'
|
import { AccountModel } from '../../models/account/account'
|
||||||
import { AccountVideoRateModel } from '../../models/account/account-video-rate'
|
import { AccountVideoRateModel } from '../../models/account/account-video-rate'
|
||||||
|
@ -56,6 +57,10 @@ accountsRouter.get('/:accountName/videos',
|
||||||
|
|
||||||
accountsRouter.get('/:accountName/video-channels',
|
accountsRouter.get('/:accountName/video-channels',
|
||||||
asyncMiddleware(accountNameWithHostGetValidator),
|
asyncMiddleware(accountNameWithHostGetValidator),
|
||||||
|
paginationValidator,
|
||||||
|
videoChannelsSortValidator,
|
||||||
|
setDefaultSort,
|
||||||
|
setDefaultPagination,
|
||||||
asyncMiddleware(listAccountChannels)
|
asyncMiddleware(listAccountChannels)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -108,7 +113,14 @@ async function listAccounts (req: express.Request, res: express.Response) {
|
||||||
}
|
}
|
||||||
|
|
||||||
async function listAccountChannels (req: express.Request, res: express.Response) {
|
async function listAccountChannels (req: express.Request, res: express.Response) {
|
||||||
const resultList = await VideoChannelModel.listByAccount(res.locals.account.id)
|
const options = {
|
||||||
|
accountId: res.locals.account.id,
|
||||||
|
start: req.query.start,
|
||||||
|
count: req.query.count,
|
||||||
|
sort: req.query.sort,
|
||||||
|
}
|
||||||
|
|
||||||
|
const resultList = await VideoChannelModel.listByAccount(options)
|
||||||
|
|
||||||
return res.json(getFormattedObjects(resultList.data, resultList.total))
|
return res.json(getFormattedObjects(resultList.data, resultList.total))
|
||||||
}
|
}
|
||||||
|
|
|
@ -334,14 +334,21 @@ export class VideoChannelModel extends Model<VideoChannelModel> {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
static listByAccount (accountId: number) {
|
static listByAccount (options: {
|
||||||
|
accountId: number,
|
||||||
|
start: number,
|
||||||
|
count: number,
|
||||||
|
sort: string
|
||||||
|
}) {
|
||||||
const query = {
|
const query = {
|
||||||
order: getSort('createdAt'),
|
offset: options.start,
|
||||||
|
limit: options.count,
|
||||||
|
order: getSort(options.sort),
|
||||||
include: [
|
include: [
|
||||||
{
|
{
|
||||||
model: AccountModel,
|
model: AccountModel,
|
||||||
where: {
|
where: {
|
||||||
id: accountId
|
id: options.accountId
|
||||||
},
|
},
|
||||||
required: true
|
required: true
|
||||||
}
|
}
|
||||||
|
|
|
@ -67,8 +67,30 @@ describe('Test video channels API validator', function () {
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('When listing account video channels', function () {
|
describe('When listing account video channels', function () {
|
||||||
|
const accountChannelPath = '/api/v1/accounts/fake/video-channels'
|
||||||
|
|
||||||
|
it('Should fail with a bad start pagination', async function () {
|
||||||
|
await checkBadStartPagination(server.url, accountChannelPath, server.accessToken)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('Should fail with a bad count pagination', async function () {
|
||||||
|
await checkBadCountPagination(server.url, accountChannelPath, server.accessToken)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('Should fail with an incorrect sort', async function () {
|
||||||
|
await checkBadSortPagination(server.url, accountChannelPath, server.accessToken)
|
||||||
|
})
|
||||||
|
|
||||||
it('Should fail with a unknown account', async function () {
|
it('Should fail with a unknown account', async function () {
|
||||||
await getAccountVideoChannelsList(server.url, 'unknown', 404)
|
await getAccountVideoChannelsList({ url: server.url, accountName: 'unknown', specialStatus: 404 })
|
||||||
|
})
|
||||||
|
|
||||||
|
it('Should succeed with the correct parameters', async function () {
|
||||||
|
await makeGetRequest({
|
||||||
|
url: server.url,
|
||||||
|
path: accountChannelPath,
|
||||||
|
statusCodeExpected: 200
|
||||||
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
import * as chai from 'chai'
|
import * as chai from 'chai'
|
||||||
import 'mocha'
|
import 'mocha'
|
||||||
import { User, Video } from '../../../../shared/index'
|
import { User, Video, VideoChannel } from '../../../../shared/index'
|
||||||
import {
|
import {
|
||||||
cleanupTests,
|
cleanupTests,
|
||||||
createUser,
|
createUser,
|
||||||
|
@ -108,7 +108,11 @@ 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(servers[0].url, userInfo.account.name + '@' + userInfo.account.host)
|
const res = await getAccountVideoChannelsList({
|
||||||
|
url: servers[ 0 ].url,
|
||||||
|
accountName: userInfo.account.name + '@' + userInfo.account.host
|
||||||
|
})
|
||||||
|
|
||||||
expect(res.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.be.an('array')
|
||||||
expect(res.body.data).to.have.lengthOf(2)
|
expect(res.body.data).to.have.lengthOf(2)
|
||||||
|
@ -123,8 +127,62 @@ describe('Test video channels', function () {
|
||||||
expect(videoChannels[1].support).to.equal('super video channel support text')
|
expect(videoChannels[1].support).to.equal('super video channel support text')
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('Should paginate and sort account channels', async function () {
|
||||||
|
{
|
||||||
|
const res = await getAccountVideoChannelsList({
|
||||||
|
url: servers[ 0 ].url,
|
||||||
|
accountName: userInfo.account.name + '@' + userInfo.account.host,
|
||||||
|
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('root_channel')
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
const res = await getAccountVideoChannelsList({
|
||||||
|
url: servers[ 0 ].url,
|
||||||
|
accountName: userInfo.account.name + '@' + userInfo.account.host,
|
||||||
|
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')
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
const res = await getAccountVideoChannelsList({
|
||||||
|
url: servers[ 0 ].url,
|
||||||
|
accountName: userInfo.account.name + '@' + userInfo.account.host,
|
||||||
|
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')
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
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(servers[1].url, userInfo.account.name + '@' + userInfo.account.host)
|
const res = await getAccountVideoChannelsList({
|
||||||
|
url: servers[ 1 ].url,
|
||||||
|
accountName: userInfo.account.name + '@' + userInfo.account.host
|
||||||
|
})
|
||||||
|
|
||||||
expect(res.body.total).to.equal(1)
|
expect(res.body.total).to.equal(1)
|
||||||
expect(res.body.data).to.be.an('array')
|
expect(res.body.data).to.be.an('array')
|
||||||
expect(res.body.data).to.have.lengthOf(1)
|
expect(res.body.data).to.have.lengthOf(1)
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import * as request from 'supertest'
|
import * as request from 'supertest'
|
||||||
import { VideoChannelCreate, VideoChannelUpdate } from '../../models/videos'
|
import { VideoChannelCreate, VideoChannelUpdate } from '../../models/videos'
|
||||||
import { updateAvatarRequest } from '../requests/requests'
|
import { makeGetRequest, updateAvatarRequest } from '../requests/requests'
|
||||||
import { getMyUserInformation, ServerInfo } from '..'
|
import { getMyUserInformation, ServerInfo } from '..'
|
||||||
import { User } from '../..'
|
import { User } from '../..'
|
||||||
|
|
||||||
|
@ -19,14 +19,28 @@ function getVideoChannelsList (url: string, start: number, count: number, sort?:
|
||||||
.expect('Content-Type', /json/)
|
.expect('Content-Type', /json/)
|
||||||
}
|
}
|
||||||
|
|
||||||
function getAccountVideoChannelsList (url: string, accountName: string, specialStatus = 200) {
|
function getAccountVideoChannelsList (parameters: {
|
||||||
|
url: string,
|
||||||
|
accountName: string,
|
||||||
|
start?: number,
|
||||||
|
count?: number,
|
||||||
|
sort?: string,
|
||||||
|
specialStatus?: number
|
||||||
|
}) {
|
||||||
|
const { url, accountName, start, count, sort = 'createdAt', specialStatus = 200 } = parameters
|
||||||
|
|
||||||
const path = '/api/v1/accounts/' + accountName + '/video-channels'
|
const path = '/api/v1/accounts/' + accountName + '/video-channels'
|
||||||
|
|
||||||
return request(url)
|
return makeGetRequest({
|
||||||
.get(path)
|
url,
|
||||||
.set('Accept', 'application/json')
|
path,
|
||||||
.expect(specialStatus)
|
query: {
|
||||||
.expect('Content-Type', /json/)
|
start,
|
||||||
|
count,
|
||||||
|
sort
|
||||||
|
},
|
||||||
|
statusCodeExpected: specialStatus
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
function addVideoChannel (
|
function addVideoChannel (
|
||||||
|
|
Loading…
Reference in a new issue