vat.js 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643
  1. describe('vat', function() {
  2. beforeEach(function() {
  3. $([
  4. '<form class="form-horizontal" id="vatForm">',
  5. '<div class="form-group">',
  6. '<select class="form-control" name="country">',
  7. '<option value="AT">Austria</option>',
  8. '<option value="BE">Belgium</option>',
  9. '<option value="BG">Bulgaria</option>',
  10. '<option value="HR">Croatia</option>',
  11. '<option value="CY">Cyprus</option>',
  12. '<option value="CZ">Czech Republic</option>',
  13. '<option value="DK">Denmark</option>',
  14. '<option value="EE">Estonia</option>',
  15. '<option value="FI">Finland</option>',
  16. '<option value="FR">France</option>',
  17. '<option value="DE">Germany</option>',
  18. '<option value="GR">Greece</option>',
  19. '<option value="HU">Hungary</option>',
  20. '<option value="IE">Ireland</option>',
  21. '<option value="IT">Italy</option>',
  22. '<option value="LV">Latvia</option>',
  23. '<option value="LT">Lithuania</option>',
  24. '<option value="LU">Luxembourg</option>',
  25. '<option value="MT">Malta</option>',
  26. '<option value="NL">Netherlands</option>',
  27. '<option value="NO">Norway</option>',
  28. '<option value="PL">Poland</option>',
  29. '<option value="PT">Portugal</option>',
  30. '<option value="RO">Romania</option>',
  31. '<option value="RU">Russia</option>',
  32. '<option value="RS">Serbia</option>',
  33. '<option value="SK">Slovakia</option>',
  34. '<option value="SI">Slovenia</option>',
  35. '<option value="ES">Spain</option>',
  36. '<option value="SE">Sweden</option>',
  37. '<option value="CH">Switzerland</option>',
  38. '<option value="GB">United Kingdom</option>',
  39. '</select>',
  40. '</div>',
  41. '<div class="form-group">',
  42. '<input type="text" name="vat" data-bv-vat />',
  43. '</div>',
  44. '</form>',
  45. ].join('\n')).appendTo('body');
  46. $('#vatForm').bootstrapValidator();
  47. /**
  48. * @type {BootstrapValidator}
  49. */
  50. this.bv = $('#vatForm').data('bootstrapValidator');
  51. this.$country = this.bv.getFieldElements('country');
  52. this.$vat = this.bv.getFieldElements('vat');
  53. });
  54. afterEach(function() {
  55. $('#vatForm').bootstrapValidator('destroy').remove();
  56. });
  57. it('dynamic country', function() {
  58. this.$vat.attr('data-bv-vat-country', 'country');
  59. this.bv.destroy();
  60. this.bv = $('#vatForm').bootstrapValidator().data('bootstrapValidator');
  61. this.$country.val('AT');
  62. this.$vat.val('ATU13585627');
  63. this.bv.validate();
  64. expect(this.bv.isValid()).toBeTruthy();
  65. this.bv.resetForm();
  66. this.$country.val('BG');
  67. this.$vat.val('BE0428759497');
  68. this.bv.validate();
  69. expect(this.bv.isValid()).toEqual(false);
  70. this.bv.resetForm();
  71. this.$country.val('BE');
  72. this.$vat.val('BE431150351');
  73. this.bv.validate();
  74. expect(this.bv.isValid()).toEqual(false);
  75. });
  76. it('Austrian VAT number', function () {
  77. // Valid samples
  78. var validSamples = ['ATU13585627'];
  79. for (var i in validSamples) {
  80. this.bv.resetForm();
  81. this.$vat.val(validSamples[i]);
  82. this.bv.validate();
  83. expect(this.bv.isValid()).toBeTruthy();
  84. }
  85. // Invalid samples
  86. var invalidSamples = ['ATU13585626'];
  87. for (i in invalidSamples) {
  88. this.bv.resetForm();
  89. this.$vat.val(invalidSamples[i]);
  90. this.bv.validate();
  91. expect(this.bv.isValid()).toEqual(false);
  92. }
  93. });
  94. it('Belgian VAT number', function () {
  95. // Valid samples
  96. var validSamples = ['BE0428759497'];
  97. for (var i in validSamples) {
  98. this.bv.resetForm();
  99. this.$vat.val(validSamples[i]);
  100. this.bv.validate();
  101. expect(this.bv.isValid()).toBeTruthy();
  102. }
  103. // Invalid samples
  104. var invalidSamples = ['BE431150351'];
  105. for (i in invalidSamples) {
  106. this.bv.resetForm();
  107. this.$vat.val(invalidSamples[i]);
  108. this.bv.validate();
  109. expect(this.bv.isValid()).toEqual(false);
  110. }
  111. });
  112. it('Bulgarian VAT number', function () {
  113. // Valid samples
  114. var validSamples = ['BG175074752', 'BG7523169263', 'BG8032056031', 'BG7542011030', 'BG7111042925'];
  115. for (var i in validSamples) {
  116. this.bv.resetForm();
  117. this.$vat.val(validSamples[i]);
  118. this.bv.validate();
  119. expect(this.bv.isValid()).toBeTruthy();
  120. }
  121. // Invalid samples
  122. var invalidSamples = ['BG175074753', 'BG7552A10004', 'BG7111042922'];
  123. for (i in invalidSamples) {
  124. this.bv.resetForm();
  125. this.$vat.val(invalidSamples[i]);
  126. this.bv.validate();
  127. expect(this.bv.isValid()).toEqual(false);
  128. }
  129. });
  130. it('Cypriot VAT number', function () {
  131. // Valid samples
  132. var validSamples = ['CY10259033P'];
  133. for (var i in validSamples) {
  134. this.bv.resetForm();
  135. this.$vat.val(validSamples[i]);
  136. this.bv.validate();
  137. expect(this.bv.isValid()).toBeTruthy();
  138. }
  139. // Invalid samples
  140. var invalidSamples = ['CY10259033Z'];
  141. for (i in invalidSamples) {
  142. this.bv.resetForm();
  143. this.$vat.val(invalidSamples[i]);
  144. this.bv.validate();
  145. expect(this.bv.isValid()).toEqual(false);
  146. }
  147. });
  148. it('Czech Republic VAT number', function () {
  149. // Valid samples
  150. var validSamples = ['CZ25123891', 'CZ7103192745', 'CZ991231123', 'CZ640903926'];
  151. for (var i in validSamples) {
  152. this.bv.resetForm();
  153. this.$vat.val(validSamples[i]);
  154. this.bv.validate();
  155. expect(this.bv.isValid()).toBeTruthy();
  156. }
  157. // Invalid samples
  158. var invalidSamples = ['CZ25123890', 'CZ1103492745', 'CZ590312123'];
  159. for (i in invalidSamples) {
  160. this.bv.resetForm();
  161. this.$vat.val(invalidSamples[i]);
  162. this.bv.validate();
  163. expect(this.bv.isValid()).toEqual(false);
  164. }
  165. });
  166. it('German VAT number', function () {
  167. // Valid samples
  168. var validSamples = ['DE136695976'];
  169. for (var i in validSamples) {
  170. this.bv.resetForm();
  171. this.$vat.val(validSamples[i]);
  172. this.bv.validate();
  173. expect(this.bv.isValid()).toBeTruthy();
  174. }
  175. // Invalid samples
  176. var invalidSamples = ['DE136695978'];
  177. for (i in invalidSamples) {
  178. this.bv.resetForm();
  179. this.$vat.val(invalidSamples[i]);
  180. this.bv.validate();
  181. expect(this.bv.isValid()).toEqual(false);
  182. }
  183. });
  184. it('Danish VAT number', function () {
  185. // Valid samples
  186. var validSamples = ['DK13585628'];
  187. for (var i in validSamples) {
  188. this.bv.resetForm();
  189. this.$vat.val(validSamples[i]);
  190. this.bv.validate();
  191. expect(this.bv.isValid()).toBeTruthy();
  192. }
  193. // Invalid samples
  194. var invalidSamples = ['DK13585627'];
  195. for (i in invalidSamples) {
  196. this.bv.resetForm();
  197. this.$vat.val(invalidSamples[i]);
  198. this.bv.validate();
  199. expect(this.bv.isValid()).toEqual(false);
  200. }
  201. });
  202. it('Estonian VAT number', function () {
  203. // Valid samples
  204. var validSamples = ['EE100931558', 'EE100594102'];
  205. for (var i in validSamples) {
  206. this.bv.resetForm();
  207. this.$vat.val(validSamples[i]);
  208. this.bv.validate();
  209. expect(this.bv.isValid()).toBeTruthy();
  210. }
  211. // Invalid samples
  212. var invalidSamples = ['EE100594103'];
  213. for (i in invalidSamples) {
  214. this.bv.resetForm();
  215. this.$vat.val(invalidSamples[i]);
  216. this.bv.validate();
  217. expect(this.bv.isValid()).toEqual(false);
  218. }
  219. });
  220. it('Spanish VAT number (NIF)', function () {
  221. // Valid samples
  222. var validSamples = ['ES54362315K', 'ESX2482300W', 'ESX5253868R', 'ESM1234567L', 'ESJ99216582', 'ESB58378431', 'ESB64717838'];
  223. for (var i in validSamples) {
  224. this.bv.resetForm();
  225. this.$vat.val(validSamples[i]);
  226. this.bv.validate();
  227. expect(this.bv.isValid()).toBeTruthy();
  228. }
  229. // Invalid samples
  230. var invalidSamples = ['ES54362315Z', 'ESX2482300A', 'ESJ99216583'];
  231. for (i in invalidSamples) {
  232. this.bv.resetForm();
  233. this.$vat.val(invalidSamples[i]);
  234. this.bv.validate();
  235. expect(this.bv.isValid()).toEqual(false);
  236. }
  237. });
  238. it('Finnish VAT number', function () {
  239. // Valid samples
  240. var validSamples = ['FI20774740'];
  241. for (var i in validSamples) {
  242. this.bv.resetForm();
  243. this.$vat.val(validSamples[i]);
  244. this.bv.validate();
  245. expect(this.bv.isValid()).toBeTruthy();
  246. }
  247. // Invalid samples
  248. var invalidSamples = ['FI20774741'];
  249. for (i in invalidSamples) {
  250. this.bv.resetForm();
  251. this.$vat.val(invalidSamples[i]);
  252. this.bv.validate();
  253. expect(this.bv.isValid()).toEqual(false);
  254. }
  255. });
  256. it('French VAT number (TVA)', function () {
  257. // Valid samples
  258. var validSamples = ['FR40303265045', 'FR23334175221', 'FRK7399859412', 'FR4Z123456782'];
  259. for (var i in validSamples) {
  260. this.bv.resetForm();
  261. this.$vat.val(validSamples[i]);
  262. this.bv.validate();
  263. expect(this.bv.isValid()).toBeTruthy();
  264. }
  265. // Invalid samples
  266. var invalidSamples = ['FR84323140391'];
  267. for (i in invalidSamples) {
  268. this.bv.resetForm();
  269. this.$vat.val(invalidSamples[i]);
  270. this.bv.validate();
  271. expect(this.bv.isValid()).toEqual(false);
  272. }
  273. });
  274. it('United Kingdom VAT number', function () {
  275. // Valid samples
  276. var validSamples = ['GB980780684'];
  277. for (var i in validSamples) {
  278. this.bv.resetForm();
  279. this.$vat.val(validSamples[i]);
  280. this.bv.validate();
  281. expect(this.bv.isValid()).toBeTruthy();
  282. }
  283. // Invalid samples
  284. var invalidSamples = ['GB802311781'];
  285. for (i in invalidSamples) {
  286. this.bv.resetForm();
  287. this.$vat.val(invalidSamples[i]);
  288. this.bv.validate();
  289. expect(this.bv.isValid()).toEqual(false);
  290. }
  291. });
  292. it('Greek VAT number', function () {
  293. // Valid samples
  294. var validSamples = ['GR023456780', 'EL094259216'];
  295. for (var i in validSamples) {
  296. this.bv.resetForm();
  297. this.$vat.val(validSamples[i]);
  298. this.bv.validate();
  299. expect(this.bv.isValid()).toBeTruthy();
  300. }
  301. // Invalid samples
  302. var invalidSamples = ['EL123456781'];
  303. for (i in invalidSamples) {
  304. this.bv.resetForm();
  305. this.$vat.val(invalidSamples[i]);
  306. this.bv.validate();
  307. expect(this.bv.isValid()).toEqual(false);
  308. }
  309. });
  310. it('Hungarian VAT number', function () {
  311. // Valid samples
  312. var validSamples = ['HU12892312'];
  313. for (var i in validSamples) {
  314. this.bv.resetForm();
  315. this.$vat.val(validSamples[i]);
  316. this.bv.validate();
  317. expect(this.bv.isValid()).toBeTruthy();
  318. }
  319. // Invalid samples
  320. var invalidSamples = ['HU12892313'];
  321. for (i in invalidSamples) {
  322. this.bv.resetForm();
  323. this.$vat.val(invalidSamples[i]);
  324. this.bv.validate();
  325. expect(this.bv.isValid()).toEqual(false);
  326. }
  327. });
  328. it('Croatian VAT number', function () {
  329. // Valid samples
  330. var validSamples = ['HR33392005961'];
  331. for (var i in validSamples) {
  332. this.bv.resetForm();
  333. this.$vat.val(validSamples[i]);
  334. this.bv.validate();
  335. expect(this.bv.isValid()).toBeTruthy();
  336. }
  337. // Invalid samples
  338. var invalidSamples = ['HR33392005962'];
  339. for (i in invalidSamples) {
  340. this.bv.resetForm();
  341. this.$vat.val(invalidSamples[i]);
  342. this.bv.validate();
  343. expect(this.bv.isValid()).toEqual(false);
  344. }
  345. });
  346. it('Irish VAT number', function () {
  347. // Valid samples
  348. var validSamples = ['IE6433435F', 'IE6433435OA', 'IE8D79739I'];
  349. for (var i in validSamples) {
  350. this.bv.resetForm();
  351. this.$vat.val(validSamples[i]);
  352. this.bv.validate();
  353. expect(this.bv.isValid()).toBeTruthy();
  354. }
  355. // Invalid samples
  356. var invalidSamples = ['IE8D79738J'];
  357. for (i in invalidSamples) {
  358. this.bv.resetForm();
  359. this.$vat.val(invalidSamples[i]);
  360. this.bv.validate();
  361. expect(this.bv.isValid()).toEqual(false);
  362. }
  363. });
  364. it('Italian VAT number', function () {
  365. // Valid samples
  366. var validSamples = ['IT00743110157'];
  367. for (var i in validSamples) {
  368. this.bv.resetForm();
  369. this.$vat.val(validSamples[i]);
  370. this.bv.validate();
  371. expect(this.bv.isValid()).toBeTruthy();
  372. }
  373. // Invalid samples
  374. var invalidSamples = ['IT00743110158'];
  375. for (i in invalidSamples) {
  376. this.bv.resetForm();
  377. this.$vat.val(invalidSamples[i]);
  378. this.bv.validate();
  379. expect(this.bv.isValid()).toEqual(false);
  380. }
  381. });
  382. it('Lithuanian VAT number', function () {
  383. // Valid samples
  384. var validSamples = ['LT119511515', 'LT100001919017', 'LT100004801610'];
  385. for (var i in validSamples) {
  386. this.bv.resetForm();
  387. this.$vat.val(validSamples[i]);
  388. this.bv.validate();
  389. expect(this.bv.isValid()).toBeTruthy();
  390. }
  391. // Invalid samples
  392. var invalidSamples = ['LT100001919018'];
  393. for (i in invalidSamples) {
  394. this.bv.resetForm();
  395. this.$vat.val(invalidSamples[i]);
  396. this.bv.validate();
  397. expect(this.bv.isValid()).toEqual(false);
  398. }
  399. });
  400. it('Luxembourg VAT number', function () {
  401. // Valid samples
  402. var validSamples = ['LU15027442'];
  403. for (var i in validSamples) {
  404. this.bv.resetForm();
  405. this.$vat.val(validSamples[i]);
  406. this.bv.validate();
  407. expect(this.bv.isValid()).toBeTruthy();
  408. }
  409. // Invalid samples
  410. var invalidSamples = ['LU15027443'];
  411. for (i in invalidSamples) {
  412. this.bv.resetForm();
  413. this.$vat.val(invalidSamples[i]);
  414. this.bv.validate();
  415. expect(this.bv.isValid()).toEqual(false);
  416. }
  417. });
  418. it('Latvian VAT number', function () {
  419. // Valid samples
  420. var validSamples = ['LV40003521600', 'LV16117519997'];
  421. for (var i in validSamples) {
  422. this.bv.resetForm();
  423. this.$vat.val(validSamples[i]);
  424. this.bv.validate();
  425. expect(this.bv.isValid()).toBeTruthy();
  426. }
  427. // Invalid samples
  428. var invalidSamples = ['LV40003521601', 'LV16137519997'];
  429. for (i in invalidSamples) {
  430. this.bv.resetForm();
  431. this.$vat.val(invalidSamples[i]);
  432. this.bv.validate();
  433. expect(this.bv.isValid()).toEqual(false);
  434. }
  435. });
  436. it('Maltese VAT number', function () {
  437. // Valid samples
  438. var validSamples = ['MT11679112'];
  439. for (var i in validSamples) {
  440. this.bv.resetForm();
  441. this.$vat.val(validSamples[i]);
  442. this.bv.validate();
  443. expect(this.bv.isValid()).toBeTruthy();
  444. }
  445. // Invalid samples
  446. var invalidSamples = ['MT11679113'];
  447. for (i in invalidSamples) {
  448. this.bv.resetForm();
  449. this.$vat.val(invalidSamples[i]);
  450. this.bv.validate();
  451. expect(this.bv.isValid()).toEqual(false);
  452. }
  453. });
  454. it('Dutch VAT number', function () {
  455. // Valid samples
  456. var validSamples = ['NL004495445B01'];
  457. for (var i in validSamples) {
  458. this.bv.resetForm();
  459. this.$vat.val(validSamples[i]);
  460. this.bv.validate();
  461. expect(this.bv.isValid()).toBeTruthy();
  462. }
  463. // Invalid samples
  464. var invalidSamples = ['NL123456789B90'];
  465. for (i in invalidSamples) {
  466. this.bv.resetForm();
  467. this.$vat.val(invalidSamples[i]);
  468. this.bv.validate();
  469. expect(this.bv.isValid()).toEqual(false);
  470. }
  471. });
  472. it('Polish VAT number', function () {
  473. // Valid samples
  474. var validSamples = ['PL8567346215'];
  475. for (var i in validSamples) {
  476. this.bv.resetForm();
  477. this.$vat.val(validSamples[i]);
  478. this.bv.validate();
  479. expect(this.bv.isValid()).toBeTruthy();
  480. }
  481. // Invalid samples
  482. var invalidSamples = ['PL8567346216'];
  483. for (i in invalidSamples) {
  484. this.bv.resetForm();
  485. this.$vat.val(invalidSamples[i]);
  486. this.bv.validate();
  487. expect(this.bv.isValid()).toEqual(false);
  488. }
  489. });
  490. it('Portuguese VAT number', function () {
  491. // Valid samples
  492. var validSamples = ['PT501964843'];
  493. for (var i in validSamples) {
  494. this.bv.resetForm();
  495. this.$vat.val(validSamples[i]);
  496. this.bv.validate();
  497. expect(this.bv.isValid()).toBeTruthy();
  498. }
  499. // Invalid samples
  500. var invalidSamples = ['PT501964842'];
  501. for (i in invalidSamples) {
  502. this.bv.resetForm();
  503. this.$vat.val(invalidSamples[i]);
  504. this.bv.validate();
  505. expect(this.bv.isValid()).toEqual(false);
  506. }
  507. });
  508. it('Romanian VAT number', function () {
  509. // Valid samples
  510. var validSamples = ['RO18547290'];
  511. for (var i in validSamples) {
  512. this.bv.resetForm();
  513. this.$vat.val(validSamples[i]);
  514. this.bv.validate();
  515. expect(this.bv.isValid()).toBeTruthy();
  516. }
  517. // Invalid samples
  518. var invalidSamples = ['RO18547291'];
  519. for (i in invalidSamples) {
  520. this.bv.resetForm();
  521. this.$vat.val(invalidSamples[i]);
  522. this.bv.validate();
  523. expect(this.bv.isValid()).toEqual(false);
  524. }
  525. });
  526. it('Swedish VAT number', function () {
  527. // Valid samples
  528. var validSamples = ['SE123456789701'];
  529. for (var i in validSamples) {
  530. this.bv.resetForm();
  531. this.$vat.val(validSamples[i]);
  532. this.bv.validate();
  533. expect(this.bv.isValid()).toBeTruthy();
  534. }
  535. // Invalid samples
  536. var invalidSamples = ['SE123456789101'];
  537. for (i in invalidSamples) {
  538. this.bv.resetForm();
  539. this.$vat.val(invalidSamples[i]);
  540. this.bv.validate();
  541. expect(this.bv.isValid()).toEqual(false);
  542. }
  543. });
  544. it('Slovenian VAT number', function () {
  545. // Valid samples
  546. var validSamples = ['SI50223054'];
  547. for (var i in validSamples) {
  548. this.bv.resetForm();
  549. this.$vat.val(validSamples[i]);
  550. this.bv.validate();
  551. expect(this.bv.isValid()).toBeTruthy();
  552. }
  553. // Invalid samples
  554. var invalidSamples = ['SI50223055'];
  555. for (i in invalidSamples) {
  556. this.bv.resetForm();
  557. this.$vat.val(invalidSamples[i]);
  558. this.bv.validate();
  559. expect(this.bv.isValid()).toEqual(false);
  560. }
  561. });
  562. it('Slovak VAT number', function () {
  563. // Valid samples
  564. var validSamples = ['SK2022749619'];
  565. for (var i in validSamples) {
  566. this.bv.resetForm();
  567. this.$vat.val(validSamples[i]);
  568. this.bv.validate();
  569. expect(this.bv.isValid()).toBeTruthy();
  570. }
  571. // Invalid samples
  572. var invalidSamples = ['SK2022749618'];
  573. for (i in invalidSamples) {
  574. this.bv.resetForm();
  575. this.$vat.val(invalidSamples[i]);
  576. this.bv.validate();
  577. expect(this.bv.isValid()).toEqual(false);
  578. }
  579. });
  580. });