Created
April 18, 2016 22:38
-
-
Save dimified/66a97e2b507a7c058d73031b215832b0 to your computer and use it in GitHub Desktop.
E2E tests
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'use strict' | |
hasClass = (element, cls) -> | |
return element.getAttribute('class').then (classes) -> | |
return classes.split(' ').indexOf(cls) != -1 | |
browser.driver.manage().window().setSize(1024, 768) | |
describe 'App featuring', () -> | |
describe 'header', () -> | |
it 'should have a title', () -> | |
browser.get('/app/') | |
expect(browser.getTitle()).toEqual('Zumtobel ecoCALC light') | |
return | |
return | |
describe 'footer', () -> | |
it 'should toggle overlay language', () -> | |
expect(element(By.id('language')).isDisplayed()).toBe(true) | |
element(By.id('language')).click() | |
expect(element(By.id('overlayLanguage')).isDisplayed()).toBe(true) | |
element(By.id('language')).click() | |
expect(element(By.id('overlayLanguage')).isDisplayed()).toBe(false) | |
return | |
it 'should toggle overlay currency', () -> | |
expect(element(By.id('currency')).isDisplayed()).toBe(true) | |
element(By.id('currency')).click() | |
expect(element(By.id('overlayCurrency')).isDisplayed()).toBe(true) | |
element(By.id('currency')).click() | |
expect(element(By.id('overlayCurrency')).isDisplayed()).toBe(false) | |
return | |
it 'should have a deactivated calculate button', () -> | |
expect(hasClass(element(By.css('[calc-edit]')), 'inactive')).toBe(true) | |
return | |
return # describe | |
describe 'ecat', () -> | |
it 'should display only the first image thumb as selectable', () -> | |
element(By.css('[solution="0"] .image-thumb > span')).getCssValue('color').then (value) -> | |
expect(value).toEqual('rgba(0, 0, 0, 1)') | |
return | |
element(By.css('[solution="1"] .image-thumb > span')).getCssValue('color').then (value) -> | |
expect(value).toEqual('rgba(204, 204, 204, 1)') | |
return | |
element(By.css('[solution="2"] .image-thumb > span')).getCssValue('color').then (value) -> | |
expect(value).toEqual('rgba(204, 204, 204, 1)') | |
return | |
return | |
it 'should not have clickable input fields', () -> | |
expect(element(By.model('store.input.solutions[0].productTitle')).isEnabled()).toBe(false) | |
expect(element(By.css('#inputViewlet [solution="0"] [data="numberOfLuminaires"]')).isEnabled()).toBe(false) | |
expect(element(By.css('#inputViewlet [solution="0"] [data="luminairePrice"]')).isEnabled()).toBe(false) | |
expect(element(By.css('#inputViewlet [solution="0"] [data="maintainedIlluminance"]')).isEnabled()).toBe(false) | |
expect(element(By.css('#inputViewlet [solution="0"] [data="maintenanceFactor"]')).isEnabled()).toBe(false) | |
expect(element(By.model('store.input.solutions[0].burningHoursPerYear')).isEnabled()).toBe(false) | |
expect(element(By.model('store.input.solutions[1].productTitle')).isEnabled()).toBe(false) | |
expect(element(By.model('store.input.solutions[1].numberOfLuminaires')).isEnabled()).toBe(false) | |
expect(element(By.model('store.input.solutions[1].luminairePrice')).isEnabled()).toBe(false) | |
expect(element(By.model('store.input.solutions[1].maintainedIlluminance')).isEnabled()).toBe(false) | |
expect(element(By.model('store.input.solutions[1].maintenanceFactor')).isEnabled()).toBe(false) | |
expect(element(By.model('store.input.solutions[1].burningHoursPerYear')).isEnabled()).toBe(false) | |
expect(element(By.model('store.input.solutions[2].productTitle')).isEnabled()).toBe(false) | |
expect(element(By.model('store.input.solutions[2].numberOfLuminaires')).isEnabled()).toBe(false) | |
expect(element(By.model('store.input.solutions[2].luminairePrice')).isEnabled()).toBe(false) | |
expect(element(By.model('store.input.solutions[2].maintainedIlluminance')).isEnabled()).toBe(false) | |
expect(element(By.model('store.input.solutions[2].maintenanceFactor')).isEnabled()).toBe(false) | |
expect(element(By.model('store.input.solutions[2].burningHoursPerYear')).isEnabled()).toBe(false) | |
return | |
it 'should only open modal for first solution', () -> | |
element(By.css('[solution="2"] .image-thumb')).click() | |
expect(element(By.id('modalEcat')).isDisplayed()).toBe(false) | |
element(By.css('[solution="1"] .image-thumb')).click() | |
expect(element(By.id('modalEcat')).isDisplayed()).toBe(false) | |
element(By.css('[solution="0"] .image-thumb')).click() | |
expect(element(By.id('modalEcat')).isDisplayed()).toBe(true) | |
return | |
it 'should transfer a single article to first solution', () -> | |
browser.setLocation('/solutions/0/set/164836') | |
expect(element(By.model('store.input.solutions[0].productTitle'))).not.toEqual('Lighting Solution 1') | |
expect(element(By.binding('store.input.solutions[0].productDescription'))).not.toEqual('No product choosen') | |
expect(element(By.css('[solution="0"] [data="lampType"]')).getText()).not.toEqual('') | |
expect(element(By.css('[solution="0"] [data="totalPower"]')).getText()).not.toEqual('') | |
expect(element(By.css('[solution="0"] [data="isDimmable"]')).getText()).not.toEqual('') | |
expect(element(By.css('[solution="0"] [data="maintenanceCategory"]')).getText()).not.toEqual('') | |
expect(element(By.css('[solution="0"] .image-thumb > span')).isDisplayed()).toBe(false) | |
element(By.css('[solution="0"] .image-thumb')).getCssValue('background-image').then (value) -> | |
expect(value).not.toEqual('none') | |
return | |
return | |
it 'should have clickable input fields for first solution', () -> | |
expect(element(By.model('store.input.solutions[0].productTitle')).isEnabled()).toBe(true) | |
expect(element(By.model('store.input.solutions[0].numberOfLuminaires')).isEnabled()).toBe(true) | |
expect(element(By.model('store.input.solutions[0].luminairePrice')).isEnabled()).toBe(true) | |
expect(element(By.model('store.input.solutions[0].maintainedIlluminance')).isEnabled()).toBe(true) | |
expect(element(By.model('store.input.solutions[0].maintenanceFactor')).isEnabled()).toBe(true) | |
expect(element(By.model('store.input.solutions[0].burningHoursPerYear')).isEnabled()).toBe(true) | |
return | |
it 'should be opened by link', () -> | |
browser.setLocation('/solutions/0') | |
expect(element(By.id('modalEcat')).isDisplayed()).toBe(true) | |
return | |
it 'should transfer an article by link', () -> | |
browser.setLocation('/solutions/1/set/258583') | |
expect(element(By.model('store.input.solutions[1].productTitle')).isEnabled()).toBe(true) | |
expect(element(By.model('store.input.solutions[1].numberOfLuminaires')).isEnabled()).toBe(true) | |
expect(element(By.model('store.input.solutions[1].luminairePrice')).isEnabled()).toBe(true) | |
expect(element(By.model('store.input.solutions[1].maintainedIlluminance')).isEnabled()).toBe(true) | |
expect(element(By.model('store.input.solutions[1].maintenanceFactor')).isEnabled()).toBe(true) | |
expect(element(By.model('store.input.solutions[1].burningHoursPerYear')).isEnabled()).toBe(true) | |
return | |
return # describe | |
describe 'input', () -> | |
it 'should have an activated calculate button', () -> | |
element(By.model('store.input.solutions[0].luminairePrice')).click() | |
element(By.model('store.input.solutions[0].luminairePrice')).sendKeys(200) | |
element(By.model('store.input.solutions[0].burningHoursPerYear')).click() | |
element(By.model('store.input.solutions[0].burningHoursPerYear')).sendKeys(200) | |
element(By.model('store.input.solutions[0].burningHoursPerYear')).click() | |
element(By.model('store.input.solutions[1].numberOfLuminaires')).click() | |
element(By.model('store.input.solutions[1].numberOfLuminaires')).sendKeys(10) | |
element(By.model('store.input.solutions[1].luminairePrice')).click() | |
element(By.model('store.input.solutions[1].luminairePrice')).sendKeys(200) | |
element(By.model('store.input.solutions[1].maintainedIlluminance')).click() | |
element(By.model('store.input.solutions[1].maintainedIlluminance')).sendKeys(400) | |
element(By.model('store.input.solutions[1].maintenanceFactor')).click() | |
element(By.model('store.input.solutions[1].maintenanceFactor')).sendKeys(1) | |
element(By.model('store.input.solutions[1].burningHoursPerYear')).click() | |
element(By.model('store.input.solutions[1].burningHoursPerYear')).sendKeys(1000) | |
element(By.model('store.input.solutions[1].burningHoursPerYear')).click() | |
expect(hasClass(element(By.id('calculateEdit')), 'inactive')).toBe(false) | |
return | |
it 'should toggle the panel for active solutions', () -> | |
input0 = element(By.css('[solution="0"] .toggle')) | |
input1 = element(By.css('[solution="1"] .toggle')) | |
input2 = element(By.css('[solution="2"] .toggle')) | |
panel = element(By.id('panel')) | |
# panel should be hidden | |
expect(panel.isDisplayed()).toBe(false) | |
# panel should only be toggleable when solutions are active | |
input0.click() | |
expect(panel.isDisplayed()).toBe(true) | |
input1.click() | |
expect(panel.isDisplayed()).toBe(false) | |
input2.click() | |
expect(panel.isDisplayed()).toBe(false) | |
return | |
it 'should toggle overlay for burning hours per year for active solutions', () -> | |
input0 = element(By.model('store.input.solutions[0].burningHoursPerYear')) | |
input1 = element(By.model('store.input.solutions[1].burningHoursPerYear')) | |
input2 = element(By.model('store.input.solutions[2].burningHoursPerYear')) | |
overlay0 = element(By.css('[solution="0"] .overlay-hours')) | |
overlay1 = element(By.css('[solution="1"] .overlay-hours')) | |
overlay2 = element(By.css('[solution="2"] .overlay-hours')) | |
# overlays should be hidden | |
expect(overlay0.isDisplayed()).toBe(false) | |
expect(overlay1.isDisplayed()).toBe(false) | |
expect(overlay2.isDisplayed()).toBe(false) | |
# ehen clicking on first overlay second should disappear | |
input1.click() | |
expect(overlay1.isDisplayed()).toBe(true) | |
# testing whether opened overlay will close when other is clicked | |
input0.click() | |
expect(overlay1.isDisplayed()).toBe(false) | |
expect(overlay0.isDisplayed()).toBe(true) | |
# last overlay should be deactivated | |
input0.click() | |
input2.click() | |
expect(overlay2.isDisplayed()).toBe(false) | |
return | |
it 'should toggle image overlay for active solutions', () -> | |
icon0 = element(By.css('[solution="0"] .zoom')) | |
icon1 = element(By.css('[solution="1"] .zoom')) | |
icon2 = element(By.css('[solution="2"] .zoom')) | |
overlay0 = element(By.css('[solution="0"] .overlay-image')) | |
overlay1 = element(By.css('[solution="1"] .overlay-image')) | |
overlay2 = element(By.css('[solution="2"] .overlay-image')) | |
# overlays should be hidden | |
expect(overlay0.isDisplayed()).toBe(false) | |
expect(overlay1.isDisplayed()).toBe(false) | |
expect(overlay2.isDisplayed()).toBe(false) | |
icon0.click() | |
expect(overlay0.isDisplayed()).toBe(true) | |
element(By.css('[solution="0"] .overlay-image .close')).click() | |
expect(overlay0.isDisplayed()).toBe(false) | |
icon1.click() | |
expect(overlay1.isDisplayed()).toBe(true) | |
icon1.click() | |
expect(overlay1.isDisplayed()).toBe(false) | |
# last overlay should be deactivated | |
icon2.click() | |
expect(overlay2.isDisplayed()).toBe(false) | |
return | |
return # describe | |
describe 'results', () -> | |
it 'should change the calculate button to edit button', () -> | |
expect(element(By.css('#calculateEdit > label')).getText()).toEqual('RESULTS') | |
expect(hasClass(element(By.css('#calculateEdit > i')), 'results')).toBe(true) | |
element(By.css('#calculateEdit')).click() | |
browser.driver.wait -> | |
browser.driver.isElementPresent(By.id('overview')) | |
expect(element(By.css('#calculateEdit > label')).getText()).toEqual('EDIT INPUT') | |
expect(hasClass(element(By.css('#calculateEdit > i')), 'edit')).toBe(true) | |
return | |
return # describe |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Improvements: All expect statements will be split into separate tests.