'use strict';
/**
* @module e2e/fields/TimeField
*/
var util = require('util');
var Field = process.requireTest('lib/e2e/fields/Field.js');
var browserExt = process.requireTest('lib/e2e/browser.js');
/**
* Defines a form time field.
*
* Use [Field.get]{@link module:e2e/fields/Field~Field.get} method to get an instance of TimeField.
*
* @example
* var Field = require('@openveo/test').e2e.fields.Field;
*
* var TimeField = Field.get({
* type: 'time',
* name: 'My time field',
* baseElement: element(by.css('form'))
* });
*
* @class TimeField
* @extends module:e2e/fields/Field~Field
* @constructor
* @param {Object} conf A field configuration object
*/
function TimeField(conf) {
TimeField.super_.call(this, conf);
}
module.exports = TimeField;
util.inherits(TimeField, Field);
/**
* Gets field value.
*
* @example
* myField.getValue().then(function(value) {
* console.log('Got value : ' + value);
* });
*
* @return {Promise} Promise resolving with field value
*/
TimeField.prototype.getValue = function() {
return this.getElement().then(function(elementFinder) {
var input = elementFinder.element(by.css('input'));
return browserExt.getProperty(input, 'value');
}).then(function(value) {
return protractor.promise.fulfilled(value.replace('.000', ''));
});
};
/**
* Sets field value.
*
* Actually it's not possible to use the Web Driver to set the value of the input in time state.
* Until this feature is added to the Web Driver, value of the input is set programmatically.
* Be careful events on the input won't be dispatched (change, click and so on).
*
* @example
* myField.setValue('new value').then(function() {
* console.log('Value set');
* });
*
* @param {String} [value='00:00:00'] Field's value format as hh:mm:ss
* @return {Promise} Promise resolving when the field is filled
*/
TimeField.prototype.setValue = function(value) {
var input;
if (!value)
return this.clear();
return this.getElement().then(function(elementFinder) {
input = elementFinder.element(by.css('input'));
var promises = [input.getAttribute('min'), input.getAttribute('max')];
return protractor.promise.all(promises);
}).then(function(bounds) {
var dateMin = new Date('1970-01-01T' + bounds[0]);
var date = new Date('1970-01-01T' + value);
var dateMax = new Date('1970-01-01T' + bounds[1]);
if (date.getTime() >= dateMin.getTime() && date.getTime() <= dateMax.getTime()) {
return browser.executeScript(
'var scope = angular.element(arguments[0]).scope(); scope.editTime = new Date(' +
(date.getTime() + date.getTimezoneOffset() * 60000) + '); scope.$apply();',
input.getWebElement()
);
} else
return protractor.promise.rejected(new Error('Time must be between ' + bounds[0] + ' and ' + bounds[1]));
});
};
/**
* Clears field value.
*
* @example
* myField.clear().then(function() {
* console.log('Field cleared');
* });
*
* @return {Promise} Promise resolving when the field is cleared
*/
TimeField.prototype.clear = function() {
return this.setValue('00:00:00');
};