UNPKG

formiojs

Version:

Common js library for client side interaction with <form.io>

343 lines (274 loc) • 12.4 kB
"use strict"; require("core-js/modules/es.string.trim.js"); var _harness = _interopRequireDefault(require("../../../test/harness")); var _TextArea = _interopRequireDefault(require("./TextArea")); var _sinon = _interopRequireDefault(require("sinon")); var _Formio = _interopRequireDefault(require("./../../Formio")); var _powerAssert = _interopRequireDefault(require("power-assert")); var _chai = require("chai"); var _lodash = _interopRequireDefault(require("lodash")); var _fixtures = require("./fixtures"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } describe('TextArea Component', function () { it('Should build a TextArea component', function () { return _harness.default.testCreate(_TextArea.default, _fixtures.comp1).then(function (component) { _harness.default.testElements(component, 'textarea', 1); }); }); it('setValue should be called only once', function () { return _harness.default.testCreate(_TextArea.default, _fixtures.comp2).then(function (component) { var valueToSet = [{ firstName: 'Bobby', lastName: 'Lynch' }, { firstName: 'Harold', lastName: 'Freeman' }]; var emit = _sinon.default.spy(component, 'setValue'); component.setValue(valueToSet); (0, _chai.expect)(component.getValue()).to.deep.equal([{ firstName: 'Bobby', lastName: 'Lynch' }, { firstName: 'Harold', lastName: 'Freeman' }]); (0, _chai.expect)(emit.callCount).to.equal(1); }); }); it('Should provide min/max length validation', function (done) { var form = _lodash.default.cloneDeep(_fixtures.comp3); form.components[0].validate = { minLength: 5, maxLength: 10 }; var validValues = ['', 'te_st', 'test value', ' ', 'What?', 'test: ', 't ', ' t ']; var invalidMin = ['t', 'tt', 'ttt', 'tttt', ' t ', ' t', '_4_']; var invalidMax = ['test__value', 'test value ', ' test value', 'test: value']; var testValidity = function testValidity(values, valid, message, lastValue) { _lodash.default.each(values, function (value) { var element = document.createElement('div'); _Formio.default.createForm(element, form).then(function (form) { form.setPristine(false); var component = form.getComponent('textArea'); var changed = component.setValue(value); var error = message; if (value) { _powerAssert.default.equal(changed, true, 'Should set value'); } setTimeout(function () { if (valid) { _powerAssert.default.equal(!!component.error, false, 'Should not contain error'); } else { _powerAssert.default.equal(!!component.error, true, 'Should contain error'); _powerAssert.default.equal(component.error.message, error, 'Should contain error message'); _powerAssert.default.equal(component.element.classList.contains('has-error'), true, 'Should contain error class'); _powerAssert.default.equal(component.refs.messageContainer.textContent.trim(), error, 'Should show error'); } if (_lodash.default.isEqual(value, lastValue)) { done(); } }, 300); }).catch(done); }); }; testValidity(validValues, true); testValidity(invalidMin, false, 'Text Area must have at least 5 characters.'); testValidity(invalidMax, false, 'Text Area must have no more than 10 characters.', invalidMax[invalidMax.length - 1]); }); it('Should provide min/max words validation', function (done) { var form = _lodash.default.cloneDeep(_fixtures.comp3); form.components[0].validate = { minWords: 2, maxWords: 5 }; var validValues = ['', 'test value', 'some, test value', 'some - test - value', ' value value value value value ', ' What ?', '" test "']; var invalidMin = [' t ', '? ', 'e', '_test ', ' 9', 't ', 'What?', '"4"']; var invalidMax = ['te st __ va lue ""', '" te st va lue "', '11 - 22 - 33 - 44', 'te st : va lue :']; var testValidity = function testValidity(values, valid, message, lastValue) { _lodash.default.each(values, function (value) { var element = document.createElement('div'); _Formio.default.createForm(element, form).then(function (form) { form.setPristine(false); var component = form.getComponent('textArea'); var changed = component.setValue(value); var error = message; if (value) { _powerAssert.default.equal(changed, true, 'Should set value'); } setTimeout(function () { if (valid) { _powerAssert.default.equal(!!component.error, false, 'Should not contain error'); } else { _powerAssert.default.equal(!!component.error, true, 'Should contain error'); _powerAssert.default.equal(component.error.message, error, 'Should contain error message'); _powerAssert.default.equal(component.element.classList.contains('has-error'), true, 'Should contain error class'); _powerAssert.default.equal(component.refs.messageContainer.textContent.trim(), error, 'Should show error'); } if (_lodash.default.isEqual(value, lastValue)) { done(); } }, 300); }).catch(done); }); }; testValidity(validValues, true); testValidity(invalidMin, false, 'Text Area must have at least 2 words.'); testValidity(invalidMax, false, 'Text Area must have no more than 5 words.', invalidMax[invalidMax.length - 1]); }); it('Should provide pattern validation', function (done) { var form = _lodash.default.cloneDeep(_fixtures.comp3); form.components[0].validate = { pattern: '\\D+' }; var validValues = ['', ' ', 'test value', '& "" (test) _ ,.*', ' some - test - value ']; var invalidValues = ['test(2)', '123', '0 waste', '"9"', ' 9']; var testValidity = function testValidity(values, valid, message, lastValue) { _lodash.default.each(values, function (value) { var element = document.createElement('div'); _Formio.default.createForm(element, form).then(function (form) { form.setPristine(false); var component = form.getComponent('textArea'); var changed = component.setValue(value); var error = message; if (value) { _powerAssert.default.equal(changed, true, 'Should set value'); } setTimeout(function () { if (valid) { _powerAssert.default.equal(!!component.error, false, 'Should not contain error'); } else { _powerAssert.default.equal(!!component.error, true, 'Should contain error'); _powerAssert.default.equal(component.error.message.trim(), error, 'Should contain error message'); _powerAssert.default.equal(component.element.classList.contains('has-error'), true, 'Should contain error class'); _powerAssert.default.equal(component.refs.messageContainer.textContent.trim(), error, 'Should show error'); } if (_lodash.default.isEqual(value, lastValue)) { done(); } }, 300); }).catch(done); }); }; testValidity(validValues, true); testValidity(invalidValues, false, 'Text Area does not match the pattern \\D+', invalidValues[invalidValues.length - 1]); }); it('Should set custom number of rows', function (done) { var form = _lodash.default.cloneDeep(_fixtures.comp3); form.components[0].rows = 5; var element = document.createElement('div'); _Formio.default.createForm(element, form).then(function (form) { var component = form.getComponent('textArea'); _powerAssert.default.equal(component.refs.input[0].rows, component.component.rows, 'Should set custom number of rows'); done(); }).catch(done); }); it('Should render HTML', function (done) { var form = _lodash.default.cloneDeep(_fixtures.comp3); form.components[0].inputFormat = 'html'; var element = document.createElement('div'); _Formio.default.createForm(element, form, { readOnly: true }).then(function (form) { form.setSubmission({ data: { textArea: '<b>HTML!</b>' } }); setTimeout(function () { var textArea = form.getComponent('textArea'); _powerAssert.default.equal(textArea.refs.input[0].innerHTML, '<b>HTML!</b>'); done(); }, 300); }).catch(done); }); it('Should render plain text', function (done) { var form = _lodash.default.cloneDeep(_fixtures.comp3); form.components[0].inputFormat = 'plain'; var element = document.createElement('div'); _Formio.default.createForm(element, form, { readOnly: true }).then(function (form) { form.setSubmission({ data: { textArea: '<b>Plain text!</b>' } }); setTimeout(function () { var textArea = form.getComponent('textArea'); _powerAssert.default.equal(textArea.refs.input[0].innerText, '<b>Plain text!</b>'); done(); }, 300); }).catch(done); }); it('Should correctly count characters if character counter is enabled', function (done) { var form = _lodash.default.cloneDeep(_fixtures.comp3); form.components[0].showCharCount = true; var element = document.createElement('div'); _Formio.default.createForm(element, form).then(function (form) { var component = form.getComponent('textArea'); var inputValue = function inputValue(value) { var input = component.refs.input[0]; var inputEvent = new Event('input'); input.value = value; input.dispatchEvent(inputEvent); }; var checkValue = function checkValue(value) { _powerAssert.default.equal(component.dataValue, value, 'Should set value'); _powerAssert.default.equal(parseInt(component.refs.charcount[0].textContent), value.length, 'Should show correct chars number'); _powerAssert.default.equal(component.refs.charcount[0].textContent, "".concat(value.length, " characters"), 'Should show correct message'); }; var value = 'test Value (@#!-"]) _ 23.,5}/*&&'; inputValue(value); setTimeout(function () { checkValue(value); value = ''; inputValue(value); setTimeout(function () { checkValue(value); value = ' '; inputValue(value); setTimeout(function () { checkValue(value); done(); }, 200); }, 200); }, 200); }).catch(done); }); it('Should correctly count words if word counter is enabled', function (done) { var form = _lodash.default.cloneDeep(_fixtures.comp3); form.components[0].showWordCount = true; var element = document.createElement('div'); _Formio.default.createForm(element, form).then(function (form) { var component = form.getComponent('textArea'); var inputValue = function inputValue(value) { var input = component.refs.input[0]; var inputEvent = new Event('input'); input.value = value; input.dispatchEvent(inputEvent); }; var checkValue = function checkValue(value, expected) { _powerAssert.default.equal(component.dataValue, value, 'Should set value'); _powerAssert.default.equal(parseInt(component.refs.wordcount[0].textContent), expected, 'Should show correct words number'); _powerAssert.default.equal(component.refs.wordcount[0].textContent, "".concat(expected, " words"), 'Should show correct message'); }; var value = 'test , test_test 11 - "so me"'; inputValue(value); setTimeout(function () { checkValue(value, 7); value = ' test '; inputValue(value); setTimeout(function () { checkValue(value, 1); value = ' . . '; inputValue(value); setTimeout(function () { checkValue(value, 2); done(); }, 200); }, 200); }, 200); }).catch(done); }); });