]>
Commit | Line | Data |
---|---|---|
b2111066 C |
1 | /* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/no-floating-promises */ |
2 | import { HttpStatusCode, VideoViewEvent } from '@shared/models' | |
3 | import { AbstractCommand, OverrideCommandOptions } from '../shared' | |
4 | ||
5 | export class ViewsCommand extends AbstractCommand { | |
6 | ||
7 | view (options: OverrideCommandOptions & { | |
8 | id: number | string | |
9 | currentTime?: number | |
10 | viewEvent?: VideoViewEvent | |
11 | xForwardedFor?: string | |
12 | }) { | |
13 | const { id, xForwardedFor, viewEvent, currentTime } = options | |
14 | const path = '/api/v1/videos/' + id + '/views' | |
15 | ||
16 | return this.postBodyRequest({ | |
17 | ...options, | |
18 | ||
19 | path, | |
20 | xForwardedFor, | |
21 | fields: { | |
22 | currentTime: currentTime ?? 1, | |
23 | viewEvent | |
24 | }, | |
25 | implicitToken: false, | |
26 | defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204 | |
27 | }) | |
28 | } | |
29 | ||
30 | async simulateView (options: OverrideCommandOptions & { | |
31 | id: number | string | |
32 | xForwardedFor?: string | |
33 | }) { | |
34 | await this.view({ ...options, currentTime: 0 }) | |
35 | await this.view({ ...options, currentTime: 5 }) | |
36 | } | |
37 | ||
38 | async simulateViewer (options: OverrideCommandOptions & { | |
39 | id: number | string | |
40 | currentTimes: number[] | |
41 | xForwardedFor?: string | |
42 | }) { | |
43 | let viewEvent: VideoViewEvent = 'seek' | |
44 | ||
45 | for (const currentTime of options.currentTimes) { | |
46 | await this.view({ ...options, currentTime, viewEvent }) | |
47 | ||
48 | viewEvent = undefined | |
49 | } | |
50 | } | |
51 | } |