Source: e2e/fields/CheckboxField.js

'use strict';

/**
 * @module e2e/fields/CheckboxField
 */

var util = require('util');
var Field = process.requireTest('lib/e2e/fields/Field.js');
var browserExt = process.requireTest('lib/e2e/browser.js');

/**
 * Defines a form checkbox field.
 *
 * Use [Field.get]{@link module:e2e/fields/Field~Field.get} method to get an instance of CheckboxField.
 *
 * @example
 * var Field = require('@openveo/test').e2e.fields.Field;
 *
 * var CheckboxField = Field.get({
 *   type: 'checkbox',
 *   name: 'My field',
 *   baseElement: element(by.css('form'))
 * });
 *
 * @class CheckboxField
 * @extends module:e2e/fields/Field~Field
 * @constructor
 * @param {Object} conf A field configuration object
 */
function CheckboxField(conf) {
  CheckboxField.super_.call(this, conf);
}

module.exports = CheckboxField;
util.inherits(CheckboxField, Field);

/**
 * Gets selected checkbox name.
 *
 * @example
 * myField.getValue().then(function(value) {
 *   console.log(value);
 * });
 *
 * @return {Promise} Promise resolving with selected checkbox
 */
CheckboxField.prototype.getValue = function() {
  return this.getElement().then(function(elementFinder) {
    var labelFinder = elementFinder.element(by.css('.checkbox label'));
    return protractor.promise.all([labelFinder.getText(), browserExt.getProperty(labelFinder, 'checked')]);
  }).then(function(results) {
    return protractor.promise.fulfilled(results[1] ? results[0] : null);
  });
};

/**
 * Sets field value.
 *
 * @example
 * myField.setValue(true).then(function() {
 *   console.log('Value set');
 * });
 *
 * @param {Boolean} [value=false] Checkbox's value
 * @return {Promise} Promise resolving when checkbox is checked / unchecked
 */
CheckboxField.prototype.setValue = function(value) {
  return this.getElement().then(function(elementFinder) {
    var inputFinder = elementFinder.element(by.css('.checkbox label input'));
    browserExt.getProperty(inputFinder, 'checked').then(function(isChecked) {
      if ((!isChecked && value) || (isChecked && !value))
        browserExt.click(inputFinder);
    });
  }).then(function() {
    return protractor.promise.fulfilled();
  });
};

/**
 * Unchecks the checkbox.
 *
 * @example
 * myField.clear().then(function() {
 *   console.log('Field cleared');
 * });
 *
 * @return {Promise} Promise resolving when the field is cleared
 */
CheckboxField.prototype.clear = function() {
  return this.setValue();
};