qiprofile
Version:
Quantitative Imaging Profile ( QiPr) web application
172 lines (142 loc) • 6.54 kB
text/coffeescript
_ = require 'lodash'
webdriver = require 'selenium-webdriver'
expect = require('./helpers/expect')()
Page = require './helpers/page'
class CollectionDetailPage extends Page
constructor: ->
super('/quip/breast?project=QIN_Test')
# @returns a promise which resolves to the subject table
# ElementFinder
@property subjectTable: ->
@find('#qi-subject-table')
# @returns a promise which resolves to the subject chart
# ElementFinder
@property subjectChart: ->
@find('#qi-subject-chart')
# @returns the subject table group promise
@property subjectTableGroups: ->
@findAll('.dc-table-label')
# @returns the subject table column promise
@property subjectTableColumns: ->
@findAll('.dc-table-column')
# @returns the collection charts promise
@property collectionCharts: ->
@findAll('.qi-collection-chart')
# @returns the X-axis dropdown promise
@property xAxisDropdowns: ->
@findAll('.qi-x-axis-dropdown')
# @returns the Y-axis dropdown promise
@property yAxisDropdowns: ->
@findAll('.qi-y-axis-dropdown')
describe 'E2E Testing Collection Detail', ->
page = null
before ->
page = new CollectionDetailPage
it 'should load the page', ->
expect(page.content, 'The page was not loaded')
.to.eventually.exist
# The page header test cases.
describe 'Header', ->
it 'should display the billboard', ->
expect(page.billboard, 'The billboard is incorrect')
.to.eventually.equal('Breast Collection')
it 'should have a home button', ->
expect(page.home, 'The home URL is incorrect')
.to.eventually.match(Page.HOME_URL_PAT)
describe 'Help', ->
help = null
before ->
help = page.help
it 'should have help text', ->
expect(help, 'The help text is missing')
.to.eventually.exist.and.not.be.empty
it 'should display a {qu,sugg}estion box hyperlink', ->
expect(help, 'The {qu,sugg}estion box hyperlink is missing')
.to.eventually.include(Page.SUGGESTION_BOX_URL)
# The page main body test cases.
describe 'Charts', ->
it 'should display the subject table', ->
page.subjectTable.then (table) ->
expect(table.isDisplayed(), 'The subject table is missing')
.to.eventually.exist
it 'should display a subject', ->
page.subjectTableGroups.then (subjects) ->
subj = _.first(subjects)
expect(subj.text(), 'The chart table does not display a' +
' subject')
.to.eventually.include('Patient')
it 'should display a session', ->
page.subjectTableColumns.then (sessions) ->
sess = _.first(sessions)
expect(sess.text(), 'The chart table does not display a ' +
' session')
.to.eventually.include('Visit')
it 'should display the subject chart', ->
page.subjectChart.then (chart) ->
expect(chart.isDisplayed(), 'The subject chart is missing')
.to.eventually.exist
it 'should display four data charts', ->
page.collectionCharts.then (charts) ->
expect(charts.length, 'The data chart count is incorrect')
.to.equal(4)
it 'should display four X-axis dropdowns', ->
page.xAxisDropdowns.then (dropdowns) ->
expect(dropdowns.length, 'The X-axis dropdown count is incorrect')
.to.equal(4)
it 'should display the X-axis dropdown items', ->
page.xAxisDropdowns.then (dropdowns) ->
# The X-axis dropdown for the first chart.
dropdown = _.first(dropdowns)
# The default selection is 'RCB Index'.
dropdown.find(By.css('.qi-dropbtn-label')).then (selected) ->
expect(selected.text(), 'The default X-axis selection is incorrect')
.to.eventually.equal('RCB Index')
# Display the dropdown list.
dropdown.click().then ->
# The first item in the list is 'FXL Ktrans'.
dropdown.findAll(By.css('.qi-dropdown-item')).then (items) ->
item = _.first(items)
item.find(By.css('.qi-dropdown-label')).then (label) ->
expect(label.text(), 'The first item in the X-axis dropdown is' +
' incorrect')
.to.eventually.equal('FXL Ktrans')
label.click().then ->
# The selected item changes to 'FXL Ktrans'.
dropdown.find(By.css('.qi-dropbtn-label')).then (selected) ->
expect(selected.text(), 'The new X-axis selection is' +
' incorrect')
.to.eventually.equal('FXL Ktrans')
it 'should display four Y-axis dropdowns', ->
page.yAxisDropdowns.then (dropdowns) ->
expect(dropdowns.length, 'The Y-axis dropdown count is incorrect')
.to.equal(4)
it 'should display the Y-axis dropdown items', ->
page.yAxisDropdowns.then (dropdowns) ->
# The Y-axis dropdown for the first chart.
dropdown = _.first(dropdowns)
# The default selection is 'delta Ktrans'.
dropdown.find(By.css('.qi-dropbtn-label')).then (selected) ->
expect(selected.text(), 'The default Y-axis selection is incorrect')
.to.eventually.equal('delta Ktrans')
# Display the dropdown list.
dropdown.click().then ->
# The first item in the list is 'FXL Ktrans'.
dropdown.findAll(By.css('.qi-dropdown-item')).then (items) ->
item = _.first(items)
item.find(By.css('.qi-dropdown-label')).then (label) ->
expect(label.text(), 'The first item in the Y-axis dropdown is' +
' incorrect')
.to.eventually.equal('FXL Ktrans')
label.click().then ->
# The selected item changes to 'FXL Ktrans'.
dropdown.find(By.css('.qi-dropbtn-label')).then (selected) ->
expect(selected.text(), 'The new Y-axis selection is' +
' incorrect')
.to.eventually.equal('FXL Ktrans')
# Categorical data types (e.g., TNM stage) are not permitted on the
# Y-axis.
for item in items
item.find(By.css('.qi-dropdown-label')).then (label) ->
expect(label.text(), 'TNM stage appears in the Y-axis' +
' dropdown')
.to.eventually.not.equal('TNM Stage')