2022-03-24 13:36:47 +01:00
|
|
|
/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
|
|
|
|
|
|
|
|
import 'mocha'
|
|
|
|
import { HttpStatusCode, VideoPrivacy } from '@shared/models'
|
|
|
|
import {
|
|
|
|
cleanupTests,
|
|
|
|
createMultipleServers,
|
|
|
|
doubleFollow,
|
|
|
|
PeerTubeServer,
|
|
|
|
setAccessTokensToServers,
|
|
|
|
setDefaultVideoChannel
|
|
|
|
} from '@shared/server-commands'
|
|
|
|
|
|
|
|
describe('Test videos views', function () {
|
|
|
|
let servers: PeerTubeServer[]
|
|
|
|
let liveVideoId: string
|
|
|
|
let videoId: string
|
|
|
|
let remoteVideoId: string
|
|
|
|
let userAccessToken: string
|
|
|
|
|
|
|
|
before(async function () {
|
2022-04-06 08:50:43 +02:00
|
|
|
this.timeout(120000)
|
2022-03-24 13:36:47 +01:00
|
|
|
|
|
|
|
servers = await createMultipleServers(2)
|
|
|
|
await setAccessTokensToServers(servers)
|
|
|
|
await setDefaultVideoChannel(servers)
|
|
|
|
|
|
|
|
await servers[0].config.enableLive({ allowReplay: false, transcoding: false });
|
|
|
|
|
|
|
|
({ uuid: videoId } = await servers[0].videos.quickUpload({ name: 'video' }));
|
|
|
|
({ uuid: remoteVideoId } = await servers[1].videos.quickUpload({ name: 'video' }));
|
|
|
|
({ uuid: liveVideoId } = await servers[0].live.create({
|
|
|
|
fields: {
|
|
|
|
name: 'live',
|
|
|
|
privacy: VideoPrivacy.PUBLIC,
|
|
|
|
channelId: servers[0].store.channel.id
|
|
|
|
}
|
|
|
|
}))
|
|
|
|
|
|
|
|
userAccessToken = await servers[0].users.generateUserAndToken('user')
|
|
|
|
|
|
|
|
await doubleFollow(servers[0], servers[1])
|
|
|
|
})
|
|
|
|
|
|
|
|
describe('When viewing a video', async function () {
|
|
|
|
|
|
|
|
// TODO: implement it when we'll remove backward compatibility in REST API
|
|
|
|
it('Should fail without current time')
|
|
|
|
|
|
|
|
it('Should fail with an invalid current time', async function () {
|
|
|
|
await servers[0].views.view({ id: videoId, currentTime: -1, expectedStatus: HttpStatusCode.BAD_REQUEST_400 })
|
|
|
|
await servers[0].views.view({ id: videoId, currentTime: 10, expectedStatus: HttpStatusCode.BAD_REQUEST_400 })
|
|
|
|
})
|
|
|
|
|
|
|
|
it('Should succeed with correct parameters', async function () {
|
|
|
|
await servers[0].views.view({ id: videoId, currentTime: 1 })
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
describe('When getting overall stats', function () {
|
|
|
|
|
|
|
|
it('Should fail with a remote video', async function () {
|
|
|
|
await servers[0].videoStats.getOverallStats({ videoId: remoteVideoId, expectedStatus: HttpStatusCode.FORBIDDEN_403 })
|
|
|
|
})
|
|
|
|
|
|
|
|
it('Should fail without token', async function () {
|
|
|
|
await servers[0].videoStats.getOverallStats({ videoId: videoId, token: null, expectedStatus: HttpStatusCode.UNAUTHORIZED_401 })
|
|
|
|
})
|
|
|
|
|
|
|
|
it('Should fail with another token', async function () {
|
|
|
|
await servers[0].videoStats.getOverallStats({
|
|
|
|
videoId: videoId,
|
|
|
|
token: userAccessToken,
|
|
|
|
expectedStatus: HttpStatusCode.FORBIDDEN_403
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
2022-05-05 14:12:57 +02:00
|
|
|
it('Should fail with an invalid start date', async function () {
|
|
|
|
await servers[0].videoStats.getOverallStats({
|
|
|
|
videoId,
|
|
|
|
startDate: 'fake' as any,
|
|
|
|
endDate: new Date().toISOString(),
|
|
|
|
expectedStatus: HttpStatusCode.BAD_REQUEST_400
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
it('Should fail with an invalid end date', async function () {
|
|
|
|
await servers[0].videoStats.getOverallStats({
|
|
|
|
videoId,
|
|
|
|
startDate: new Date().toISOString(),
|
|
|
|
endDate: 'fake' as any,
|
|
|
|
expectedStatus: HttpStatusCode.BAD_REQUEST_400
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
2022-03-24 13:36:47 +01:00
|
|
|
it('Should succeed with the correct parameters', async function () {
|
2022-05-05 14:12:57 +02:00
|
|
|
await servers[0].videoStats.getOverallStats({
|
|
|
|
videoId,
|
|
|
|
startDate: new Date().toISOString(),
|
|
|
|
endDate: new Date().toISOString()
|
|
|
|
})
|
2022-03-24 13:36:47 +01:00
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
describe('When getting timeserie stats', function () {
|
|
|
|
|
|
|
|
it('Should fail with a remote video', async function () {
|
|
|
|
await servers[0].videoStats.getTimeserieStats({
|
|
|
|
videoId: remoteVideoId,
|
|
|
|
metric: 'viewers',
|
|
|
|
expectedStatus: HttpStatusCode.FORBIDDEN_403
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
it('Should fail without token', async function () {
|
|
|
|
await servers[0].videoStats.getTimeserieStats({
|
|
|
|
videoId: videoId,
|
|
|
|
token: null,
|
|
|
|
metric: 'viewers',
|
|
|
|
expectedStatus: HttpStatusCode.UNAUTHORIZED_401
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
it('Should fail with another token', async function () {
|
|
|
|
await servers[0].videoStats.getTimeserieStats({
|
|
|
|
videoId: videoId,
|
|
|
|
token: userAccessToken,
|
|
|
|
metric: 'viewers',
|
|
|
|
expectedStatus: HttpStatusCode.FORBIDDEN_403
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
it('Should fail with an invalid metric', async function () {
|
|
|
|
await servers[0].videoStats.getTimeserieStats({ videoId, metric: 'hello' as any, expectedStatus: HttpStatusCode.BAD_REQUEST_400 })
|
|
|
|
})
|
|
|
|
|
2022-04-07 10:53:35 +02:00
|
|
|
it('Should fail with an invalid start date', async function () {
|
|
|
|
await servers[0].videoStats.getTimeserieStats({
|
|
|
|
videoId,
|
|
|
|
metric: 'viewers',
|
|
|
|
startDate: 'fake' as any,
|
|
|
|
endDate: new Date(),
|
|
|
|
expectedStatus: HttpStatusCode.BAD_REQUEST_400
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
it('Should fail with an invalid end date', async function () {
|
|
|
|
await servers[0].videoStats.getTimeserieStats({
|
|
|
|
videoId,
|
|
|
|
metric: 'viewers',
|
|
|
|
startDate: new Date(),
|
|
|
|
endDate: 'fake' as any,
|
|
|
|
expectedStatus: HttpStatusCode.BAD_REQUEST_400
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
it('Should fail if start date is specified but not end date', async function () {
|
|
|
|
await servers[0].videoStats.getTimeserieStats({
|
|
|
|
videoId,
|
|
|
|
metric: 'viewers',
|
|
|
|
startDate: new Date(),
|
|
|
|
expectedStatus: HttpStatusCode.BAD_REQUEST_400
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
it('Should fail if end date is specified but not start date', async function () {
|
|
|
|
await servers[0].videoStats.getTimeserieStats({
|
|
|
|
videoId,
|
|
|
|
metric: 'viewers',
|
|
|
|
endDate: new Date(),
|
|
|
|
expectedStatus: HttpStatusCode.BAD_REQUEST_400
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
it('Should fail with a too big interval', async function () {
|
|
|
|
await servers[0].videoStats.getTimeserieStats({
|
|
|
|
videoId,
|
|
|
|
metric: 'viewers',
|
2022-05-06 14:23:02 +02:00
|
|
|
startDate: new Date('2000-04-07T08:31:57.126Z'),
|
2022-04-07 10:53:35 +02:00
|
|
|
endDate: new Date(),
|
|
|
|
expectedStatus: HttpStatusCode.BAD_REQUEST_400
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
2022-03-24 13:36:47 +01:00
|
|
|
it('Should succeed with the correct parameters', async function () {
|
|
|
|
await servers[0].videoStats.getTimeserieStats({ videoId, metric: 'viewers' })
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
describe('When getting retention stats', function () {
|
|
|
|
|
|
|
|
it('Should fail with a remote video', async function () {
|
|
|
|
await servers[0].videoStats.getRetentionStats({
|
|
|
|
videoId: remoteVideoId,
|
|
|
|
expectedStatus: HttpStatusCode.FORBIDDEN_403
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
it('Should fail without token', async function () {
|
|
|
|
await servers[0].videoStats.getRetentionStats({
|
|
|
|
videoId: videoId,
|
|
|
|
token: null,
|
|
|
|
expectedStatus: HttpStatusCode.UNAUTHORIZED_401
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
it('Should fail with another token', async function () {
|
|
|
|
await servers[0].videoStats.getRetentionStats({
|
|
|
|
videoId: videoId,
|
|
|
|
token: userAccessToken,
|
|
|
|
expectedStatus: HttpStatusCode.FORBIDDEN_403
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
it('Should fail on live video', async function () {
|
|
|
|
await servers[0].videoStats.getRetentionStats({ videoId: liveVideoId, expectedStatus: HttpStatusCode.BAD_REQUEST_400 })
|
|
|
|
})
|
|
|
|
|
|
|
|
it('Should succeed with the correct parameters', async function () {
|
|
|
|
await servers[0].videoStats.getRetentionStats({ videoId })
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
after(async function () {
|
|
|
|
await cleanupTests(servers)
|
|
|
|
})
|
|
|
|
})
|