callback.js 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. function validateCaptcha(value, validator, $field) {
  2. var items = $('#captchaOperation').html().split(' '), sum = parseInt(items[0]) + parseInt(items[2]);
  3. return value === sum + '';
  4. };
  5. describe('callback', function() {
  6. beforeEach(function() {
  7. $(['<div class="container">',
  8. '<form class="form-horizontal" id="callbackForm">',
  9. '<div class="form-group">',
  10. '<label class="col-md-3 control-label" id="captchaOperation"></label>',
  11. '<div class="col-md-2">',
  12. '<input type="text" class="form-control" name="captcha" />',
  13. '</div>',
  14. '</div>',
  15. '<div class="form-group">',
  16. '<div class="col-md-2 col-md-offset-3">',
  17. '<input type="text" class="form-control" name="declarativeCaptcha" data-bv-callback data-bv-callback-callback="validateCaptcha" />',
  18. '</div>',
  19. '</div>',
  20. '</form>',
  21. '</div>'
  22. ].join('\n')).appendTo('body');
  23. $('#callbackForm').bootstrapValidator({
  24. fields: {
  25. captcha: {
  26. validators: {
  27. callback: {
  28. message: 'Wrong answer',
  29. callback: function(value, validator, $field) {
  30. return validateCaptcha(value, validator, $field);
  31. }
  32. }
  33. }
  34. }
  35. }
  36. });
  37. this.bv = $('#callbackForm').data('bootstrapValidator');
  38. this.$captcha = this.bv.getFieldElements('captcha');
  39. this.$declarativeCaptcha = this.bv.getFieldElements('declarativeCaptcha');
  40. });
  41. afterEach(function() {
  42. $('#callbackForm').bootstrapValidator('destroy').parent().remove();
  43. });
  44. it('execute the callback', function() {
  45. $('#captchaOperation').html('1 + 2');
  46. this.$captcha.val('3');
  47. this.bv.validate();
  48. expect(this.bv.isValidField('captcha')).toBeTruthy();
  49. this.bv.resetForm();
  50. this.$captcha.val('5');
  51. this.bv.validate();
  52. expect(this.bv.isValidField('captcha')).toEqual(false);
  53. });
  54. it('callback declarative', function() {
  55. $('#captchaOperation').html('10 + 20');
  56. this.$declarativeCaptcha.val('40');
  57. this.bv.validate();
  58. expect(this.bv.isValidField('declarativeCaptcha')).toEqual(false);
  59. this.bv.resetForm();
  60. this.$declarativeCaptcha.val('30');
  61. this.bv.validate();
  62. expect(this.bv.isValidField('declarativeCaptcha')).toBeTruthy();
  63. });
  64. });