qiprofile
Version:
Quantitative Imaging Profile ( QiPr) web application
112 lines (89 loc) • 3.53 kB
text/coffeescript
_ = require 'lodash'
webdriver = require 'selenium-webdriver'
expect = require('./helpers/expect')()
Page = require './helpers/page'
class SubjectListPage extends Page
constructor: ->
super('/quip/subjects?project=QIN_Test')
# Hyperlink locator.
ANCHOR_LOCATOR = By.tagName('a')
# @returns a promise resolving to the asssociative collection
# {name: subjects} object
# @param assoc the associate accumulator object
# @param pair the [name, subjects] array
# @returns the accumulator object
merge = (assoc, pair) ->
[name, subjects] = pair
assoc[name] = subjects
assoc
.then (lists) ->
lists.map (list) ->
name = list.text(By.binding('collection'))
subjects = list.findAll('a')
.then (anchors) ->
anchors.map (anchor) -> anchor.text()
.then (text) ->
webdriver.promise.all(text)
pair = [name, subjects]
webdriver.promise.all(pair)
.then (pairs) ->
webdriver.promise.all(pairs)
.then (pairs) ->
pairs.reduce(merge, {})
describe 'E2E Testing Subject List', ->
page = null
beforeEach ->
page = new SubjectListPage
# FIXME - before the tests, Protractor displays the following message:
# Client error: TypeError: Cannot read property 'hasOwnProperty' of null
# See the log at /var/log/qiprofile.log
# However, the tests then run successfully.
# Find out why this error occurs and why, unlike other errors, it is
# ignored.
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('Patients')
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)
describe 'Collections', ->
assocFinder = null
before ->
assocFinder = page.collectionSubjects
it 'should display the Breast and Sarcoma collections', ->
expect(assocFinder, 'The collections are incorrect')
.to.eventually.have.all.keys(['Breast', 'Sarcoma'])
it 'should display the subjects', ->
expected = ("Patient #{ n }" for n in [1, 2, 3])
assocFinder.then (assoc) ->
expect(assoc.Breast, 'The Breast subjects are incorrect')
.to.eql(expected)
expect(assoc.Sarcoma, 'The Sarcoma subjects are incorrect')
.to.eql(expected)
it 'should visit the Subject Detail page', ->
visit = page.findAll('collection in collections')
.then (collElts) ->
collElts[0].findAll('subject in subjects')
.then (sbjElts) ->
sbjElts[0].find('a')
.then (linkElt) ->
linkElt.visit()
expect(visit, 'The Subject Detail page is not visited')
.to.eventually.match(/^\/quip\/\w+\/subject\/\d+/)