FOLLOWERS: [ 'createdAt', 'state', 'score' ],
FOLLOWING: [ 'createdAt', 'redundancyAllowed', 'state' ],
- VIDEOS: [ 'name', 'duration', 'createdAt', 'publishedAt', 'views', 'likes', 'trending' ],
+ VIDEOS: [ 'name', 'duration', 'createdAt', 'publishedAt', 'originallyPublishedAt', 'views', 'likes', 'trending' ],
- VIDEOS_SEARCH: [ 'name', 'duration', 'createdAt', 'publishedAt', 'views', 'likes', 'match' ],
+ VIDEOS_SEARCH: [ 'name', 'duration', 'createdAt', 'publishedAt', 'originallyPublishedAt', 'views', 'likes', 'match' ],
VIDEO_CHANNELS_SEARCH: [ 'match', 'displayName', 'createdAt' ],
ACCOUNTS_BLOCKLIST: [ 'createdAt' ],
if (options.isCount !== true) {
if (exists(options.sort)) {
+ if (options.sort === '-originallyPublishedAt' || options.sort === 'originallyPublishedAt') {
+ attributes.push('COALESCE("video"."originallyPublishedAt", "video"."publishedAt") AS "publishedAtForOrder"')
+ }
+
order = buildOrder(model, options.sort)
suffix += `${order} `
}
if (field.toLowerCase() === 'match') { // Search
firstSort = '"similarity"'
+ } else if (field === 'originallyPublishedAt') {
+ firstSort = '"publishedAtForOrder"'
} else if (field.includes('.')) {
firstSort = field
} else {
describe('Test a single server', function () {
let server: ServerInfo = null
let videoId = -1
+ let videoId2 = -1
let videoUUID = ''
let videosListBase: any[] = null
it('Should upload 6 videos', async function () {
this.timeout(25000)
- const videos = [
+ const videos = new Set([
'video_short.mp4', 'video_short.ogv', 'video_short.webm',
'video_short1.webm', 'video_short2.webm', 'video_short3.webm'
- ]
+ ])
- const tasks: Promise<any>[] = []
for (const video of videos) {
const videoAttributes = {
name: video + ' name',
fixture: video
}
- const p = uploadVideo(server.url, server.accessToken, videoAttributes)
- tasks.push(p)
+ await uploadVideo(server.url, server.accessToken, videoAttributes)
}
-
- await Promise.all(tasks)
})
it('Should have the correct durations', async function () {
expect(videos[5].name).to.equal('video_short1.webm name')
videoId = videos[3].uuid
+ videoId2 = videos[5].uuid
})
it('Should list and sort by trending in descending order', async function () {
expect(video.dislikes).to.equal(1)
})
+ it('Should sort by originallyPublishedAt', async function () {
+ {
+
+ {
+ const now = new Date()
+ const attributes = { originallyPublishedAt: now.toISOString() }
+ await updateVideo(server.url, server.accessToken, videoId, attributes)
+
+ const res = await getVideosListSort(server.url, '-originallyPublishedAt')
+ const names = res.body.data.map(v => v.name)
+
+ expect(names[0]).to.equal('my super video updated')
+ expect(names[1]).to.equal('video_short2.webm name')
+ expect(names[2]).to.equal('video_short1.webm name')
+ expect(names[3]).to.equal('video_short.webm name')
+ expect(names[4]).to.equal('video_short.ogv name')
+ expect(names[5]).to.equal('video_short.mp4 name')
+ }
+
+ {
+ const now = new Date()
+ const attributes = { originallyPublishedAt: now.toISOString() }
+ await updateVideo(server.url, server.accessToken, videoId2, attributes)
+
+ const res = await getVideosListSort(server.url, '-originallyPublishedAt')
+ const names = res.body.data.map(v => v.name)
+
+ expect(names[0]).to.equal('video_short1.webm name')
+ expect(names[1]).to.equal('my super video updated')
+ expect(names[2]).to.equal('video_short2.webm name')
+ expect(names[3]).to.equal('video_short.webm name')
+ expect(names[4]).to.equal('video_short.ogv name')
+ expect(names[5]).to.equal('video_short.mp4 name')
+ }
+ }
+ })
+
after(async function () {
await cleanupTests([ server ])
})