Skip to content

Instantly share code, notes, and snippets.

@dimified
Created April 18, 2016 22:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dimified/66a97e2b507a7c058d73031b215832b0 to your computer and use it in GitHub Desktop.
Save dimified/66a97e2b507a7c058d73031b215832b0 to your computer and use it in GitHub Desktop.
E2E tests
'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
@dimified
Copy link
Author

Improvements: All expect statements will be split into separate tests.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment