]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - client/e2e/src/videos.e2e-spec.ts
Translated using Weblate (Portuguese (Brazil))
[github/Chocobozzz/PeerTube.git] / client / e2e / src / videos.e2e-spec.ts
CommitLineData
5f92c4dc 1import { browser } from 'protractor'
44d4ee4f 2import { AppPage } from './po/app.po'
ee68bbc4
C
3import { LoginPage } from './po/login.po'
4import { MyAccountPage } from './po/my-account'
7f90579c 5import { PlayerPage } from './po/player.po'
ee68bbc4
C
6import { VideoUpdatePage } from './po/video-update.po'
7import { VideoUploadPage } from './po/video-upload.po'
8import { VideoWatchPage } from './po/video-watch.po'
9import { isIOS, isMobileDevice, isSafari } from './utils'
e69cb173
C
10
11async function skipIfUploadNotSupported () {
12 if (await isMobileDevice() || await isSafari()) {
13 console.log('Skipping because we are on a real device or Safari and BrowserStack does not support file upload.')
14 return true
15 }
16
17 return false
18}
19
5f92c4dc
C
20describe('Videos workflow', () => {
21 let videoWatchPage: VideoWatchPage
e69cb173
C
22 let videoUploadPage: VideoUploadPage
23 let videoUpdatePage: VideoUpdatePage
24 let myAccountPage: MyAccountPage
5f92c4dc 25 let loginPage: LoginPage
44d4ee4f 26 let appPage: AppPage
7f90579c 27 let playerPage: PlayerPage
e69cb173 28
bbe078ba
C
29 let videoName = new Date().getTime() + ' video'
30 const video2Name = new Date().getTime() + ' second video'
31 const playlistName = new Date().getTime() + ' playlist'
e69cb173 32 let videoWatchUrl: string
0b33c520
C
33
34 beforeEach(async () => {
5f92c4dc 35 videoWatchPage = new VideoWatchPage()
e69cb173
C
36 videoUploadPage = new VideoUploadPage()
37 videoUpdatePage = new VideoUpdatePage()
38 myAccountPage = new MyAccountPage()
5f92c4dc 39 loginPage = new LoginPage()
44d4ee4f 40 appPage = new AppPage()
7f90579c 41 playerPage = new PlayerPage()
0b33c520 42
ee68bbc4
C
43 if (await isIOS()) {
44 // iOS does not seem to work with protractor
45 // https://github.com/angular/protractor/issues/2840
46 browser.ignoreSynchronization = true
84c7cde6 47
ee68bbc4
C
48 console.log('iOS detected')
49 } else if (await isMobileDevice()) {
50 console.log('Android detected.')
51 } else if (await isSafari()) {
84c7cde6
C
52 console.log('Safari detected.')
53 }
60c8b8a5
C
54
55 if (!await isMobileDevice()) {
56 await browser.driver.manage().window().maximize()
57 }
5f92c4dc
C
58 })
59
e69cb173
C
60 it('Should log in', async () => {
61 if (await isMobileDevice() || await isSafari()) {
1fad099d 62 console.log('Skipping because we are on a real device or Safari and BrowserStack does not support file upload.')
0b33c520
C
63 return
64 }
65
5f92c4dc
C
66 return loginPage.loginAsRootUser()
67 })
68
44d4ee4f
C
69 it('Should close the welcome modal', async () => {
70 if (await skipIfUploadNotSupported()) return
71
72 await appPage.closeWelcomeModal()
73 })
74
5f92c4dc 75 it('Should upload a video', async () => {
e69cb173 76 if (await skipIfUploadNotSupported()) return
0b33c520 77
e69cb173 78 await videoUploadPage.navigateTo()
5f92c4dc 79
e69cb173
C
80 await videoUploadPage.uploadVideo()
81 return videoUploadPage.validSecondUploadStep(videoName)
5f92c4dc
C
82 })
83
ac043122 84 it('Should list videos', async () => {
e69cb173 85 await videoWatchPage.goOnVideosList(await isMobileDevice(), await isSafari())
0b33c520 86
e69cb173 87 if (await skipIfUploadNotSupported()) return
5f92c4dc
C
88
89 const videoNames = videoWatchPage.getVideosListName()
90 expect(videoNames).toContain(videoName)
91 })
92
93 it('Should go on video watch page', async () => {
0b33c520
C
94 let videoNameToExcept = videoName
95
61c299eb
C
96 if (await isMobileDevice() || await isSafari()) {
97 await browser.get('https://peertube2.cpy.re/videos/watch/122d093a-1ede-43bd-bd34-59d2931ffc5e')
98 videoNameToExcept = 'E2E tests'
99 } else {
100 await videoWatchPage.clickOnVideo(videoName)
101 }
5f92c4dc 102
e69cb173 103 return videoWatchPage.waitWatchVideoName(videoNameToExcept, await isMobileDevice(), await isSafari())
5f92c4dc
C
104 })
105
106 it('Should play the video', async () => {
e69cb173
C
107 videoWatchUrl = await browser.getCurrentUrl()
108
7f90579c
C
109 await playerPage.playAndPauseVideo(true)
110 expect(playerPage.getWatchVideoPlayerCurrentTime()).toBeGreaterThanOrEqual(2)
d1bd87e0
C
111 })
112
113 it('Should watch the associated embed video', async () => {
84c7cde6
C
114 await browser.waitForAngularEnabled(false)
115
d1bd87e0
C
116 await videoWatchPage.goOnAssociatedEmbed()
117
7f90579c
C
118 await playerPage.playAndPauseVideo(false)
119 expect(playerPage.getWatchVideoPlayerCurrentTime()).toBeGreaterThanOrEqual(2)
84c7cde6
C
120
121 await browser.waitForAngularEnabled(true)
122 })
123
124 it('Should watch the p2p media loader embed video', async () => {
125 await browser.waitForAngularEnabled(false)
126
127 await videoWatchPage.goOnP2PMediaLoaderEmbed()
128
7f90579c
C
129 await playerPage.playAndPauseVideo(false)
130 expect(playerPage.getWatchVideoPlayerCurrentTime()).toBeGreaterThanOrEqual(2)
84c7cde6
C
131
132 await browser.waitForAngularEnabled(true)
5f92c4dc 133 })
e69cb173
C
134
135 it('Should update the video', async () => {
136 if (await skipIfUploadNotSupported()) return
137
138 await browser.get(videoWatchUrl)
139
140 await videoWatchPage.clickOnUpdate()
141
bbe078ba
C
142 videoName += ' updated'
143 await videoUpdatePage.updateName(videoName)
e69cb173
C
144
145 await videoUpdatePage.validUpdate()
146
147 const name = await videoWatchPage.getVideoName()
bbe078ba 148 expect(name).toEqual(videoName)
e69cb173
C
149 })
150
151 it('Should add the video in my playlist', async () => {
152 if (await skipIfUploadNotSupported()) return
153
154 await videoWatchPage.clickOnSave()
bbe078ba
C
155
156 await videoWatchPage.createPlaylist(playlistName)
157
158 await videoWatchPage.saveToPlaylist(playlistName)
e69cb173
C
159
160 await videoUploadPage.navigateTo()
161
162 await videoUploadPage.uploadVideo()
bbe078ba 163 await videoUploadPage.validSecondUploadStep(video2Name)
e69cb173
C
164
165 await videoWatchPage.clickOnSave()
bbe078ba 166 await videoWatchPage.saveToPlaylist(playlistName)
e69cb173
C
167 })
168
bbe078ba 169 it('Should have the playlist in my account', async () => {
e69cb173
C
170 if (await skipIfUploadNotSupported()) return
171
172 await myAccountPage.navigateToMyPlaylists()
173
bbe078ba 174 const videosNumberText = await myAccountPage.getPlaylistVideosText(playlistName)
e69cb173
C
175 expect(videosNumberText).toEqual('2 videos')
176
bbe078ba 177 await myAccountPage.clickOnPlaylist(playlistName)
e69cb173
C
178
179 const count = await myAccountPage.countTotalPlaylistElements()
180 expect(count).toEqual(2)
181 })
182
183 it('Should watch the playlist', async () => {
184 if (await skipIfUploadNotSupported()) return
185
186 await myAccountPage.playPlaylist()
187
7f90579c
C
188 await browser.waitForAngularEnabled(false)
189
bbe078ba 190 await videoWatchPage.waitUntilVideoName(video2Name, 20000 * 1000)
7f90579c
C
191
192 await browser.waitForAngularEnabled(true)
e69cb173
C
193 })
194
5ab7fd9d
C
195 it('Should watch the webtorrent playlist in the embed', async () => {
196 if (await skipIfUploadNotSupported()) return
197
7f90579c
C
198 const accessToken = await browser.executeScript(`return window.localStorage.getItem('access_token');`)
199 const refreshToken = await browser.executeScript(`return window.localStorage.getItem('refresh_token');`)
200
5ab7fd9d
C
201 await browser.waitForAngularEnabled(false)
202
203 await myAccountPage.goOnAssociatedPlaylistEmbed()
204
7f90579c
C
205 await browser.executeScript(`window.localStorage.setItem('access_token', '${accessToken}');`)
206 await browser.executeScript(`window.localStorage.setItem('refresh_token', '${refreshToken}');`)
207 await browser.executeScript(`window.localStorage.setItem('token_type', 'Bearer');`)
5ab7fd9d 208
7f90579c
C
209 await browser.refresh()
210
211 await playerPage.playVideo()
212
213 await playerPage.waitUntilPlaylistInfo('2/2')
214
215 await browser.waitForAngularEnabled(true)
216 })
217
218 it('Should watch the HLS playlist in the embed', async () => {
219 await browser.waitForAngularEnabled(false)
220
221 await videoWatchPage.goOnP2PMediaLoaderPlaylistEmbed()
222
223 await playerPage.playVideo()
224
225 await playerPage.waitUntilPlaylistInfo('2/2')
5ab7fd9d
C
226
227 await browser.waitForAngularEnabled(true)
228 })
229
bbe078ba 230 it('Should delete the video 2', async () => {
e69cb173
C
231 if (await skipIfUploadNotSupported()) return
232
7f90579c
C
233 // Go to the dev website
234 await browser.get(videoWatchUrl)
235
e69cb173
C
236 await myAccountPage.navigateToMyVideos()
237
bbe078ba 238 await myAccountPage.removeVideo(video2Name)
e69cb173
C
239 await myAccountPage.validRemove()
240
bbe078ba 241 const count = await myAccountPage.countVideos([ videoName, video2Name ])
e69cb173
C
242 expect(count).toEqual(1)
243 })
244
245 it('Should delete the first video', async () => {
246 if (await skipIfUploadNotSupported()) return
247
bbe078ba 248 await myAccountPage.removeVideo(videoName)
e69cb173 249 await myAccountPage.validRemove()
e69cb173 250 })
5f92c4dc 251})