]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - client/e2e/src/po/video-watch.po.ts
Add ability for admins to set default p2p policy
[github/Chocobozzz/PeerTube.git] / client / e2e / src / po / video-watch.po.ts
1 import { browserSleep, FIXTURE_URLS, go } from '../utils'
2
3 export class VideoWatchPage {
4
5 constructor (private isMobileDevice: boolean, private isSafari: boolean) {
6
7 }
8
9 waitWatchVideoName (videoName: string) {
10 if (this.isSafari) return browserSleep(5000)
11
12 // On mobile we display the first node, on desktop the second
13 const index = this.isMobileDevice ? 0 : 1
14
15 return browser.waitUntil(async () => {
16 return (await $$('.video-info .video-info-name')[index].getText()).includes(videoName)
17 })
18 }
19
20 getVideoName () {
21 return this.getVideoNameElement().then(e => e.getText())
22 }
23
24 getPrivacy () {
25 return $('.attribute-privacy .attribute-value').getText()
26 }
27
28 getLicence () {
29 return $('.attribute-licence .attribute-value').getText()
30 }
31
32 async isDownloadEnabled () {
33 await this.clickOnMoreDropdownIcon()
34
35 return $('.dropdown-item .icon-download').isExisting()
36 }
37
38 areCommentsEnabled () {
39 return $('my-video-comment-add').isExisting()
40 }
41
42 isPrivacyWarningDisplayed () {
43 return $('my-privacy-concerns').isDisplayed()
44 }
45
46 async goOnAssociatedEmbed () {
47 let url = await browser.getUrl()
48 url = url.replace('/w/', '/videos/embed/')
49 url = url.replace(':3333', ':9001')
50
51 await go(url)
52 await $('.vjs-big-play-button').waitForDisplayed()
53 }
54
55 async isEmbedWarningDisplayed () {
56 const text = await $('.vjs-dock-description').getText()
57
58 return !!text.trim()
59 }
60
61 goOnP2PMediaLoaderEmbed () {
62 return go(FIXTURE_URLS.HLS_EMBED)
63 }
64
65 goOnP2PMediaLoaderPlaylistEmbed () {
66 return go(FIXTURE_URLS.HLS_PLAYLIST_EMBED)
67 }
68
69 async clickOnUpdate () {
70 await this.clickOnMoreDropdownIcon()
71
72 const items = await $$('.dropdown-menu.show .dropdown-item')
73
74 for (const item of items) {
75 const href = await item.getAttribute('href')
76
77 if (href?.includes('/update/')) {
78 await item.click()
79 return
80 }
81 }
82 }
83
84 clickOnSave () {
85 return $('.action-button-save').click()
86 }
87
88 async createPlaylist (name: string) {
89 const newPlaylistButton = () => $('.new-playlist-button')
90
91 await newPlaylistButton().waitForClickable()
92 await newPlaylistButton().click()
93
94 const displayName = () => $('#displayName')
95
96 await displayName().waitForDisplayed()
97 await displayName().setValue(name)
98
99 return $('.new-playlist-block input[type=submit]').click()
100 }
101
102 async saveToPlaylist (name: string) {
103 const playlist = () => $('my-video-add-to-playlist').$(`.playlist=${name}`)
104
105 await playlist().waitForDisplayed()
106
107 return playlist().click()
108 }
109
110 waitUntilVideoName (name: string, maxTime: number) {
111 return browser.waitUntil(async () => {
112 return (await this.getVideoName()) === name
113 }, { timeout: maxTime })
114 }
115
116 async clickOnMoreDropdownIcon () {
117 const dropdown = $('my-video-actions-dropdown .action-button')
118 await dropdown.click()
119
120 await $('.dropdown-menu.show .dropdown-item').waitForDisplayed()
121 }
122
123 private async getVideoNameElement () {
124 // We have 2 video info name block, pick the first that is not empty
125 const elem = async () => {
126 const elems = await $$('.video-info-first-row .video-info-name').filter(e => e.isDisplayed())
127
128 return elems[0]
129 }
130
131 await browser.waitUntil(async () => {
132 const e = await elem()
133
134 return e?.isDisplayed()
135 })
136
137 return elem()
138 }
139 }