callback.js 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  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. $([
  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. ].join('\n')).appendTo('body');
  22. $('#callbackForm').bootstrapValidator({
  23. fields: {
  24. captcha: {
  25. validators: {
  26. callback: {
  27. message: 'Wrong answer',
  28. callback: function(value, validator, $field) {
  29. return validateCaptcha(value, validator, $field);
  30. }
  31. }
  32. }
  33. }
  34. }
  35. });
  36. this.bv = $('#callbackForm').data('bootstrapValidator');
  37. this.$captcha = this.bv.getFieldElements('captcha');
  38. this.$declarativeCaptcha = this.bv.getFieldElements('declarativeCaptcha');
  39. });
  40. afterEach(function() {
  41. $('#callbackForm').bootstrapValidator('destroy').remove();
  42. });
  43. it('execute the callback', function() {
  44. $('#captchaOperation').html('1 + 2');
  45. this.$captcha.val('3');
  46. this.bv.validate();
  47. expect(this.bv.isValidField('captcha')).toBeTruthy();
  48. this.bv.resetForm();
  49. this.$captcha.val('5');
  50. this.bv.validate();
  51. expect(this.bv.isValidField('captcha')).toEqual(false);
  52. });
  53. it('callback declarative', function() {
  54. $('#captchaOperation').html('10 + 20');
  55. this.$declarativeCaptcha.val('40');
  56. this.bv.validate();
  57. expect(this.bv.isValidField('declarativeCaptcha')).toEqual(false);
  58. this.bv.resetForm();
  59. this.$declarativeCaptcha.val('30');
  60. this.bv.validate();
  61. expect(this.bv.isValidField('declarativeCaptcha')).toBeTruthy();
  62. });
  63. });