UNPKG

ember-cli-page-object

Version:

This ember-cli addon eases the construction of page objects on your acceptance and integration tests

161 lines (128 loc) 3.59 kB
import $ from '-jquery'; import { run } from '@ember/runloop'; import { run as runAction } from '../action'; import { guardMultiple, buildSelector, findClosestValue } from '../helpers'; import { fillElement, assertFocusable } from './helpers'; import { ELEMENT_NOT_FOUND, throwBetterError } from '../better-errors'; import { wait } from '../compatibility'; export default function IntegrationExecutionContext(pageObjectNode, testContext) { this.pageObjectNode = pageObjectNode; this.testContext = testContext; } IntegrationExecutionContext.prototype = { andThen(cb) { run(() => { cb(this) }); return wait(); }, runAsync(cb) { return runAction(this.pageObjectNode, cb); }, visit() {}, click(selector, container) { this.$(selector, container).click(); }, fillIn(selector, container, options, content) { let $selection = this.$(selector, container); fillElement($selection, content, { selector, pageObjectNode: this.pageObjectNode, pageObjectKey: options.pageObjectKey }); $selection.trigger('input'); $selection.change(); }, $(selector, container) { if (container) { return $(selector, container); } else { return this.testContext.$(selector); } }, triggerEvent(selector, container, options, eventName, eventOptions) { let event = $.Event(eventName, eventOptions); if (container) { $(selector, container).trigger(event); } else { this.testContext.$(selector).trigger(event); } }, focus(selector, options) { let $selection = this.findWithAssert(selector, options); assertFocusable($selection[0], { selector, pageObjectNode: this.pageObjectNode, pageObjectKey: options.pageObjectKey }); $selection.focus(); }, blur(selector, options) { let $selection = this.findWithAssert(selector, options); assertFocusable($selection[0], { selector, pageObjectNode: this.pageObjectNode, pageObjectKey: options.pageObjectKey }); $selection.blur(); }, assertElementExists(selector, options) { let result; let container = options.testContainer || findClosestValue(this.pageObjectNode, 'testContainer'); if (container) { result = $(selector, container); } else { result = this.testContext.$(selector); } if (result.length === 0) { throwBetterError( this.pageObjectNode, options.pageObjectKey, ELEMENT_NOT_FOUND, { selector } ); } }, find(selector, options) { let result; let container = options.testContainer || findClosestValue(this.pageObjectNode, 'testContainer'); selector = buildSelector(this.pageObjectNode, selector, options); if (container) { result = $(selector, container); } else { result = this.testContext.$(selector); } guardMultiple(result, selector, options.multiple); return result; }, findWithAssert(selector, options) { let result; let container = options.testContainer || findClosestValue(this.pageObjectNode, 'testContainer'); selector = buildSelector(this.pageObjectNode, selector, options); if (container) { result = $(selector, container); } else { result = this.testContext.$(selector); } guardMultiple(result, selector, options.multiple); if (result.length === 0) { throwBetterError( this.pageObjectNode, options.pageObjectKey, ELEMENT_NOT_FOUND, { selector } ); } return result; } };