zipCode.js 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  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="CZ">Czech Republic</option>',
  26. '<option value="DK">Denmark</option>',
  27. '<option value="IT">Italy</option>',
  28. '<option value="NL">Netherlands</option>',
  29. '<option value="SE">Sweden</option>',
  30. '<option value="SK">Slovakia</option>',
  31. '<option value="GB">United Kingdom</option>',
  32. '</select>',
  33. '</div>',
  34. '</div>',
  35. '<div class="form-group">',
  36. '<label class="col-md-3 control-label">Zipcode</label>',
  37. '<div class="col-md-2">',
  38. '<input type="text" class="form-control" name="zc" data-bv-zipcode data-bv-zipcode-country="US" />',
  39. '</div>',
  40. '</div>',
  41. '</form>'
  42. ].join('\n')).appendTo('body');
  43. $('#zipCodeForm').bootstrapValidator();
  44. /**
  45. * @type {BootstrapValidator}
  46. */
  47. this.bv = $('#zipCodeForm').data('bootstrapValidator');
  48. this.$country = this.bv.getFieldElements('country');
  49. this.$zipCode = this.bv.getFieldElements('zc');
  50. });
  51. afterEach(function() {
  52. $('#zipCodeForm').bootstrapValidator('destroy').remove();
  53. });
  54. it('country code updateOption()', function() {
  55. // Check IT postal code
  56. this.bv.updateOption('zc', 'zipCode', 'country', 'IT');
  57. this.$zipCode.val('1234');
  58. this.bv.validate();
  59. expect(this.bv.isValid()).toEqual(false);
  60. this.bv.resetForm();
  61. this.$zipCode.val('IT-12345');
  62. this.bv.validate();
  63. expect(this.bv.isValid()).toBeTruthy();
  64. // Check United Kingdom postal code
  65. this.bv.updateOption('zc', 'zipCode', 'country', 'GB');
  66. var validUkSamples = ['EC1A 1BB', 'W1A 1HQ', 'M1 1AA', 'B33 8TH', 'CR2 6XH', 'DN55 1PT', 'AI-2640', 'ASCN 1ZZ', 'GIR 0AA'];
  67. for (var i in validUkSamples) {
  68. this.bv.resetForm();
  69. this.$zipCode.val(validUkSamples[i]);
  70. this.bv.validate();
  71. expect(this.bv.isValid()).toBeTruthy();
  72. }
  73. });
  74. it('country code other field declarative', function() {
  75. this.$zipCode.attr('data-bv-zipcode-country', 'country');
  76. // Need to destroy the plugin instance ...
  77. $('#zipCodeForm').bootstrapValidator('destroy');
  78. // ... and re-create it
  79. this.bv = $('#zipCodeForm').bootstrapValidator().data('bootstrapValidator');
  80. this.$country.val('IT');
  81. this.bv.resetForm();
  82. this.$zipCode.val('1234');
  83. this.bv.validate();
  84. expect(this.bv.isValid()).toEqual(false);
  85. this.bv.resetForm();
  86. this.$zipCode.val('I-12345');
  87. this.bv.validate();
  88. expect(this.bv.isValid()).toBeTruthy();
  89. });
  90. it('country code callback declarative function', function() {
  91. this.$zipCode.attr('data-bv-zipcode-country', 'getCountryCode');
  92. $('#zipCodeForm').bootstrapValidator('destroy');
  93. this.bv = $('#zipCodeForm').bootstrapValidator().data('bootstrapValidator');
  94. this.$country.val('NL');
  95. this.$zipCode.val('0123');
  96. this.bv.validate();
  97. expect($('#msg').html()).toEqual('getCountryCode() called');
  98. expect(this.bv.isValid()).toEqual(false);
  99. });
  100. it('country code callback declarative function()', function() {
  101. this.$zipCode.attr('data-bv-zipcode-country', 'getCountryCode()');
  102. $('#zipCodeForm').bootstrapValidator('destroy');
  103. this.bv = $('#zipCodeForm').bootstrapValidator().data('bootstrapValidator');
  104. this.$country.val('NL');
  105. this.$zipCode.val('1234 ab');
  106. this.bv.validate();
  107. expect($('#msg').html()).toEqual('getCountryCode() called');
  108. expect(this.bv.isValid()).toBeTruthy();
  109. });
  110. it('country code callback declarative A.B.C', function() {
  111. this.$zipCode.attr('data-bv-zipcode-country', 'TestSuite.ZipCode.getCountryCode');
  112. $('#zipCodeForm').bootstrapValidator('destroy');
  113. this.bv = $('#zipCodeForm').bootstrapValidator().data('bootstrapValidator');
  114. this.$country.val('DK');
  115. this.$zipCode.val('DK 123');
  116. this.bv.validate();
  117. expect($('#msg').html()).toEqual('TestSuite.ZipCode.getCountryCode() called');
  118. expect(this.bv.isValid()).toEqual(false);
  119. });
  120. it('country code callback declarative A.B.C()', function() {
  121. this.$zipCode.attr('data-bv-zipcode-country', 'TestSuite.ZipCode.getCountryCode()');
  122. $('#zipCodeForm').bootstrapValidator('destroy');
  123. this.bv = $('#zipCodeForm').bootstrapValidator().data('bootstrapValidator');
  124. this.$country.val('DK');
  125. this.$zipCode.val('DK-1234');
  126. this.bv.validate();
  127. expect($('#msg').html()).toEqual('TestSuite.ZipCode.getCountryCode() called');
  128. expect(this.bv.isValid()).toBeTruthy();
  129. });
  130. it('country code callback programmatically', function() {
  131. this.$zipCode.removeAttr('data-bv-zipcode-country');
  132. $('#zipCodeForm').bootstrapValidator('destroy');
  133. this.bv = $('#zipCodeForm')
  134. .bootstrapValidator({
  135. fields: {
  136. zc: {
  137. validators: {
  138. zipCode: {
  139. country: function(value, validator, $field) {
  140. return getCountryCode(value, validator, $field);
  141. }
  142. }
  143. }
  144. }
  145. }
  146. })
  147. .data('bootstrapValidator');
  148. this.$country.val('SE');
  149. this.bv.resetForm();
  150. this.$zipCode.val('S-567 8');
  151. this.bv.validate();
  152. expect($('#msg').html()).toEqual('getCountryCode() called');
  153. expect(this.bv.isValid()).toEqual(false);
  154. this.bv.resetForm();
  155. this.$zipCode.val('S-12345');
  156. this.bv.validate();
  157. expect($('#msg').html()).toEqual('getCountryCode() called');
  158. expect(this.bv.isValid()).toBeTruthy();
  159. });
  160. it('not supported country code', function() {
  161. this.$zipCode.attr('data-bv-zipcode-country', 'NOT_SUPPORTED');
  162. $('#zipCodeForm').bootstrapValidator('destroy');
  163. this.bv = $('#zipCodeForm').bootstrapValidator().data('bootstrapValidator');
  164. this.bv.resetForm();
  165. this.$zipCode.val('1234');
  166. this.bv.validate();
  167. expect(this.bv.isValid()).toEqual(false);
  168. expect(this.bv.getMessages(this.$zipCode, 'zipCode')[0]).toEqual($.fn.bootstrapValidator.helpers.format($.fn.bootstrapValidator.i18n.zipCode.countryNotSupported, 'NOT_SUPPORTED'));
  169. });
  170. it('US zipcode', function() {
  171. this.$zipCode.val('12345');
  172. this.bv.validate();
  173. expect(this.bv.isValid()).toBeTruthy();
  174. this.bv.resetForm();
  175. this.$zipCode.val('123');
  176. this.bv.validate();
  177. expect(this.bv.isValid()).toEqual(false);
  178. });
  179. it('Czech Republic postal code', function() {
  180. this.bv.updateOption('zc', 'zipCode', 'country', 'CZ');
  181. // Valid samples
  182. var validSamples = ['12345', '123 45'];
  183. for (var i in validSamples) {
  184. this.bv.resetForm();
  185. this.$zipCode.val(validSamples[i]);
  186. this.bv.validate();
  187. expect(this.bv.isValid()).toBeTruthy();
  188. }
  189. // Invalid samples
  190. var invalidSamples = ['12 345', '123456', '1 2345', '1234 5', '12 3 45'];
  191. for (i in invalidSamples) {
  192. this.bv.resetForm();
  193. this.$zipCode.val(invalidSamples[i]);
  194. this.bv.validate();
  195. expect(this.bv.isValid()).toEqual(false);
  196. }
  197. });
  198. it('Slovakia postal code', function() {
  199. this.bv.updateOption('zc', 'zipCode', 'country', 'SK');
  200. // Valid samples
  201. var validSamples = ['12345', '123 45'];
  202. for (var i in validSamples) {
  203. this.bv.resetForm();
  204. this.$zipCode.val(validSamples[i]);
  205. this.bv.validate();
  206. expect(this.bv.isValid()).toBeTruthy();
  207. }
  208. // Invalid samples
  209. var invalidSamples = ['12 345', '123456', '1 2345', '1234 5', '12 3 45'];
  210. for (i in invalidSamples) {
  211. this.bv.resetForm();
  212. this.$zipCode.val(invalidSamples[i]);
  213. this.bv.validate();
  214. expect(this.bv.isValid()).toEqual(false);
  215. }
  216. });
  217. });