zipCode.js 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. function getCountryCode(value, validator, $field) {
  2. $('#msg').html('getCountryCode() called');
  3. return validator.getFieldElements('country').val();
  4. };
  5. TestSuite = $.extend({}, TestSuite, {
  6. ZipCode: {
  7. getCountryCode: function(value, validator, $field) {
  8. $('#msg').html('TestSuite.ZipCode.getCountryCode() called');
  9. return validator.getFieldElements('country').val();
  10. }
  11. }
  12. });
  13. describe('zipCode', function() {
  14. beforeEach(function() {
  15. $([
  16. '<form class="form-horizontal" id="zipCodeForm">',
  17. '<div id="msg"></div>',
  18. '<div class="form-group">',
  19. '<label class="col-md-3 control-label">Country:</label>',
  20. '<div class="col-md-2">',
  21. '<select class="form-control" name="country">',
  22. '<option value="">Select a country</option>',
  23. '<option value="US">United States</option>',
  24. '<option value="CA">Canada</option>',
  25. '<option value="DK">Denmark</option>',
  26. '<option value="IT">Italy</option>',
  27. '<option value="NL">Netherlands</option>',
  28. '<option value="SE">Sweden</option>',
  29. '<option value="GB">United Kingdom</option>',
  30. '</select>',
  31. '</div>',
  32. '</div>',
  33. '<div class="form-group">',
  34. '<label class="col-md-3 control-label">Zipcode</label>',
  35. '<div class="col-md-2">',
  36. '<input type="text" class="form-control" name="zc" data-bv-zipcode data-bv-zipcode-country="US" />',
  37. '</div>',
  38. '</div>',
  39. '</form>'
  40. ].join('\n')).appendTo('body');
  41. $('#zipCodeForm').bootstrapValidator();
  42. /**
  43. * @type {BootstrapValidator}
  44. */
  45. this.bv = $('#zipCodeForm').data('bootstrapValidator');
  46. this.$country = this.bv.getFieldElements('country');
  47. this.$zipCode = this.bv.getFieldElements('zc');
  48. });
  49. afterEach(function() {
  50. $('#zipCodeForm').bootstrapValidator('destroy').remove();
  51. });
  52. it('country code US', function() {
  53. this.$zipCode.val('12345');
  54. this.bv.validate();
  55. expect(this.bv.isValid()).toBeTruthy();
  56. this.bv.resetForm();
  57. this.$zipCode.val('123');
  58. this.bv.validate();
  59. expect(this.bv.isValid()).toEqual(false);
  60. });
  61. it('country code updateOption()', function() {
  62. // Check IT postal code
  63. this.bv.updateOption('zc', 'zipCode', 'country', 'IT');
  64. this.$zipCode.val('1234');
  65. this.bv.validate();
  66. expect(this.bv.isValid()).toEqual(false);
  67. this.bv.resetForm();
  68. this.$zipCode.val('IT-12345');
  69. this.bv.validate();
  70. expect(this.bv.isValid()).toBeTruthy();
  71. // Check United Kingdom postal code
  72. this.bv.updateOption('zc', 'zipCode', 'country', 'GB');
  73. var validUkSamples = ['EC1A 1BB', 'W1A 1HQ', 'M1 1AA', 'B33 8TH', 'CR2 6XH', 'DN55 1PT', 'AI-2640', 'ASCN 1ZZ', 'GIR 0AA'];
  74. for (var i in validUkSamples) {
  75. this.bv.resetForm();
  76. this.$zipCode.val(validUkSamples[i]);
  77. this.bv.validate();
  78. expect(this.bv.isValid()).toBeTruthy();
  79. }
  80. });
  81. it('country code other field declarative', function() {
  82. this.$zipCode.attr('data-bv-zipcode-country', 'country');
  83. // Need to destroy the plugin instance ...
  84. $('#zipCodeForm').bootstrapValidator('destroy');
  85. // ... and re-create it
  86. this.bv = $('#zipCodeForm').bootstrapValidator().data('bootstrapValidator');
  87. this.$country.val('IT');
  88. this.bv.resetForm();
  89. this.$zipCode.val('1234');
  90. this.bv.validate();
  91. expect(this.bv.isValid()).toEqual(false);
  92. this.bv.resetForm();
  93. this.$zipCode.val('I-12345');
  94. this.bv.validate();
  95. expect(this.bv.isValid()).toBeTruthy();
  96. });
  97. it('country code callback declarative function', function() {
  98. this.$zipCode.attr('data-bv-zipcode-country', 'getCountryCode');
  99. $('#zipCodeForm').bootstrapValidator('destroy');
  100. this.bv = $('#zipCodeForm').bootstrapValidator().data('bootstrapValidator');
  101. this.$country.val('NL');
  102. this.$zipCode.val('0123');
  103. this.bv.validate();
  104. expect($('#msg').html()).toEqual('getCountryCode() called');
  105. expect(this.bv.isValid()).toEqual(false);
  106. });
  107. it('country code callback declarative function()', function() {
  108. this.$zipCode.attr('data-bv-zipcode-country', 'getCountryCode()');
  109. $('#zipCodeForm').bootstrapValidator('destroy');
  110. this.bv = $('#zipCodeForm').bootstrapValidator().data('bootstrapValidator');
  111. this.$country.val('NL');
  112. this.$zipCode.val('1234 ab');
  113. this.bv.validate();
  114. expect($('#msg').html()).toEqual('getCountryCode() called');
  115. expect(this.bv.isValid()).toBeTruthy();
  116. });
  117. it('country code callback declarative A.B.C', function() {
  118. this.$zipCode.attr('data-bv-zipcode-country', 'TestSuite.ZipCode.getCountryCode');
  119. $('#zipCodeForm').bootstrapValidator('destroy');
  120. this.bv = $('#zipCodeForm').bootstrapValidator().data('bootstrapValidator');
  121. this.$country.val('DK');
  122. this.$zipCode.val('DK 123');
  123. this.bv.validate();
  124. expect($('#msg').html()).toEqual('TestSuite.ZipCode.getCountryCode() called');
  125. expect(this.bv.isValid()).toEqual(false);
  126. });
  127. it('country code callback declarative A.B.C()', function() {
  128. this.$zipCode.attr('data-bv-zipcode-country', 'TestSuite.ZipCode.getCountryCode()');
  129. $('#zipCodeForm').bootstrapValidator('destroy');
  130. this.bv = $('#zipCodeForm').bootstrapValidator().data('bootstrapValidator');
  131. this.$country.val('DK');
  132. this.$zipCode.val('DK-1234');
  133. this.bv.validate();
  134. expect($('#msg').html()).toEqual('TestSuite.ZipCode.getCountryCode() called');
  135. expect(this.bv.isValid()).toBeTruthy();
  136. });
  137. it('country code callback programmatically', function() {
  138. this.$zipCode.removeAttr('data-bv-zipcode-country');
  139. $('#zipCodeForm').bootstrapValidator('destroy');
  140. this.bv = $('#zipCodeForm')
  141. .bootstrapValidator({
  142. fields: {
  143. zc: {
  144. validators: {
  145. zipCode: {
  146. country: function(value, validator, $field) {
  147. return getCountryCode(value, validator, $field);
  148. }
  149. }
  150. }
  151. }
  152. }
  153. })
  154. .data('bootstrapValidator');
  155. this.$country.val('SE');
  156. this.bv.resetForm();
  157. this.$zipCode.val('S-567 8');
  158. this.bv.validate();
  159. expect($('#msg').html()).toEqual('getCountryCode() called');
  160. expect(this.bv.isValid()).toEqual(false);
  161. this.bv.resetForm();
  162. this.$zipCode.val('S-12345');
  163. this.bv.validate();
  164. expect($('#msg').html()).toEqual('getCountryCode() called');
  165. expect(this.bv.isValid()).toBeTruthy();
  166. });
  167. it('not supported country code', function() {
  168. this.$zipCode.attr('data-bv-zipcode-country', 'NOT_SUPPORTED');
  169. $('#zipCodeForm').bootstrapValidator('destroy');
  170. this.bv = $('#zipCodeForm').bootstrapValidator().data('bootstrapValidator');
  171. this.bv.resetForm();
  172. this.$zipCode.val('1234');
  173. this.bv.validate();
  174. expect(this.bv.isValid()).toEqual(false);
  175. expect(this.bv.getMessages(this.$zipCode, 'zipCode')[0]).toEqual($.fn.bootstrapValidator.helpers.format($.fn.bootstrapValidator.i18n.zipCode.countryNotSupported, 'NOT_SUPPORTED'));
  176. });
  177. });