zipCode.js 10 KB

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