UNPKG

@openveo/test

Version:
190 lines (167 loc) 5.15 kB
'use strict'; /** * @module e2e/fields/DateTimeField */ var util = require('util'); var Field = process.requireTest('lib/e2e/fields/Field.js'); var browserExt = process.requireTest('lib/e2e/browser.js'); /** * Defines a form date / time field. * * Use [Field.get]{@link module:e2e/fields/Field~Field.get} method to get an instance of DateTimeField. * * @example * var Field = require('@openveo/test').e2e.fields.Field; * * var myTextField = Field.get({ * type: 'dateTime', * name: 'My field', * baseElement: element(by.css('form')) * }); * * @class DateTimeField * @extends module:e2e/fields/Field~Field * @constructor * @param {Object} conf A field configuration object */ function DateTimeField(conf) { DateTimeField.super_.call(this, conf); Object.defineProperties(this, /** @lends module:e2e/fields/DateTimeField~DateTimeField */ { /** * Date input locator. * * @type {Object} * @instance * @readonly */ dateInputLocator: {value: by.css('input[uib-datepicker-popup]')}, /** * Hours input locator. * * @type {Object} * @instance * @readonly */ hoursInputLocator: {value: by.css('.hours input')}, /** * Minutes input locator. * * @type {Object} * @instance * @readonly */ minutesInputLocator: {value: by.css('.minutes input')} } ); } module.exports = DateTimeField; util.inherits(DateTimeField, Field); /** * Gets field value. * * @example * myField.getValue().then(function(date) { * console.log('Got value : ' + date); * }); * * @return {Promise} Promise resolving with field value */ DateTimeField.prototype.getValue = function() { var self = this; return this.getElement().then(function(elementFinder) { var inputDateElement = elementFinder.element(self.dateInputLocator); var inputHoursElement = elementFinder.element(self.hoursInputLocator); var inputMinutesElement = elementFinder.element(self.minutesInputLocator); return protractor.promise.all([ browserExt.getProperty(inputDateElement, 'value'), browserExt.getProperty(inputHoursElement, 'value'), browserExt.getProperty(inputMinutesElement, 'value') ]); }).then(function(results) { var date = new Date(results[0]); date.setHours(results[1] || 0); date.setMinutes(results[2] || 0); date.setSeconds(0); return protractor.promise.fulfilled(date); }); }; /** * Sets field value. * * @example * myField.setValue(new Date('2018-05-16 17:56:00')).then(function() { * console.log('Value set'); * }); * * @param {Date} [value=null] Field's value * @return {Promise} Promise resolving when the field is filled */ DateTimeField.prototype.setValue = function(value) { var self = this; var inputDateElement; var inputHoursElement; var inputMinutesElement; if (!value) return this.clear(); return this.getElement().then(function(elementFinder) { inputDateElement = elementFinder.element(self.dateInputLocator); inputHoursElement = elementFinder.element(self.hoursInputLocator); inputMinutesElement = elementFinder.element(self.minutesInputLocator); return self.clear(); }).then(function() { return browser.executeScript( 'var $injector = angular.injector([\'ng\']);' + 'var $filter = $injector.get(\'$filter\');' + 'return $filter(\'date\')(' + value.getTime() + ', \'shortDate\');' ); }).then(function(shortDate) { return protractor.promise.all([ Field.setInputValue(inputDateElement, shortDate), Field.setInputValue(inputHoursElement, value.getHours()), Field.setInputValue(inputMinutesElement, value.getMinutes()) ]); }); }; /** * Clears field value. * * @example * myField.clear().then(function() { * console.log('Field cleared'); * }); * * @return {Promise} Promise resolving when the field is cleared */ DateTimeField.prototype.clear = function() { var self = this; return this.getElement().then(function(elementFinder) { var inputDateElement = elementFinder.element(self.dateInputLocator); var inputHoursElement = elementFinder.element(self.hoursInputLocator); var inputMinutesElement = elementFinder.element(self.minutesInputLocator); return protractor.promise.all([ inputDateElement.clear(), inputHoursElement.clear(), inputMinutesElement.clear() ]); }); }; /** * Tests if a field is considered as on error. * * @example * myField.isOnError().then(function(isOnError) { * console.log('Is field on error ? ' + isOnError); * }); * * @return {Promise} Promise resolving with a boolean indicating if the field is on error */ DateTimeField.prototype.isOnError = function() { return this.getElement().then(function(elementFinder) { return elementFinder.getAttribute('class').then(function(classes) { var errorClass = 'has-error'; var reg = new RegExp('^' + errorClass + ' |' + errorClass + ' |' + errorClass + ' |' + errorClass + '$'); return protractor.promise.fulfilled(reg.test(classes)); }); }); };