]>
Commit | Line | Data |
---|---|---|
b2111066 C |
1 | /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */ |
2 | ||
86347717 | 3 | import { expect } from 'chai' |
b2111066 C |
4 | import { prepareViewsServers, prepareViewsVideos, processViewersStats } from '@server/tests/shared' |
5 | import { cleanupTests, PeerTubeServer } from '@shared/server-commands' | |
6 | ||
b2111066 C |
7 | describe('Test views retention stats', function () { |
8 | let servers: PeerTubeServer[] | |
9 | ||
10 | before(async function () { | |
11 | this.timeout(120000) | |
12 | ||
13 | servers = await prepareViewsServers() | |
14 | }) | |
15 | ||
16 | describe('Test retention stats on VOD', function () { | |
17 | let vodVideoId: string | |
18 | ||
19 | before(async function () { | |
ac907dc7 | 20 | this.timeout(120000); |
b2111066 C |
21 | |
22 | ({ vodVideoId } = await prepareViewsVideos({ servers, live: false, vod: true })) | |
23 | }) | |
24 | ||
25 | it('Should display empty retention', async function () { | |
26 | const { data } = await servers[0].videoStats.getRetentionStats({ videoId: vodVideoId }) | |
27 | expect(data).to.have.lengthOf(6) | |
28 | ||
29 | for (let i = 0; i < 6; i++) { | |
30 | expect(data[i].second).to.equal(i) | |
31 | expect(data[i].retentionPercent).to.equal(0) | |
32 | } | |
33 | }) | |
34 | ||
35 | it('Should display appropriate retention metrics', async function () { | |
36 | await servers[0].views.simulateViewer({ xForwardedFor: '127.0.0.2,127.0.0.1', id: vodVideoId, currentTimes: [ 0, 1 ] }) | |
37 | await servers[0].views.simulateViewer({ xForwardedFor: '127.0.0.3,127.0.0.1', id: vodVideoId, currentTimes: [ 1, 3 ] }) | |
38 | await servers[1].views.simulateViewer({ xForwardedFor: '127.0.0.2,127.0.0.1', id: vodVideoId, currentTimes: [ 4 ] }) | |
39 | await servers[1].views.simulateViewer({ xForwardedFor: '127.0.0.3,127.0.0.1', id: vodVideoId, currentTimes: [ 0, 1 ] }) | |
40 | ||
41 | await processViewersStats(servers) | |
42 | ||
43 | const { data } = await servers[0].videoStats.getRetentionStats({ videoId: vodVideoId }) | |
44 | expect(data).to.have.lengthOf(6) | |
45 | ||
46 | expect(data.map(d => d.retentionPercent)).to.deep.equal([ 50, 75, 25, 25, 25, 0 ]) | |
47 | }) | |
48 | }) | |
49 | ||
50 | after(async function () { | |
51 | await cleanupTests(servers) | |
52 | }) | |
53 | }) |