zipCode.js 11 KB

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