date.js 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834
  1. function getDate(value, validator, $field) {
  2. return validator.getFieldElements('date').val();
  3. };
  4. TestSuite = $.extend({}, TestSuite, {
  5. Date: {
  6. getDate: function(value, validator, $field) {
  7. return validator.getFieldElements('date').val();
  8. }
  9. }
  10. });
  11. describe('date', function() {
  12. beforeEach(function() {
  13. $([
  14. '<form class="form-horizontal" id="dateForm">',
  15. '<div id="msg"></div>',
  16. '<div class="form-group">',
  17. '<input type="text" name="date" data-bv-date />',
  18. '</div>',
  19. '<div class="form-group">',
  20. '<input type="text" name="minDate" data-bv-date data-bv-date-min="" />',
  21. '</div>',
  22. '<div class="form-group">',
  23. '<input type="text" name="maxDate" data-bv-date data-bv-date-max="" />',
  24. '</div>',
  25. '<div class="form-group">',
  26. '<input type="text" name="range" data-bv-date data-bv-date-min="" data-bv-date-max="" />',
  27. '</div>',
  28. '</form>'
  29. ].join('\n')).appendTo('body');
  30. $('#dateForm').bootstrapValidator();
  31. this.bv = $('#dateForm').data('bootstrapValidator');
  32. this.$date = this.bv.getFieldElements('date');
  33. this.$minDate = this.bv.getFieldElements('minDate');
  34. this.$maxDate = this.bv.getFieldElements('maxDate');
  35. this.$range = this.bv.getFieldElements('range');
  36. });
  37. afterEach(function() {
  38. $('#dateForm').bootstrapValidator('destroy').remove();
  39. });
  40. it('YYYY/MM/DD', function() {
  41. this.bv.updateOption('date', 'date', 'format', 'YYYY/MM/DD');
  42. this.$date.val('2000/01/30');
  43. this.bv.validate();
  44. expect(this.bv.isValid()).toBeTruthy();
  45. // Invalid year
  46. this.bv.resetForm();
  47. this.$date.val('100/10/20');
  48. this.bv.validate();
  49. expect(this.bv.isValid()).toEqual(false);
  50. // Invalid month
  51. this.bv.resetForm();
  52. this.$date.val('2000/00/10');
  53. this.bv.validate();
  54. expect(this.bv.isValid()).toEqual(false);
  55. this.bv.resetForm();
  56. this.$date.val('2000/15/10');
  57. this.bv.validate();
  58. expect(this.bv.isValid()).toEqual(false);
  59. // Invalid day
  60. this.bv.resetForm();
  61. this.$date.val('2000/03/00');
  62. this.bv.validate();
  63. expect(this.bv.isValid()).toEqual(false);
  64. this.bv.resetForm();
  65. this.$date.val('2000/10/32');
  66. this.bv.validate();
  67. expect(this.bv.isValid()).toEqual(false);
  68. // Negative number
  69. this.bv.resetForm();
  70. this.$date.val('-2000/10/20');
  71. this.bv.validate();
  72. expect(this.bv.isValid()).toEqual(false);
  73. this.bv.resetForm();
  74. this.$date.val('2000/-10/20');
  75. this.bv.validate();
  76. expect(this.bv.isValid()).toEqual(false);
  77. this.bv.resetForm();
  78. this.$date.val('2000/10/-20');
  79. this.bv.validate();
  80. expect(this.bv.isValid()).toEqual(false);
  81. // Consist invalid characters
  82. // Issue #310
  83. this.bv.resetForm();
  84. this.$date.val('aaaa/');
  85. this.bv.validate();
  86. expect(this.bv.isValid()).toEqual(false);
  87. this.bv.resetForm();
  88. this.$date.val('2004df/1dd1/5ffg');
  89. this.bv.validate();
  90. expect(this.bv.isValid()).toEqual(false);
  91. // Issue #475
  92. this.bv.resetForm();
  93. this.$date.val('2014/09');
  94. this.bv.validate();
  95. expect(this.bv.isValid()).toEqual(false);
  96. this.bv.resetForm();
  97. this.$date.val('2014/09/');
  98. this.bv.validate();
  99. expect(this.bv.isValid()).toEqual(false);
  100. this.bv.resetForm();
  101. this.$date.val('2014//15');
  102. this.bv.validate();
  103. expect(this.bv.isValid()).toEqual(false);
  104. this.bv.resetForm();
  105. this.$date.val('/09/15');
  106. this.bv.validate();
  107. expect(this.bv.isValid()).toEqual(false);
  108. });
  109. it('MM/DD/YYYY', function() {
  110. this.bv.updateOption('date', 'date', 'format', 'MM/DD/YYYY');
  111. this.$date.val('09/15/2020');
  112. this.bv.validate();
  113. expect(this.bv.isValid()).toBeTruthy();
  114. this.bv.resetForm();
  115. this.$date.val('09/15');
  116. this.bv.validate();
  117. expect(this.bv.isValid()).toEqual(false);
  118. this.bv.resetForm();
  119. this.$date.val('09/15/');
  120. this.bv.validate();
  121. expect(this.bv.isValid()).toEqual(false);
  122. });
  123. it('number of days in February', function() {
  124. this.bv.updateOption('date', 'date', 'format', 'YYYY/MM/DD');
  125. this.$date.val('2000/02/28');
  126. this.bv.validate();
  127. expect(this.bv.isValid()).toBeTruthy();
  128. this.bv.resetForm();
  129. this.$date.val('2000/02/29');
  130. this.bv.validate();
  131. expect(this.bv.isValid()).toBeTruthy();
  132. this.bv.resetForm();
  133. this.$date.val('2001/02/29');
  134. this.bv.validate();
  135. expect(this.bv.isValid()).toEqual(false);
  136. });
  137. // Issue #681
  138. it('date, month, year are prefixed by zero', function() {
  139. this.bv.updateOption('date', 'date', 'format', 'MM/DD/YYYY');
  140. this.$date.val('0012/08/2014');
  141. this.bv.validate();
  142. expect(this.bv.isValid()).toEqual(false);
  143. this.bv.resetForm();
  144. this.$date.val('12/0008/2014');
  145. this.bv.validate();
  146. expect(this.bv.isValid()).toEqual(false);
  147. this.bv.resetForm();
  148. this.$date.val('12/08/002014');
  149. this.bv.validate();
  150. expect(this.bv.isValid()).toEqual(false);
  151. this.bv.resetForm();
  152. this.$date.val('12/08/2014');
  153. this.bv.validate();
  154. expect(this.bv.isValid()).toBeTruthy();
  155. });
  156. it('hours, minutes, seconds are prefixed by zero', function() {
  157. this.bv.updateOption('date', 'date', 'format', 'YYYY/MM/DD h:m:s');
  158. this.$date.val('2014/08/17 0007:30:00');
  159. this.bv.validate();
  160. expect(this.bv.isValid()).toEqual(false);
  161. this.bv.resetForm();
  162. this.$date.val('2014/08/17 07:030:00');
  163. this.bv.validate();
  164. expect(this.bv.isValid()).toEqual(false);
  165. this.bv.resetForm();
  166. this.$date.val('2014/08/17 07:30:0000');
  167. this.bv.validate();
  168. expect(this.bv.isValid()).toEqual(false);
  169. this.bv.resetForm();
  170. this.$date.val('2014/08/17 07:30:00');
  171. this.bv.validate();
  172. expect(this.bv.isValid()).toBeTruthy();
  173. });
  174. // min test suite
  175. it('min date format YYYY/MM/DD', function() {
  176. this.bv.updateOption('minDate', 'date', 'format', 'YYYY/MM/DD');
  177. this.bv.updateOption('minDate', 'date', 'min', '2010/01/01');
  178. this.$minDate.val('2010/01/02');
  179. this.bv.validate();
  180. expect(this.bv.isValidField('minDate')).toBeTruthy();
  181. this.bv.resetForm();
  182. this.$minDate.val('2010/01/002'); // day prefexid by 0 not allowed
  183. this.bv.validate();
  184. expect(this.bv.isValidField('minDate')).toEqual(false);
  185. this.bv.resetForm();
  186. this.$minDate.val('2014/08/17');
  187. this.bv.validate();
  188. expect(this.bv.isValidField('minDate')).toBeTruthy();
  189. this.bv.resetForm();
  190. this.$minDate.val('2009/12/31');
  191. this.bv.validate();
  192. expect(this.bv.isValidField('minDate')).toEqual(false);
  193. this.bv.resetForm();
  194. this.$minDate.val('2000/01/01');
  195. this.bv.validate();
  196. expect(this.bv.isValidField('minDate')).toEqual(false);
  197. });
  198. it('min date format YYYY-MM-DD', function() {
  199. this.bv.updateOption('minDate', 'date', 'format', 'YYYY-MM-DD');
  200. this.bv.updateOption('minDate', 'date', 'min', '2010-01-01');
  201. this.$minDate.val('2010-01-02');
  202. this.bv.validate();
  203. expect(this.bv.isValidField('minDate')).toBeTruthy();
  204. this.bv.resetForm();
  205. this.$minDate.val('2010-001-02'); // month prefexid by 0 not allowed
  206. this.bv.validate();
  207. expect(this.bv.isValidField('minDate')).toEqual(false);
  208. this.bv.resetForm();
  209. this.$minDate.val('2014-08-17');
  210. this.bv.validate();
  211. expect(this.bv.isValidField('minDate')).toBeTruthy();
  212. this.bv.resetForm();
  213. this.$minDate.val('2009-12-31');
  214. this.bv.validate();
  215. expect(this.bv.isValidField('minDate')).toEqual(false);
  216. this.bv.resetForm();
  217. this.$minDate.val('2000-01-01');
  218. this.bv.validate();
  219. expect(this.bv.isValidField('minDate')).toEqual(false);
  220. });
  221. it('min date format DD/MM/YYYY', function() {
  222. this.bv.updateOption('minDate', 'date', 'format', 'DD/MM/YYYY');
  223. this.bv.updateOption('minDate', 'date', 'min', '01/01/2010');
  224. this.$minDate.val('02/01/2010');
  225. this.bv.validate();
  226. expect(this.bv.isValidField('minDate')).toBeTruthy();
  227. this.bv.resetForm();
  228. this.$minDate.val('17/08/2014');
  229. this.bv.validate();
  230. expect(this.bv.isValidField('minDate')).toBeTruthy();
  231. this.bv.resetForm();
  232. this.$minDate.val('02/01/02010'); // year prefixed by 0 not allowed
  233. this.bv.validate();
  234. expect(this.bv.isValidField('minDate')).toEqual(false);
  235. this.bv.resetForm();
  236. this.$minDate.val('31/12/2009');
  237. this.bv.validate();
  238. expect(this.bv.isValidField('minDate')).toEqual(false);
  239. this.bv.resetForm();
  240. this.$minDate.val('01/01/2000');
  241. this.bv.validate();
  242. expect(this.bv.isValidField('minDate')).toEqual(false);
  243. });
  244. it('min date format YYYY-MM-DD h:m:s', function() {
  245. this.bv.updateOption('minDate', 'date', 'format', 'YYYY-MM-DD h:m:s');
  246. this.bv.updateOption('minDate', 'date', 'min', '2010-01-01 01:00:00');
  247. this.bv.resetForm();
  248. this.$minDate.val('2010-01-01 01:00:01');
  249. this.bv.validate();
  250. expect(this.bv.isValidField('minDate')).toBeTruthy();
  251. this.$minDate.val('2010-01-02 01:00:01');
  252. this.bv.validate();
  253. expect(this.bv.isValidField('minDate')).toBeTruthy();
  254. this.bv.resetForm();
  255. this.$minDate.val('2014-08-17 12:00:00');
  256. this.bv.validate();
  257. expect(this.bv.isValidField('minDate')).toBeTruthy();
  258. this.bv.resetForm();
  259. this.$minDate.val('2009-12-31 00:00:00');
  260. this.bv.validate();
  261. expect(this.bv.isValidField('minDate')).toEqual(false);
  262. this.bv.resetForm();
  263. this.$minDate.val('2009-12-31 010:00:00'); // hours prefixed by 0 not allowed
  264. this.bv.validate();
  265. expect(this.bv.isValidField('minDate')).toEqual(false);
  266. this.bv.resetForm();
  267. this.$minDate.val('2009-12-31 10:001:00'); // minutes prefixed by 0 not allowed
  268. this.bv.validate();
  269. expect(this.bv.isValidField('minDate')).toEqual(false);
  270. this.bv.resetForm();
  271. this.$minDate.val('2009-12-31 10:01:012'); // seconds prefixed by 0 not allowed
  272. this.bv.validate();
  273. expect(this.bv.isValidField('minDate')).toEqual(false);
  274. this.bv.resetForm();
  275. this.$minDate.val('2009-12-31 00:00:00');
  276. this.bv.validate();
  277. expect(this.bv.isValidField('minDate')).toEqual(false);
  278. this.bv.resetForm();
  279. this.$minDate.val('2000-01-01 23:00:12');
  280. this.bv.validate();
  281. expect(this.bv.isValidField('minDate')).toEqual(false);
  282. });
  283. // max test suite
  284. it('max date format YYYY/MM/DD', function() {
  285. this.bv.updateOption('maxDate', 'date', 'format', 'YYYY/MM/DD');
  286. this.bv.updateOption('maxDate', 'date', 'max', '2014/09/10');
  287. this.$maxDate.val('2014/09/09');
  288. this.bv.validate();
  289. expect(this.bv.isValidField('maxDate')).toBeTruthy();
  290. this.bv.resetForm();
  291. this.$maxDate.val('2014/08/17');
  292. this.bv.validate();
  293. expect(this.bv.isValidField('maxDate')).toBeTruthy();
  294. this.bv.resetForm();
  295. this.$maxDate.val('02014/012/031'); // year, month or day prefixed by 0 not allowed
  296. this.bv.validate();
  297. expect(this.bv.isValidField('maxDate')).toEqual(false);
  298. this.bv.resetForm();
  299. this.$maxDate.val('2014/12/31');
  300. this.bv.validate();
  301. expect(this.bv.isValidField('maxDate')).toEqual(false);
  302. this.bv.resetForm();
  303. this.$maxDate.val('2015/01/01');
  304. this.bv.validate();
  305. expect(this.bv.isValidField('maxDate')).toEqual(false);
  306. });
  307. it('max date format YYYY-MM-DD', function() {
  308. this.bv.updateOption('maxDate', 'date', 'format', 'YYYY-MM-DD');
  309. this.bv.updateOption('maxDate', 'date', 'max', '2014-09-10');
  310. this.$maxDate.val('2014-09-09');
  311. this.bv.validate();
  312. expect(this.bv.isValidField('maxDate')).toBeTruthy();
  313. this.bv.resetForm();
  314. this.$maxDate.val('2014-08-17');
  315. this.bv.validate();
  316. expect(this.bv.isValidField('maxDate')).toBeTruthy();
  317. this.bv.resetForm();
  318. this.$maxDate.val('02014-012-031'); // year, month or day prefixed by 0 not allowed
  319. this.bv.validate();
  320. expect(this.bv.isValidField('maxDate')).toEqual(false);
  321. this.bv.resetForm();
  322. this.$maxDate.val('2014-12-31');
  323. this.bv.validate();
  324. expect(this.bv.isValidField('maxDate')).toEqual(false);
  325. this.bv.resetForm();
  326. this.$maxDate.val('2015-01-01');
  327. this.bv.validate();
  328. expect(this.bv.isValidField('maxDate')).toEqual(false);
  329. });
  330. it('max date format DD/MM/YYYY', function() {
  331. this.bv.updateOption('maxDate', 'date', 'format', 'DD/MM/YYYY');
  332. this.bv.updateOption('maxDate', 'date', 'max', '10/09/2014');
  333. this.$maxDate.val('09/09/2014');
  334. this.bv.validate();
  335. expect(this.bv.isValidField('maxDate')).toBeTruthy();
  336. this.bv.resetForm();
  337. this.$maxDate.val('17/08/2014');
  338. this.bv.validate();
  339. expect(this.bv.isValidField('maxDate')).toBeTruthy();
  340. this.bv.resetForm();
  341. this.$maxDate.val('031/012/02014'); // year, month or day prefixed by 0 not allowed
  342. this.bv.validate();
  343. expect(this.bv.isValidField('maxDate')).toEqual(false);
  344. this.bv.resetForm();
  345. this.$maxDate.val('31/12/2014');
  346. this.bv.validate();
  347. expect(this.bv.isValidField('maxDate')).toEqual(false);
  348. this.bv.resetForm();
  349. this.$maxDate.val('01/01/2015');
  350. this.bv.validate();
  351. expect(this.bv.isValidField('maxDate')).toEqual(false);
  352. });
  353. it('max date format YYYY-MM-DD h:m:s', function() {
  354. this.bv.updateOption('maxDate', 'date', 'format', 'YYYY-MM-DD h:m:s');
  355. this.bv.updateOption('maxDate', 'date', 'max', '2014-09-10 01:00:00');
  356. this.$maxDate.val('2014-09-09 01:00:01');
  357. this.bv.validate();
  358. expect(this.bv.isValidField('maxDate')).toBeTruthy();
  359. this.bv.resetForm();
  360. this.$maxDate.val('2014-08-17 12:00:00');
  361. this.bv.validate();
  362. expect(this.bv.isValidField('maxDate')).toBeTruthy();
  363. this.bv.resetForm();
  364. this.$maxDate.val('2014-09-09 001:001:001'); // hours, minutes or seconds prefixed by 0 not allowed
  365. this.bv.validate();
  366. expect(this.bv.isValidField('maxDate')).toEqual(false);
  367. this.bv.resetForm();
  368. this.$maxDate.val('2014-12-31 00:00:00');
  369. this.bv.validate();
  370. expect(this.bv.isValidField('maxDate')).toEqual(false);
  371. this.bv.resetForm();
  372. this.$maxDate.val('2015-01-01 23:00:12');
  373. this.bv.validate();
  374. expect(this.bv.isValidField('maxDate')).toEqual(false);
  375. });
  376. // range test suite
  377. it('range format YYYY/MM/DD', function() {
  378. this.bv.updateOption('range', 'date', 'format', 'YYYY/MM/DD');
  379. this.bv.updateOption('range', 'date', 'min', '2010/09/10');
  380. this.bv.updateOption('range', 'date', 'max', '2014/09/10');
  381. this.$range.val('2011/01/01');
  382. this.bv.validate();
  383. expect(this.bv.isValidField('range')).toBeTruthy();
  384. this.bv.resetForm();
  385. this.$range.val('2014/09/09');
  386. this.bv.validate();
  387. expect(this.bv.isValidField('range')).toBeTruthy();
  388. this.bv.resetForm();
  389. this.$range.val('02014/001/031'); // year, month or day prefixed by 0 not allowed
  390. this.bv.validate();
  391. expect(this.bv.isValidField('range')).toEqual(false);
  392. this.bv.resetForm();
  393. this.$range.val('2010/09/09');
  394. this.bv.validate();
  395. expect(this.bv.isValidField('range')).toEqual(false);
  396. this.bv.resetForm();
  397. this.$range.val('2014/09/11');
  398. this.bv.validate();
  399. expect(this.bv.isValidField('range')).toEqual(false);
  400. });
  401. it('range format YYYY-MM-DD', function() {
  402. this.bv.updateOption('range', 'date', 'format', 'YYYY-MM-DD');
  403. this.bv.updateOption('range', 'date', 'min', '2010-09-10');
  404. this.bv.updateOption('range', 'date', 'max', '2014-09-10');
  405. this.$range.val('2012-01-12');
  406. this.bv.validate();
  407. expect(this.bv.isValidField('range')).toBeTruthy();
  408. this.bv.resetForm();
  409. this.$range.val('2014-09-09');
  410. this.bv.validate();
  411. expect(this.bv.isValidField('range')).toBeTruthy();
  412. this.bv.resetForm();
  413. this.$range.val('02014-003-031'); // year, month or day prefixed by 0 not allowed
  414. this.bv.validate();
  415. expect(this.bv.isValidField('range')).toEqual(false);
  416. this.bv.resetForm();
  417. this.$range.val('2009-12-31');
  418. this.bv.validate();
  419. expect(this.bv.isValidField('range')).toEqual(false);
  420. this.bv.resetForm();
  421. this.$range.val('2015-01-01');
  422. this.bv.validate();
  423. expect(this.bv.isValidField('range')).toEqual(false);
  424. });
  425. it('range format DD/MM/YYYY', function() {
  426. this.bv.updateOption('range', 'date', 'format', 'DD/MM/YYYY');
  427. this.bv.updateOption('range', 'date', 'min', '10/09/2010');
  428. this.bv.updateOption('range', 'date', 'max', '10/09/2014');
  429. this.$range.val('11/11/2011');
  430. this.bv.validate();
  431. expect(this.bv.isValidField('range')).toBeTruthy();
  432. this.bv.resetForm();
  433. this.$range.val('17/08/2014');
  434. this.bv.validate();
  435. expect(this.bv.isValidField('range')).toBeTruthy();
  436. this.bv.resetForm();
  437. this.$range.val('031/012/02013'); // year, month or day prefixed by 0 not allowed
  438. this.bv.validate();
  439. expect(this.bv.isValidField('range')).toEqual(false);
  440. this.bv.resetForm();
  441. this.$range.val('31/01/2010');
  442. this.bv.validate();
  443. expect(this.bv.isValidField('range')).toEqual(false);
  444. this.bv.resetForm();
  445. this.$range.val('25/03/2015');
  446. this.bv.validate();
  447. expect(this.bv.isValidField('range')).toEqual(false);
  448. });
  449. it('range format YYYY-MM-DD h:m:s', function() {
  450. this.bv.updateOption('range', 'date', 'format', 'YYYY-MM-DD h:m:s');
  451. this.bv.updateOption('range', 'date', 'min', '2010-05-15 22:00:00');
  452. this.bv.updateOption('range', 'date', 'max', '2015-05-15 22:00:00');
  453. this.$range.val('2012-07-17 01:00:01');
  454. this.bv.validate();
  455. expect(this.bv.isValidField('range')).toBeTruthy();
  456. this.bv.resetForm();
  457. this.$range.val('2013-08-17 12:00:00');
  458. this.bv.validate();
  459. expect(this.bv.isValidField('range')).toBeTruthy();
  460. this.bv.resetForm();
  461. this.$range.val('2011-06-19 001:001:001'); // hours, minutes or seconds prefixed by 0 not allowed
  462. this.bv.validate();
  463. expect(this.bv.isValidField('range')).toEqual(false);
  464. this.bv.resetForm();
  465. this.$range.val('2008-11-27 23:15:00');
  466. this.bv.validate();
  467. expect(this.bv.isValidField('range')).toEqual(false);
  468. this.bv.resetForm();
  469. this.$range.val('2015-05-15 22:00:01');
  470. this.bv.validate();
  471. expect(this.bv.isValidField('range')).toEqual(false);
  472. });
  473. // dynamic min option
  474. it('dynamic min: name of field', function() {
  475. this.$minDate.attr('data-bv-date-min', 'date');
  476. this.bv.destroy();
  477. this.bv = $('#dateForm').bootstrapValidator().data('bootstrapValidator');
  478. this.bv.updateOption('minDate', 'date', 'format', 'YYYY/MM/DD');
  479. this.$date.val('2014/09/08');
  480. this.$minDate.val('2014/09/09');
  481. this.bv.validate();
  482. expect(this.bv.isValidField('minDate')).toBeTruthy();
  483. this.bv.resetForm();
  484. this.$date.val('2014/09/08');
  485. this.$minDate.val('2014/08/17');
  486. this.bv.validate();
  487. expect(this.bv.isValidField('minDate')).toBeFalsy();
  488. });
  489. it('dynamic min: callback declarative function', function() {
  490. this.$minDate.attr('data-bv-date-min', 'getDate');
  491. this.bv.destroy();
  492. this.bv = $('#dateForm').bootstrapValidator().data('bootstrapValidator');
  493. this.bv.updateOption('minDate', 'date', 'format', 'YYYY/MM/DD');
  494. this.$date.val('2014/09/08');
  495. this.$minDate.val('2014/09/09');
  496. this.bv.validate();
  497. expect(this.bv.isValidField('minDate')).toBeTruthy();
  498. this.bv.resetForm();
  499. this.$date.val('2014/10/01');
  500. this.$minDate.val('2014/08/17');
  501. this.bv.validate();
  502. expect(this.bv.isValidField('minDate')).toBeFalsy();
  503. });
  504. it('dynamic min: callback declarative function()', function() {
  505. this.$minDate.attr('data-bv-date-min', 'getDate()');
  506. this.bv.destroy();
  507. this.bv = $('#dateForm').bootstrapValidator().data('bootstrapValidator');
  508. this.bv.updateOption('minDate', 'date', 'format', 'YYYY/MM/DD');
  509. this.$date.val('2014/09/08');
  510. this.$minDate.val('2014/09/09');
  511. this.bv.validate();
  512. expect(this.bv.isValidField('minDate')).toBeTruthy();
  513. this.bv.resetForm();
  514. this.$date.val('2014/10/01');
  515. this.$minDate.val('2014/08/17');
  516. this.bv.validate();
  517. expect(this.bv.isValidField('minDate')).toBeFalsy();
  518. });
  519. it('dynamic min: callback declarative A.B.C', function() {
  520. this.$minDate.attr('data-bv-date-min', 'TestSuite.Date.getDate');
  521. this.bv.destroy();
  522. this.bv = $('#dateForm').bootstrapValidator().data('bootstrapValidator');
  523. this.bv.updateOption('minDate', 'date', 'format', 'YYYY/MM/DD');
  524. this.$date.val('2014/09/08');
  525. this.$minDate.val('2014/09/09');
  526. this.bv.validate();
  527. expect(this.bv.isValidField('minDate')).toBeTruthy();
  528. this.bv.resetForm();
  529. this.$date.val('2014/10/01');
  530. this.$minDate.val('2014/08/17');
  531. this.bv.validate();
  532. expect(this.bv.isValidField('minDate')).toBeFalsy();
  533. });
  534. it('dynamic min: callback declarative A.B.C()', function() {
  535. this.$minDate.attr('data-bv-date-min', 'TestSuite.Date.getDate()');
  536. this.bv.destroy();
  537. this.bv = $('#dateForm').bootstrapValidator().data('bootstrapValidator');
  538. this.bv.updateOption('minDate', 'date', 'format', 'YYYY/MM/DD');
  539. this.$date.val('2014/09/08');
  540. this.$minDate.val('2014/09/09');
  541. this.bv.validate();
  542. expect(this.bv.isValidField('minDate')).toBeTruthy();
  543. this.bv.resetForm();
  544. this.$date.val('2014/10/01');
  545. this.$minDate.val('2014/08/17');
  546. this.bv.validate();
  547. expect(this.bv.isValidField('minDate')).toBeFalsy();
  548. });
  549. it('dynamic min: callback programmatically', function() {
  550. this.$minDate.removeAttr('data-bv-date-min');
  551. this.bv.destroy();
  552. this.bv = $('#dateForm')
  553. .bootstrapValidator({
  554. fields: {
  555. minDate: {
  556. validators: {
  557. date: {
  558. min: function(value, validator, $field) {
  559. return getDate(value, validator, $field);
  560. }
  561. }
  562. }
  563. }
  564. }
  565. })
  566. .data('bootstrapValidator');
  567. this.bv.updateOption('minDate', 'date', 'format', 'YYYY/MM/DD');
  568. this.$date.val('2014/09/08');
  569. this.$minDate.val('2014/09/09');
  570. this.bv.validate();
  571. expect(this.bv.isValidField('minDate')).toBeTruthy();
  572. this.bv.resetForm();
  573. this.$date.val('2014/10/01');
  574. this.$minDate.val('2014/08/17');
  575. this.bv.validate();
  576. expect(this.bv.isValidField('minDate')).toBeFalsy();
  577. });
  578. // dynamic max option
  579. it('dynamic max: name of field', function() {
  580. this.$maxDate.attr('data-bv-date-max', 'date');
  581. this.bv.destroy();
  582. this.bv = $('#dateForm').bootstrapValidator().data('bootstrapValidator');
  583. this.bv.updateOption('maxDate', 'date', 'format', 'YYYY/MM/DD');
  584. this.$date.val('2015/01/01');
  585. this.$maxDate.val('2014/09/09');
  586. this.bv.validate();
  587. expect(this.bv.isValidField('maxDate')).toBeTruthy();
  588. this.bv.resetForm();
  589. this.$date.val('2014/01/01');
  590. this.$maxDate.val('2014/08/17');
  591. this.bv.validate();
  592. expect(this.bv.isValidField('maxDate')).toBeFalsy();
  593. });
  594. it('dynamic max: callback declarative function', function() {
  595. this.$maxDate.attr('data-bv-date-max', 'getDate');
  596. this.bv.destroy();
  597. this.bv = $('#dateForm').bootstrapValidator().data('bootstrapValidator');
  598. this.bv.updateOption('maxDate', 'date', 'format', 'YYYY/MM/DD');
  599. this.$date.val('2015/01/01');
  600. this.$maxDate.val('2014/09/09');
  601. this.bv.validate();
  602. expect(this.bv.isValidField('maxDate')).toBeTruthy();
  603. this.bv.resetForm();
  604. this.$date.val('2014/01/01');
  605. this.$maxDate.val('2014/08/17');
  606. this.bv.validate();
  607. expect(this.bv.isValidField('maxDate')).toBeFalsy();
  608. });
  609. it('dynamic max: callback declarative function()', function() {
  610. this.$maxDate.attr('data-bv-date-max', 'getDate()');
  611. this.bv.destroy();
  612. this.bv = $('#dateForm').bootstrapValidator().data('bootstrapValidator');
  613. this.bv.updateOption('maxDate', 'date', 'format', 'YYYY/MM/DD');
  614. this.$date.val('2015/01/01');
  615. this.$maxDate.val('2014/09/09');
  616. this.bv.validate();
  617. expect(this.bv.isValidField('maxDate')).toBeTruthy();
  618. this.bv.resetForm();
  619. this.$date.val('2014/01/01');
  620. this.$maxDate.val('2014/08/17');
  621. this.bv.validate();
  622. expect(this.bv.isValidField('maxDate')).toBeFalsy();
  623. });
  624. it('dynamic max: callback declarative A.B.C', function() {
  625. this.$maxDate.attr('data-bv-date-max', 'TestSuite.Date.getDate');
  626. this.bv.destroy();
  627. this.bv = $('#dateForm').bootstrapValidator().data('bootstrapValidator');
  628. this.bv.updateOption('maxDate', 'date', 'format', 'YYYY/MM/DD');
  629. this.$date.val('2015/01/01');
  630. this.$maxDate.val('2014/09/09');
  631. this.bv.validate();
  632. expect(this.bv.isValidField('maxDate')).toBeTruthy();
  633. this.bv.resetForm();
  634. this.$date.val('2014/01/01');
  635. this.$maxDate.val('2014/08/17');
  636. this.bv.validate();
  637. expect(this.bv.isValidField('maxDate')).toBeFalsy();
  638. });
  639. it('dynamic max: callback declarative A.B.C()', function() {
  640. this.$maxDate.attr('data-bv-date-max', 'TestSuite.Date.getDate()');
  641. this.bv.destroy();
  642. this.bv = $('#dateForm').bootstrapValidator().data('bootstrapValidator');
  643. this.bv.updateOption('maxDate', 'date', 'format', 'YYYY/MM/DD');
  644. this.$date.val('2015/01/01');
  645. this.$maxDate.val('2014/09/09');
  646. this.bv.validate();
  647. expect(this.bv.isValidField('maxDate')).toBeTruthy();
  648. this.bv.resetForm();
  649. this.$date.val('2014/01/01');
  650. this.$maxDate.val('2014/08/17');
  651. this.bv.validate();
  652. expect(this.bv.isValidField('maxDate')).toBeFalsy();
  653. });
  654. it('dynamic max: callback programmatically', function() {
  655. this.$maxDate.removeAttr('data-bv-date-max');
  656. this.bv.destroy();
  657. this.bv = $('#dateForm')
  658. .bootstrapValidator({
  659. fields: {
  660. maxDate: {
  661. validators: {
  662. date: {
  663. max: function(value, validator, $field) {
  664. return getDate(value, validator, $field);
  665. }
  666. }
  667. }
  668. }
  669. }
  670. })
  671. .data('bootstrapValidator');
  672. this.bv.updateOption('maxDate', 'date', 'format', 'YYYY/MM/DD');
  673. this.$date.val('2015/01/01');
  674. this.$maxDate.val('2014/09/09');
  675. this.bv.validate();
  676. expect(this.bv.isValidField('maxDate')).toBeTruthy();
  677. this.bv.resetForm();
  678. this.$date.val('2014/01/01');
  679. this.$maxDate.val('2014/08/17');
  680. this.bv.validate();
  681. expect(this.bv.isValidField('maxDate')).toBeFalsy();
  682. });
  683. });