]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - client/e2e/src/videos.e2e-spec.ts
Fix local e2e tests
[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
c8bc2a1a 46 browser.waitForAngularEnabled(false)
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 () => {
c8bc2a1a 114 const oldValue = await browser.waitForAngularEnabled()
84c7cde6
C
115 await browser.waitForAngularEnabled(false)
116
d1bd87e0
C
117 await videoWatchPage.goOnAssociatedEmbed()
118
7f90579c
C
119 await playerPage.playAndPauseVideo(false)
120 expect(playerPage.getWatchVideoPlayerCurrentTime()).toBeGreaterThanOrEqual(2)
84c7cde6 121
c8bc2a1a 122 await browser.waitForAngularEnabled(oldValue)
84c7cde6
C
123 })
124
125 it('Should watch the p2p media loader embed video', async () => {
c8bc2a1a 126 const oldValue = await browser.waitForAngularEnabled()
84c7cde6
C
127 await browser.waitForAngularEnabled(false)
128
129 await videoWatchPage.goOnP2PMediaLoaderEmbed()
130
7f90579c
C
131 await playerPage.playAndPauseVideo(false)
132 expect(playerPage.getWatchVideoPlayerCurrentTime()).toBeGreaterThanOrEqual(2)
84c7cde6 133
c8bc2a1a 134 await browser.waitForAngularEnabled(oldValue)
5f92c4dc 135 })
e69cb173
C
136
137 it('Should update the video', async () => {
138 if (await skipIfUploadNotSupported()) return
139
140 await browser.get(videoWatchUrl)
141
142 await videoWatchPage.clickOnUpdate()
143
bbe078ba
C
144 videoName += ' updated'
145 await videoUpdatePage.updateName(videoName)
e69cb173
C
146
147 await videoUpdatePage.validUpdate()
148
149 const name = await videoWatchPage.getVideoName()
bbe078ba 150 expect(name).toEqual(videoName)
e69cb173
C
151 })
152
153 it('Should add the video in my playlist', async () => {
154 if (await skipIfUploadNotSupported()) return
155
156 await videoWatchPage.clickOnSave()
bbe078ba
C
157
158 await videoWatchPage.createPlaylist(playlistName)
159
160 await videoWatchPage.saveToPlaylist(playlistName)
e69cb173
C
161
162 await videoUploadPage.navigateTo()
163
164 await videoUploadPage.uploadVideo()
bbe078ba 165 await videoUploadPage.validSecondUploadStep(video2Name)
e69cb173
C
166
167 await videoWatchPage.clickOnSave()
bbe078ba 168 await videoWatchPage.saveToPlaylist(playlistName)
e69cb173
C
169 })
170
bbe078ba 171 it('Should have the playlist in my account', async () => {
e69cb173
C
172 if (await skipIfUploadNotSupported()) return
173
174 await myAccountPage.navigateToMyPlaylists()
175
bbe078ba 176 const videosNumberText = await myAccountPage.getPlaylistVideosText(playlistName)
e69cb173
C
177 expect(videosNumberText).toEqual('2 videos')
178
bbe078ba 179 await myAccountPage.clickOnPlaylist(playlistName)
e69cb173
C
180
181 const count = await myAccountPage.countTotalPlaylistElements()
182 expect(count).toEqual(2)
183 })
184
185 it('Should watch the playlist', async () => {
186 if (await skipIfUploadNotSupported()) return
187
188 await myAccountPage.playPlaylist()
189
c8bc2a1a 190 const oldValue = await browser.waitForAngularEnabled()
7f90579c
C
191 await browser.waitForAngularEnabled(false)
192
bbe078ba 193 await videoWatchPage.waitUntilVideoName(video2Name, 20000 * 1000)
7f90579c 194
c8bc2a1a 195 await browser.waitForAngularEnabled(oldValue)
e69cb173
C
196 })
197
5ab7fd9d
C
198 it('Should watch the webtorrent playlist in the embed', async () => {
199 if (await skipIfUploadNotSupported()) return
200
7f90579c
C
201 const accessToken = await browser.executeScript(`return window.localStorage.getItem('access_token');`)
202 const refreshToken = await browser.executeScript(`return window.localStorage.getItem('refresh_token');`)
203
c8bc2a1a 204 const oldValue = await browser.waitForAngularEnabled()
5ab7fd9d
C
205 await browser.waitForAngularEnabled(false)
206
207 await myAccountPage.goOnAssociatedPlaylistEmbed()
208
6b88559b
C
209 await playerPage.waitUntilPlayerWrapper()
210
7f90579c
C
211 await browser.executeScript(`window.localStorage.setItem('access_token', '${accessToken}');`)
212 await browser.executeScript(`window.localStorage.setItem('refresh_token', '${refreshToken}');`)
213 await browser.executeScript(`window.localStorage.setItem('token_type', 'Bearer');`)
5ab7fd9d 214
7f90579c
C
215 await browser.refresh()
216
217 await playerPage.playVideo()
218
219 await playerPage.waitUntilPlaylistInfo('2/2')
220
c8bc2a1a 221 await browser.waitForAngularEnabled(oldValue)
7f90579c
C
222 })
223
224 it('Should watch the HLS playlist in the embed', async () => {
c8bc2a1a 225 const oldValue = await browser.waitForAngularEnabled()
7f90579c
C
226 await browser.waitForAngularEnabled(false)
227
228 await videoWatchPage.goOnP2PMediaLoaderPlaylistEmbed()
229
230 await playerPage.playVideo()
231
232 await playerPage.waitUntilPlaylistInfo('2/2')
5ab7fd9d 233
c8bc2a1a 234 await browser.waitForAngularEnabled(oldValue)
5ab7fd9d
C
235 })
236
bbe078ba 237 it('Should delete the video 2', async () => {
e69cb173
C
238 if (await skipIfUploadNotSupported()) return
239
7f90579c
C
240 // Go to the dev website
241 await browser.get(videoWatchUrl)
242
e69cb173
C
243 await myAccountPage.navigateToMyVideos()
244
bbe078ba 245 await myAccountPage.removeVideo(video2Name)
e69cb173
C
246 await myAccountPage.validRemove()
247
bbe078ba 248 const count = await myAccountPage.countVideos([ videoName, video2Name ])
e69cb173
C
249 expect(count).toEqual(1)
250 })
251
252 it('Should delete the first video', async () => {
253 if (await skipIfUploadNotSupported()) return
254
bbe078ba 255 await myAccountPage.removeVideo(videoName)
e69cb173 256 await myAccountPage.validRemove()
e69cb173 257 })
5f92c4dc 258})