Skip to content

Commit 4466d43

Browse files
committed
test(VideoLoader): adding e2e tests
1 parent 08f8d2f commit 4466d43

File tree

3 files changed

+110
-0
lines changed

3 files changed

+110
-0
lines changed

e2e/app.po.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ export class AppPage {
1212
.then((posY) => posY === y));
1313
}
1414

15+
scrollToBottom() {
16+
browser.executeScript(`return window.scrollTo(0, document.documentElement.offsetHeight);`);
17+
}
18+
1519
setWindowSize(x: number, y: number) {
1620
browser.driver.manage().window().setSize(x, y);
1721
return browser.wait(() =>
@@ -23,6 +27,10 @@ export class AppPage {
2327
return browser.executeScript(`return { height: window.outerHeight, width: window.outerWidth };`);
2428
}
2529

30+
getDocumentHeight() {
31+
return browser.executeScript(`return document.documentElement.offsetHeight;`);
32+
}
33+
2634
getScrollYPosition() {
2735
return browser.executeScript('return window.pageYOffset;');
2836
}
@@ -62,4 +70,25 @@ export class AppPage {
6270
getBottomFullResCountElement() {
6371
return element(by.css('.full-res-count'));
6472
}
73+
74+
getVideoElement() {
75+
return element(by.css('sn-video-loader'));
76+
}
77+
78+
getVideoSrc() {
79+
return element(by.css('sn-video-loader video')).getAttribute('src');
80+
}
81+
82+
getVideoElementClass() {
83+
return this.getVideoElement().getAttribute('class');
84+
}
85+
86+
isVideoLoaded() {
87+
return this.getVideoElementClass()
88+
.then((result: string) => result.includes('sn-video-loaded'));
89+
}
90+
91+
waitForVideoLoaded() {
92+
return browser.wait(() => this.isVideoLoaded());
93+
}
6594
}
File renamed without changes.

e2e/video-loader.e2e-spec.ts

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
import { AppPage } from './app.po';
2+
import { browser } from 'protractor';
3+
import { video } from '../src/app/app-data';
4+
5+
describe('VideoLoader Lib E2E Tests', function () {
6+
let page: AppPage;
7+
8+
const browserWaitTimeout = 10000;
9+
10+
beforeEach(() => {
11+
page = new AppPage();
12+
page.navigateTo();
13+
page.scrollTo();
14+
});
15+
16+
afterEach(() => {
17+
// ensure no errors appear in console
18+
browser.manage()
19+
.logs()
20+
.get('browser')
21+
.then((browserLog) => {
22+
expect(browserLog).toEqual([]);
23+
});
24+
});
25+
26+
describe('video not in viewport', () => {
27+
beforeEach(() => page.setWindowSize(400, 580));
28+
29+
it('should not load video', () => {
30+
expect(page.isVideoLoaded()).toBeFalsy();
31+
});
32+
33+
});
34+
35+
describe('video in viewport', () => {
36+
beforeEach(() => page.setWindowSize(400, 580));
37+
38+
it('should load video when in viewport', () => {
39+
expect(page.isVideoLoaded()).toBeFalsy();
40+
41+
page.scrollToBottom();
42+
page.waitForVideoLoaded();
43+
44+
expect(page.isVideoLoaded()).toBeTruthy();
45+
expect(page.getVideoSrc()).toEqual(video.videos[0].url);
46+
});
47+
48+
});
49+
50+
describe('responsive video', () => {
51+
52+
it('should load correct video for "xs" device size', () => {
53+
page.setWindowSize(400, 580);
54+
page.scrollToBottom();
55+
page.waitForVideoLoaded();
56+
57+
expect(page.isVideoLoaded()).toBeTruthy();
58+
expect(page.getVideoSrc()).toEqual(video.videos[0].url);
59+
});
60+
61+
it('should load correct video for "md" device size', () => {
62+
page.setWindowSize(768, 580);
63+
page.scrollToBottom();
64+
page.waitForVideoLoaded();
65+
66+
expect(page.isVideoLoaded()).toBeTruthy();
67+
expect(page.getVideoSrc()).toEqual(video.videos[1].url);
68+
});
69+
70+
it('should load correct video for "lg" device size', () => {
71+
page.setWindowSize(1024, 580);
72+
page.scrollToBottom();
73+
page.waitForVideoLoaded();
74+
75+
expect(page.isVideoLoaded()).toBeTruthy();
76+
expect(page.getVideoSrc()).toEqual(video.videos[2].url);
77+
});
78+
79+
});
80+
81+
});

0 commit comments

Comments
 (0)