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