Skip to content

Commit d56f560

Browse files
SergeyKuryatnickvalorkin
authored andcommitted
feat(e2e): added more e2e test
close #1163
1 parent b38af94 commit d56f560

12 files changed

+811
-5
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ npm-debug.log
2424
/components/**/*.js
2525
/components/**/*.js.map
2626
/components/**/*.d.ts
27+
/tests_e2e/**/*.e2e.js
28+
/tests_e2e/**/*.e2e.js.map
2729
ng2-bootstrap.js
2830
ng2-bootstrap.d.ts
2931
ng2-bootstrap.js.map

package.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,8 @@
9090
"gulp": "3.9.1",
9191
"gulp-size": "2.1.0",
9292
"gulp-tslint": "6.1.2",
93+
"jasmine": "2.5.2",
94+
"jasmine-data-provider": "2.2.0",
9395
"lite-server": "2.2.2",
9496
"marked": "0.3.6",
9597
"ng2-webpack-config": "0.0.5",
@@ -101,7 +103,9 @@
101103
"tslint-config-valorsoft": "1.1.1",
102104
"typedoc": "0.5.0",
103105
"typescript": "2.0.6",
106+
"protractor": "4.0.9",
104107
"wallaby-webpack": "0.0.26",
105108
"zone.js": "0.6.25"
109+
"protractor": "4.0.3"
106110
}
107111
}

protractor.conf.js

Lines changed: 34 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,36 @@
1-
/**
2-
* @author: @AngularClass
3-
*/
41
'use strict';
52

6-
// look in ./config for protractor.conf.js
7-
module.exports.config = require('./config/protractor.conf.js').config;
3+
exports.config = {
4+
seleniumAddress: 'http://127.0.0.1:4444/wd/hub',
5+
6+
useAllAngular2AppRoots: true,
7+
8+
baseUrl: 'http://localhost:3000/',
9+
10+
multiCapabilities: [
11+
{
12+
browserName: 'chrome',
13+
shardTestFiles: true,
14+
maxInstances: 1
15+
}
16+
17+
/*{
18+
browserName: 'firefox',
19+
shardTestFiles: true,
20+
maxInstances: 4
21+
}*/
22+
],
23+
24+
specs: [
25+
// './tests_e2e/tests/*.e2e.js'
26+
'./tests_e2e/tests/accordion-demo.e2e.js'
27+
// './tests_e2e/tests/modals-demo.e2e.js'
28+
],
29+
30+
framework: 'jasmine',
31+
32+
jasmineNodeOpts: {
33+
showColors: true,
34+
defaultTimeoutInterval: 80000
35+
}
36+
};
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import { $ } from 'protractor';
2+
import { ElementFinder } from 'protractor/built/index';
3+
4+
const getTabHeaderAccordionPage = (tabNumber:number) => {
5+
return $('accordion-group:nth-child(' + tabNumber + ') .panel-heading');
6+
};
7+
const getTabContentAccordionPage = (tabNumber:number) => {
8+
return $('accordion-group:nth-child(' + tabNumber + ') .panel-body');
9+
};
10+
11+
export class DataProvider {
12+
13+
public static accordionTableContent: any = {
14+
'1stTabHeaderText': {element: (): ElementFinder => getTabHeaderAccordionPage(1), actualResult: 'Static Header, initially expanded'},
15+
'1stTabContentText': {element: (): ElementFinder => getTabContentAccordionPage(1), actualResult: 'This content is straight in the template.'},
16+
'2stTabHeaderText': {element: (): ElementFinder => getTabHeaderAccordionPage(2), actualResult: 'Dynamic Group Header - 1'},
17+
'2stTabContentText': {element: (): ElementFinder => getTabContentAccordionPage(2), actualResult: 'Dynamic Group Body - 1'},
18+
'3stTabHeaderText': {element: (): ElementFinder => getTabHeaderAccordionPage(3), actualResult: 'Dynamic Group Header - 2'},
19+
'3stTabContentText': {element: (): ElementFinder => getTabContentAccordionPage(3), actualResult: 'Dynamic Group Body - 2'},
20+
'4stTabHeaderText': {element: (): ElementFinder => getTabHeaderAccordionPage(4), actualResult: 'Dynamic Body Content'},
21+
'4stTabContentText1stString': {element: (): ElementFinder => $('accordion-group:nth-child(4) .panel-body>p'), actualResult: 'The body of the accordion group grows to fit the contents'},
22+
'4stTabContentTextAddButton': {element: (): ElementFinder => $('accordion-group:nth-child(4) .panel-body>button'), actualResult: 'Add Item'},
23+
'4stTabContentTextTableItem': {element: (): ElementFinder => $('accordion-group:nth-child(4) .panel-body :nth-child(4)'), actualResult: 'Item 2'},
24+
'5stTabHeaderText': {element: (): ElementFinder => getTabHeaderAccordionPage(5), actualResult: 'I can have markup, too!'},
25+
'5stTabContentText': {element: (): ElementFinder => getTabContentAccordionPage(5), actualResult: 'This is just some content to illustrate fancy headings.'}
26+
};
27+
}
Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
import { $, $$, browser } from 'protractor';
2+
import { leftPanelTests } from './leftPanelTests.e2e';
3+
import { DataProvider } from './../data-provider/data-provider.e2e';
4+
5+
const buttonToggleLastPanel = $('accordion-demo>p button:nth-child(1)');
6+
const buttonEnableDisablePanel = $('accordion-demo>p button:nth-child(2)');
7+
const buttonAddItem = $('.panel-body .btn');
8+
const checkboxOnlyOne = $('.checkbox .ng-valid');
9+
const getItemsCount = $$('accordion-group:nth-child(4) .panel-body > div');
10+
const buttonArrow = $('.pull-right');
11+
let using = require('jasmine-data-provider');
12+
13+
const getTabHeader = (tabNumber:number) => {
14+
return $('accordion-group:nth-child(' + tabNumber + ') .panel-heading');
15+
};
16+
const getTabContent = (tabNumber:number) => {
17+
return $('accordion-group:nth-child(' + tabNumber + ') .panel-body');
18+
};
19+
20+
describe('Check the Accordion page in bootstrap 3', () => {
21+
beforeAll(() => {
22+
browser.get('#/accordion');
23+
leftPanelTests.checkLeftPanelMini();
24+
leftPanelTests.checkLeftPanelMaxi();
25+
});
26+
it('Close/open first tab by click', () => {
27+
getTabHeader(1).click();
28+
expect(getTabContent(1).isDisplayed()).toBe(false);
29+
getTabHeader(1).click();
30+
expect(getTabContent(1).isDisplayed()).toBe(true);
31+
});
32+
it('Open/close last tab with button Toggle Last Panel', () => {
33+
buttonToggleLastPanel.click();
34+
expect(getTabContent(5).isDisplayed()).toBe(true);
35+
expect(buttonArrow.getAttribute('class')).toContain('glyphicon-chevron-down');
36+
buttonToggleLastPanel.click();
37+
expect(getTabContent(5).isDisplayed()).toBe(false);
38+
expect(buttonArrow.getAttribute('class')).toContain('glyphicon-chevron-right');
39+
});
40+
it('Button Enable/Disable first panel is ON', () => {
41+
buttonEnableDisablePanel.click();
42+
getTabHeader(1).click();
43+
expect(getTabContent(1).isDisplayed()).toBe(false);
44+
});
45+
it('Button Enable/Disable first panel is OFF', () => {
46+
buttonEnableDisablePanel.click();
47+
getTabHeader(1).click();
48+
expect(getTabHeader(1).isDisplayed()).toBe(true);
49+
});
50+
it('Add items in 4th tab', () => {
51+
getTabHeader(4).click();
52+
expect(getItemsCount.count()).toBe(3);
53+
buttonAddItem.click();
54+
buttonAddItem.click();
55+
expect(getItemsCount.count()).toBe(5);
56+
});
57+
it('Open all tabs together', () => {
58+
checkboxOnlyOne.click();
59+
getTabHeader(1).click();
60+
getTabHeader(2).click();
61+
getTabHeader(3).click();
62+
getTabHeader(5).click();
63+
expect(getTabHeader(1).isDisplayed()).toBe(true);
64+
expect(getTabHeader(2).isDisplayed()).toBe(true);
65+
expect(getTabHeader(3).isDisplayed()).toBe(true);
66+
expect(getTabHeader(4).isDisplayed()).toBe(true);
67+
expect(getTabHeader(5).isDisplayed()).toBe(true);
68+
});
69+
using (DataProvider.accordionTableContent, (data:any, description:string) => {
70+
it ('Check table texts: ' + description, () => {
71+
expect(data.element().getText()).toBe(data.actualResult);
72+
});
73+
});
74+
});
75+
describe('Check the Accordion page in bootstrap 4', () => {
76+
beforeAll(() => {
77+
browser.get('index-bs4.html#/accordion');
78+
leftPanelTests.checkLeftPanelMini();
79+
leftPanelTests.checkLeftPanelMaxi();
80+
});
81+
it('Close/open first tab by click', () => {
82+
getTabHeader(1).click();
83+
expect(getTabContent(1).isDisplayed()).toBe(false);
84+
getTabHeader(1).click();
85+
expect(getTabContent(1).isDisplayed()).toBe(true);
86+
});
87+
it('Open/close last tab with button Toggle Last Panel', () => {
88+
buttonToggleLastPanel.click();
89+
expect(getTabContent(5).isDisplayed()).toBe(true);
90+
expect(buttonArrow.getAttribute('class')).toContain('glyphicon-chevron-down');
91+
buttonToggleLastPanel.click();
92+
expect(getTabContent(5).isDisplayed()).toBe(false);
93+
expect(buttonArrow.getAttribute('class')).toContain('glyphicon-chevron-right');
94+
});
95+
it('Button Enable/Disable first panel is ON', () => {
96+
buttonEnableDisablePanel.click();
97+
getTabHeader(1).click();
98+
expect(getTabContent(1).isDisplayed()).toBe(false);
99+
});
100+
it('Button Enable/Disable first panel is OFF', () => {
101+
buttonEnableDisablePanel.click();
102+
getTabHeader(1).click();
103+
expect(getTabHeader(1).isDisplayed()).toBe(true);
104+
});
105+
it('Add items in 4th tab', () => {
106+
getTabHeader(4).click();
107+
expect(getItemsCount.count()).toBe(3);
108+
buttonAddItem.click();
109+
buttonAddItem.click();
110+
expect(getItemsCount.count()).toBe(5);
111+
});
112+
it('Open all tabs together', () => {
113+
checkboxOnlyOne.click();
114+
getTabHeader(1).click();
115+
getTabHeader(2).click();
116+
getTabHeader(3).click();
117+
getTabHeader(5).click();
118+
expect(getTabHeader(1).isDisplayed()).toBe(true);
119+
expect(getTabHeader(2).isDisplayed()).toBe(true);
120+
expect(getTabHeader(3).isDisplayed()).toBe(true);
121+
expect(getTabHeader(4).isDisplayed()).toBe(true);
122+
expect(getTabHeader(5).isDisplayed()).toBe(true);
123+
});
124+
using (DataProvider.accordionTableContent, (data:any, description:string) => {
125+
it ('Check table texts: ' + description, () => {
126+
expect(data.element().getText()).toBe(data.actualResult);
127+
});
128+
});
129+
});

tests_e2e/tests/alert-demo.e2e.ts

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
import { $, $$, browser } from 'protractor/globals';
2+
3+
const leftPanelTests = require('./../data/leftPanelTests.e2e');
4+
const buttonAddAlert = $('alert-demo .btn');
5+
const alertWarning = $('.alert.alert-warning');
6+
const getAlertCount = $$('alert > div');
7+
const getCloseButton = (tabNumber:any) => {
8+
return 'alert-demo alert:nth-child(' + tabNumber + ') .close';
9+
};
10+
11+
describe('Alerts page test on bootstrap 3', () => {
12+
beforeAll(() => {
13+
browser.get('#/alerts');
14+
browser.ignoreSynchronization = true;
15+
leftPanelTests.checkLeftPanelMini();
16+
leftPanelTests.checkLeftPanelMaxi();
17+
});
18+
beforeEach(() => {
19+
browser.refresh();
20+
});
21+
it('Warning alert is displayed', () => {
22+
expect(alertWarning.isDisplayed()).toBe(true);
23+
});
24+
it('Warning alert is disappear', () => {
25+
browser.sleep(5000);
26+
expect(alertWarning.isPresent()).toBe(false);
27+
});
28+
it('Default warnings count', () => {
29+
expect(getAlertCount.count()).toBe(3);
30+
});
31+
it('Adding warnings', () => {
32+
buttonAddAlert.click();
33+
buttonAddAlert.click();
34+
expect(getAlertCount.count()).toBe(5);
35+
});
36+
it('User can delete danger and success alerts', () => {
37+
$(getCloseButton(2)).click();
38+
$(getCloseButton(1)).click();
39+
expect(getAlertCount.count()).toBe(1);
40+
});
41+
it('User can delete added alerts', () => {
42+
buttonAddAlert.click();
43+
$(getCloseButton(3)).click();
44+
expect(getAlertCount.count()).toBe(3);
45+
});
46+
});
47+
describe('Alerts page test on bootstrap 4', () => {
48+
beforeAll(() => {
49+
browser.get('index-bs4.html#/alerts');
50+
browser.ignoreSynchronization = true;
51+
leftPanelTests.checkLeftPanelMini();
52+
leftPanelTests.checkLeftPanelMaxi();
53+
});
54+
beforeEach(() => {
55+
browser.refresh();
56+
});
57+
it('Warning alert is displayed', () => {
58+
expect(alertWarning.isDisplayed()).toBe(true);
59+
});
60+
it('Warning alert is disappear', () => {
61+
browser.sleep(5000);
62+
expect(alertWarning.isPresent()).toBe(false);
63+
});
64+
it('Default warnings count', () => {
65+
expect(getAlertCount.count()).toBe(3);
66+
});
67+
it('Adding warnings', () => {
68+
buttonAddAlert.click();
69+
buttonAddAlert.click();
70+
expect(getAlertCount.count()).toBe(5);
71+
});
72+
it('User can delete danger and success alerts', () => {
73+
$(getCloseButton(1)).click();
74+
$(getCloseButton(1)).click();
75+
expect(getAlertCount.count()).toBe(1);
76+
});
77+
it('User can delete added alerts', () => {
78+
buttonAddAlert.click();
79+
$(getCloseButton(3)).click();
80+
expect(getAlertCount.count()).toBe(3);
81+
});
82+
});

0 commit comments

Comments
 (0)