Parsley

  • ParsleyAbstract

    • should provide a actualizeOptions() method5ms

      (0, _jquery2['default'])('body').append('<input type="email" data-parsley-pattern="[A-F][0-9]{5}" data-parsley-required id="element" />');
      var parsleyField = (0, _jquery2['default'])('#element').parsley({ foo: 'bar' });
      expect(parsleyField.options.pattern).to.eql('[A-F][0-9]{5}');
      expect(parsleyField.options.required).to.eql('');
      (0, _jquery2['default'])('#element').removeAttr('data-parsley-pattern');
      parsleyField.actualizeOptions();
      expect(parsleyField.options.pattern).to.be(undefined);
      expect(parsleyField.options.required).to.eql('');
    • should use reset() on field4ms

      (0, _jquery2['default'])('body').append('<input type="email" data-parsley-pattern="[A-F][0-9]{5}" data-parsley-required id="element" />');
      var parsleyField = (0, _jquery2['default'])('#element').parsley();
      parsleyField.validate();
      expect((0, _jquery2['default'])('#parsley-id-' + parsleyField.__id__ + ' li').length).to.be(1);
      parsleyField.reset();
      expect((0, _jquery2['default'])('#parsley-id-' + parsleyField.__id__ + ' li').length).to.be(0);
    • should use reset() on form6ms

      (0, _jquery2['default'])('body').append('<form id="element">' + '<input id="field1" type="text" required />' + '<div id="field2"></div>' + '<textarea id="field2"></textarea>' + '</form>');
      var parsleyForm = (0, _jquery2['default'])('#element').parsley();
      parsleyForm.validate();
      expect((0, _jquery2['default'])('#parsley-id-' + (0, _jquery2['default'])('#field1').psly().__id__ + ' li').length).to.be(1);
      (0, _jquery2['default'])('#element').parsley().on('form:reset', function () {
        done();
      });
      parsleyForm.reset();
      expect((0, _jquery2['default'])('#parsley-id-' + (0, _jquery2['default'])('#field1').psly().__id__ + ' li').length).to.be(0);
    • should use destroy() on field1ms

      (0, _jquery2['default'])('body').append('<input type="email" data-parsley-pattern="[A-F][0-9]{5}" data-parsley-required id="element" />');
      var parsleyField = (0, _jquery2['default'])('#element').parsley();
      (0, _jquery2['default'])('#element').parsley().on('field:destroy', function () {
        done();
      });
      expect((0, _jquery2['default'])('#element').data('Parsley')).to.have.key('__class__');
      expect((0, _jquery2['default'])('#element').data('Parsley').__class__).to.be('ParsleyField');
      parsleyField.destroy();
      expect((0, _jquery2['default'])('#element').data('Parsley')).to.be(undefined);
    • should use destroy() on form4ms

      var triggered = 0;
      (0, _jquery2['default'])('body').append('<form id="element">' + '<input id="field1" type="text"/>' + '<div id="field2"></div>' + '<textarea id="field2"></textarea>' + '</form>');
      var parsleyForm = (0, _jquery2['default'])('#element').parsley();
      var fieldEventsCount = 0;
      var formEventsCount = 0;
      // Test that a subscribed field event on parent form would be triggered by fields too
      // Here we only have field1 and field2 as valid parsley fields
      (0, _jquery2['default'])('#element').parsley().on('field:destroy', function () {
        fieldEventsCount++;
      });
      (0, _jquery2['default'])('#element').parsley().on('form:destroy', function () {
        formEventsCount++;
      });
      expect((0, _jquery2['default'])('#element').data('Parsley')).to.have.key('__class__');
      expect((0, _jquery2['default'])('#element').data('Parsley').__class__).to.be('ParsleyForm');
      expect((0, _jquery2['default'])('#field1').data('Parsley')).to.have.key('__class__');
      expect((0, _jquery2['default'])('#field1').data('Parsley').__class__).to.be('ParsleyField');
      parsleyForm.destroy();
      expect(fieldEventsCount).to.be(2);
      expect(formEventsCount).to.be(1);
      // we should never enter here since parsley form instance is destroyed
      _srcParsley2['default'].on('form:validate', function () {
        expect(true).to.be(false);
      });
      // test that a submit event does not trigger parsley validation anymore
      (0, _jquery2['default'])('#element').on('submit', function (e) {
        e.preventDefault();
        expect((0, _jquery2['default'])('#element').data('Parsley')).to.be(undefined);
        expect((0, _jquery2['default'])('#field1').data('Parsley')).to.be(undefined);
        _srcParsley2['default'].off('form:validate');
        done();
      });
      (0, _jquery2['default'])('#element').submit();
  • extra/plugin/bind

    • should have a bind.js plugin allowing to give pure json validation config to parsley constructor3ms

      (0, _jquery2['default'])('body').append('<form id="element" >' + '<input type="text" name="name" />' + '<input type="text" name="email" id="email" />' + '<input type="checkbox" name="sexe" id="sexe" value="male" />' + '<input type="checkbox" name="sexe" value="female" />' + '</form>');
      var parsleyInstance = (0, _jquery2['default'])('#element').parsley({
        fields: {
          '[name="name"]': {
            required: true,
            length: [4, 20]
          },
          '#email': {
            type: 'email'
          },
          '#sexe': {
            required: true
          }
        }
      });
      expect((0, _jquery2['default'])('[name="name"]').parsley().constraints.length).to.be(2);
      expect((0, _jquery2['default'])('#email').parsley().constraints.length).to.be(1);
      expect((0, _jquery2['default'])('#sexe').parsley().constraints.length).to.be(1);
      expect((0, _jquery2['default'])('#sexe').parsley().constraints[0].name).to.be('required');
  • extra/validator/comparison

    • should have gt validator3ms

      var number = 5;
      // Check with a selector
      (0, _jquery2['default'])('body').append('<input type="text" id="element" data-parsley-gt="#gt" required /><input type="text" id="gt" value="' + number + '" />');
      expect((0, _jquery2['default'])('#element').psly().isValid()).to.be(false);
      (0, _jquery2['default'])('#element').val(number + 1);
      expect((0, _jquery2['default'])('#element').psly().isValid()).to.be(true);
      (0, _jquery2['default'])('#element').val(number);
      expect((0, _jquery2['default'])('#element').psly().isValid()).to.be(false);
      (0, _jquery2['default'])('#element').val(number - 1);
      expect((0, _jquery2['default'])('#element').psly().isValid()).to.be(false);
      // Check with a (different) number
      number = 42;
      (0, _jquery2['default'])('#element').attr('data-parsley-gt', number);
      (0, _jquery2['default'])('#element').val(number + 1);
      expect((0, _jquery2['default'])('#element').psly().isValid()).to.be(true);
      (0, _jquery2['default'])('#element').val(number);
      expect((0, _jquery2['default'])('#element').psly().isValid()).to.be(false);
      (0, _jquery2['default'])('#element').val(number - 1);
      expect((0, _jquery2['default'])('#element').psly().isValid()).to.be(false);
      (0, _jquery2['default'])('#gt').remove();
    • should have gte validator3ms

      var number = 5;
      // Check with a selector
      (0, _jquery2['default'])('body').append('<input type="text" id="element" data-parsley-gte="#gte" required /><input type="text" id="gte" value="' + number + '" />');
      expect((0, _jquery2['default'])('#element').psly().isValid()).to.be(false);
      (0, _jquery2['default'])('#element').val(number + 1);
      expect((0, _jquery2['default'])('#element').psly().isValid()).to.be(true);
      (0, _jquery2['default'])('#element').val(number);
      expect((0, _jquery2['default'])('#element').psly().isValid()).to.be(true);
      (0, _jquery2['default'])('#element').val(number - 1);
      expect((0, _jquery2['default'])('#element').psly().isValid()).to.be(false);
      // Check with a (different) number
      number = 42;
      (0, _jquery2['default'])('#element').attr('data-parsley-gte', number);
      (0, _jquery2['default'])('#element').val(number + 1);
      expect((0, _jquery2['default'])('#element').psly().isValid()).to.be(true);
      (0, _jquery2['default'])('#element').val(number);
      expect((0, _jquery2['default'])('#element').psly().isValid()).to.be(true);
      (0, _jquery2['default'])('#element').val(number - 1);
      expect((0, _jquery2['default'])('#element').psly().isValid()).to.be(false);
      (0, _jquery2['default'])('#gte').remove();
    • should have lt validator3ms

      var number = 5;
      // Check with a selector
      (0, _jquery2['default'])('body').append('<input type="text" id="element" data-parsley-lt="#lt" required /><input type="text" id="lt" value="' + number + '" />');
      expect((0, _jquery2['default'])('#element').psly().isValid()).to.be(false);
      (0, _jquery2['default'])('#element').val(number + 1);
      expect((0, _jquery2['default'])('#element').psly().isValid()).to.be(false);
      (0, _jquery2['default'])('#element').val(number);
      expect((0, _jquery2['default'])('#element').psly().isValid()).to.be(false);
      (0, _jquery2['default'])('#element').val(number - 1);
      expect((0, _jquery2['default'])('#element').psly().isValid()).to.be(true);
      // Check with a (different) number
      number = 42;
      (0, _jquery2['default'])('#element').attr('data-parsley-lt', number);
      (0, _jquery2['default'])('#element').val(number + 1);
      expect((0, _jquery2['default'])('#element').psly().isValid()).to.be(false);
      (0, _jquery2['default'])('#element').val(number);
      expect((0, _jquery2['default'])('#element').psly().isValid()).to.be(false);
      (0, _jquery2['default'])('#element').val(number - 1);
      expect((0, _jquery2['default'])('#element').psly().isValid()).to.be(true);
      (0, _jquery2['default'])('#lt').remove();
    • should have lte validator2ms

      var number = 5;
      // Check with a selector
      (0, _jquery2['default'])('body').append('<input type="text" id="element" data-parsley-lte="#lte" required /><input type="text" id="lte" value="' + number + '" />');
      expect((0, _jquery2['default'])('#element').psly().isValid()).to.be(false);
      (0, _jquery2['default'])('#element').val(number + 1);
      expect((0, _jquery2['default'])('#element').psly().isValid()).to.be(false);
      (0, _jquery2['default'])('#element').val(number);
      expect((0, _jquery2['default'])('#element').psly().isValid()).to.be(true);
      (0, _jquery2['default'])('#element').val(number - 1);
      expect((0, _jquery2['default'])('#element').psly().isValid()).to.be(true);
      // Check with a (different) number
      number = 42;
      (0, _jquery2['default'])('#element').attr('data-parsley-lte', number);
      (0, _jquery2['default'])('#element').val(number + 1);
      expect((0, _jquery2['default'])('#element').psly().isValid()).to.be(false);
      (0, _jquery2['default'])('#element').val(number);
      expect((0, _jquery2['default'])('#element').psly().isValid()).to.be(true);
      (0, _jquery2['default'])('#element').val(number - 1);
      expect((0, _jquery2['default'])('#element').psly().isValid()).to.be(true);
      (0, _jquery2['default'])('#lte').remove();
  • extra/validator/dateiso

    • should have dateiso validator2ms

      var expectValidation = function expectValidation(value, name, requirements) {
        var field = (0, _jquery2['default'])('<input>').parsley();
        field.options[name] = requirements;
        return expect(field.isValid(true, value));
      };
      expectValidation('', 'dateiso').not.to.be(true);
      expectValidation('foo', 'dateiso').not.to.be(true);
      expectValidation('1986-30-01', 'dateiso').not.to.be(true);
      expectValidation('1986-12-45', 'dateiso').not.to.be(true);
      expectValidation('1986-12-01', 'dateiso').to.be(true);
  • extra/validator/words

    • should have a minwords validator2ms

      (0, _jquery2['default'])('body').append('<input type="text" id="element" data-parsley-minwords="2" required />');
      expect((0, _jquery2['default'])('#element').psly().isValid()).to.be(false);
      (0, _jquery2['default'])('#element').val('foo');
      expect((0, _jquery2['default'])('#element').psly().isValid()).to.be(false);
      (0, _jquery2['default'])('#element').val('foo bar');
      expect((0, _jquery2['default'])('#element').psly().isValid()).to.be(true);
    • should have a maxwords validator2ms

      (0, _jquery2['default'])('body').append('<input type="text" id="element" data-parsley-maxwords="2" required />');
      expect((0, _jquery2['default'])('#element').psly().isValid()).to.be(false);
      (0, _jquery2['default'])('#element').val('foo bar');
      expect((0, _jquery2['default'])('#element').psly().isValid()).to.be(true);
      (0, _jquery2['default'])('#element').val('foo bar baz');
      expect((0, _jquery2['default'])('#element').psly().isValid()).to.be(false);
    • should have a words validator2ms

      (0, _jquery2['default'])('body').append('<input type="text" id="element" data-parsley-words="[2, 4]" required />');
      expect((0, _jquery2['default'])('#element').psly().isValid()).to.be(false);
      (0, _jquery2['default'])('#element').val('foo');
      expect((0, _jquery2['default'])('#element').psly().isValid()).to.be(false);
      (0, _jquery2['default'])('#element').val('foo bar baz');
      expect((0, _jquery2['default'])('#element').psly().isValid()).to.be(true);
      (0, _jquery2['default'])('#element').val('foo bar baz qux bux');
      expect((0, _jquery2['default'])('#element').psly().isValid()).to.be(false);
  • ParsleyField

    • should be a function0ms

      expect(_srcParsleyField2['default']).to.be.a('function');
    • should throw an error if no parsleyInstance given1ms

      expect(_srcParsleyField2['default']).to.throwException();
    • should properly bind DOM constraints1ms

      (0, _jquery2['default'])('body').append('<input type="text" id="element" data-parsley-required />');
      var parsleyField = (0, _jquery2['default'])('#element').parsley();
      expect(parsleyField.constraints.length).to.be(1);
      expect(parsleyField.constraints[0].name).to.be('required');
      expect(parsleyField.constraints[0].isDomConstraint).to.be(true);
    • should properly bind HTML DOM supported constraints1ms

      (0, _jquery2['default'])('body').append('<input type="email" id="element" />');
      var parsleyField = (0, _jquery2['default'])('#element').parsley();
      expect(parsleyField.constraints.length).to.be(1);
      expect(parsleyField.constraints[0].name).to.be('type');
      expect(parsleyField.constraints[0].isDomConstraint).to.be(true);
    • should ignore unknown types1ms

      (0, _jquery2['default'])('body').append('<input type="" id="element" />');
      var parsleyField = (0, _jquery2['default'])('#element').parsley();
      expect(parsleyField.constraints.length).to.be(0);
    • should ignore mistyped types0ms

      (0, _jquery2['default'])('body').append('<input type="    email" id="element" />');
      var parsleyField = (0, _jquery2['default'])('#element').parsley();
      expect(parsleyField.constraints.length).to.be(0);
    • should have a proper addConstraint() javascript method2ms

      (0, _jquery2['default'])('body').append('<input type="text" id="element" />');
      var parsleyField = (0, _jquery2['default'])('#element').parsley().addConstraint('required', true);
      expect(parsleyField.constraints.length).to.be(1);
      expect(parsleyField.constraints[0].name).to.be('required');
      expect(parsleyField.constraints[0].requirements).to.be(true);
      expect(parsleyField.constraints[0].priority).to.be(512);
      expect(parsleyField.constraints[0].isDomConstraint).to.be(false);
      // trying to add an existing constraint result in an update
      parsleyField.addConstraint('required', false, 64);
      expect(parsleyField.constraints.length).to.be(1);
      expect(parsleyField.constraints[0].name).to.be('required');
      expect(parsleyField.constraints[0].requirements).to.be(false);
      expect(parsleyField.constraints[0].priority).to.be(64);
    • should have a proper updateConstraint() javascript method1ms

      (0, _jquery2['default'])('body').append('<input type="text" id="element" />');
      var parsleyField = (0, _jquery2['default'])('#element').parsley().addConstraint('required', true);
      // same as above test where addConstraint resulted in an updateConstraint
      parsleyField.updateConstraint('required', false, 64);
      expect(parsleyField.constraints.length).to.be(1);
      expect(parsleyField.constraints[0].name).to.be('required');
      expect(parsleyField.constraints[0].requirements).to.be(false);
      expect(parsleyField.constraints[0].priority).to.be(64);
    • should have a proper removeConstraint() javascript method0ms

      (0, _jquery2['default'])('body').append('<input type="text" id="element" />');
      var parsleyField = (0, _jquery2['default'])('#element').parsley().addConstraint('required', true).addConstraint('notblank', true).removeConstraint('required');
      expect(parsleyField.constraints.length).to.be(1);
      expect(parsleyField.constraints[0].name).to.be('notblank');
      expect(parsleyField._isRequired()).to.be(false);
    • should return true for fields without constraints1ms

      (0, _jquery2['default'])('body').append('<input type="text" id="element" value="hola" data-parsley-minlength="5" />');
      var parsleyField = (0, _jquery2['default'])('#element').parsley();
      // Start with some validation errors:
      expect(parsleyField.isValid()).to.eql(false);
      // The remove constraint and check result:
      (0, _jquery2['default'])('#element').removeAttr('data-parsley-minlength');
      expect(parsleyField.isValid()).to.be(true);
    • should properly bind HTML5 supported constraints1ms

      (0, _jquery2['default'])('body').append('<input type="email" pattern="\\w+" id="element" required min="5" max="100" minlength="1" maxlength="3" />');
      var parsleyField = (0, _jquery2['default'])('#element').parsley();
      // 5 validators: type=email, pattern, required, (min+max => range) and (minlength+maxlength => length)
      expect(parsleyField.constraints.length).to.be(5);
      (0, _jquery2['default'])('#element').removeAttr('min');
      // still 5 validators, with max instead of range now
      expect(parsleyField.actualizeOptions().constraints.length).to.be(5);
      (0, _jquery2['default'])('#element').removeAttr('minlength');
      // still 5 validators, with maxlength instead of length now
      expect(parsleyField.actualizeOptions().constraints.length).to.be(5);
    • should use integer validation HTML5 `number` type without a step attribute1ms

      (0, _jquery2['default'])('body').append('<input type="number" id="element" />');
      var parsleyField = (0, _jquery2['default'])('#element').parsley();
      expect(parsleyField.constraints[0].requirements).to.be('integer');
    • should use integer validation HTML5 `number` type with integer value step0ms

      (0, _jquery2['default'])('body').append('<input type="number" id="element" step="3" />');
      var parsleyField = (0, _jquery2['default'])('#element').parsley();
      expect(parsleyField.constraints[0].requirements).to.be('integer');
    • should use number validation for HTML5 `number` with float value step0ms

      (0, _jquery2['default'])('body').append('<input type="number" id="element" step="0.3" />');
      var parsleyField = (0, _jquery2['default'])('#element').parsley();
      expect(parsleyField.constraints[0].requirements).to.be('number');
    • should use number validation for HTML5 `number` with step="any"0ms

      (0, _jquery2['default'])('body').append('<input type="number" id="element" step="any" />');
      var parsleyField = (0, _jquery2['default'])('#element').parsley();
      expect(parsleyField.constraints[0].requirements).to.be('number');
    • should valid simple validator1ms

      (0, _jquery2['default'])('body').append('<input type="text" id="element" value="" />');
      var parsleyField = (0, _jquery2['default'])('#element').parsley().addConstraint('required', true);
      expect(parsleyField.isValid()).to.be(false);
      (0, _jquery2['default'])('#element').val('foo');
      expect(parsleyField.isValid()).to.be(true);
    • should valid more complex `type` validator2ms

      (0, _jquery2['default'])('body').append('<input type="text" id="element" value="foo" />');
      var parsleyField = (0, _jquery2['default'])('#element').parsley().addConstraint('type', 'email');
      expect(parsleyField.isValid()).to.be(false);
      (0, _jquery2['default'])('#element').val('foo');
      expect(parsleyField.isValid()).to.be(false);
      (0, _jquery2['default'])('#element').val('foo@bar.baz');
      expect(parsleyField.isValid()).to.be(true);