dateValidator.spec.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372
  1. describe('dateValidator', () => {
  2. var id = 'testContainer';
  3. beforeEach(function() {
  4. this.$container = $(`<div id="${id}"></div>`).appendTo('body');
  5. });
  6. afterEach(function() {
  7. if (this.$container) {
  8. destroy();
  9. this.$container.remove();
  10. }
  11. });
  12. var arrayOfObjects = function() {
  13. return [
  14. {date: '01/01/2015', name: 'Ted', lastName: 'Right'},
  15. {date: '01/01/15', name: 'Frank', lastName: 'Honest'},
  16. {date: '41/01/2015', name: 'Joan', lastName: 'Well'},
  17. {date: '01/51/2015', name: 'Sid', lastName: 'Strong'}
  18. ];
  19. };
  20. it('should validate an empty string (default behavior)', (done) => {
  21. var onAfterValidate = jasmine.createSpy('onAfterValidate');
  22. handsontable({
  23. data: arrayOfObjects(),
  24. columns: [
  25. {data: 'date', type: 'date'},
  26. {data: 'name'},
  27. {data: 'lastName'}
  28. ],
  29. afterValidate: onAfterValidate
  30. });
  31. setDataAtCell(0, 0, '');
  32. setTimeout(() => {
  33. expect(onAfterValidate).toHaveBeenCalledWith(true, '', 0, 'date', undefined, undefined);
  34. done();
  35. }, 100);
  36. });
  37. it('should rewrite an ISO 8601 string to the correct format if a date-string in different format is provided', (done) => {
  38. var onAfterValidate = jasmine.createSpy('onAfterValidate');
  39. handsontable({
  40. data: arrayOfObjects(),
  41. columns: [
  42. {data: 'date', type: 'date', dateFormat: 'MM/DD/YYYY', correctFormat: true},
  43. {data: 'lastName'}
  44. ],
  45. afterValidate: onAfterValidate
  46. });
  47. setDataAtCell(1, 0, '2016-03-18');
  48. setTimeout(() => {
  49. expect(onAfterValidate).toHaveBeenCalledWith(true, '2016-03-18', 1, 'date', undefined, undefined);
  50. }, 100);
  51. setTimeout(() => {
  52. expect(getDataAtCell(1, 0)).toEqual('03/18/2016');
  53. done();
  54. }, 130);
  55. });
  56. it('should not positively validate a non-date string', (done) => {
  57. var onAfterValidate = jasmine.createSpy('onAfterValidate');
  58. handsontable({
  59. data: arrayOfObjects(),
  60. columns: [
  61. {data: 'date', type: 'date'},
  62. {data: 'name'},
  63. {data: 'lastName'}
  64. ],
  65. afterValidate: onAfterValidate
  66. });
  67. setDataAtCell(0, 0, 'wat');
  68. setTimeout(() => {
  69. expect(onAfterValidate).toHaveBeenCalledWith(false, 'wat', 0, 'date', undefined, undefined);
  70. done();
  71. }, 100);
  72. });
  73. it('should not positively validate a incorrect date string', (done) => {
  74. var onAfterValidate = jasmine.createSpy('onAfterValidate');
  75. handsontable({
  76. data: arrayOfObjects(),
  77. columns: [
  78. {data: 'date', type: 'date'},
  79. {data: 'name'},
  80. {data: 'lastName'}
  81. ],
  82. afterValidate: onAfterValidate
  83. });
  84. setDataAtCell(0, 0, '33/01/2014');
  85. setTimeout(() => {
  86. expect(onAfterValidate).toHaveBeenCalledWith(false, '33/01/2014', 0, 'date', undefined, undefined);
  87. done();
  88. }, 100);
  89. });
  90. it('should not positively validate a date string in wrong format', (done) => {
  91. var onAfterValidate = jasmine.createSpy('onAfterValidate');
  92. handsontable({
  93. data: arrayOfObjects(),
  94. columns: [
  95. {data: 'date', type: 'date'},
  96. {data: 'name'},
  97. {data: 'lastName'}
  98. ],
  99. afterValidate: onAfterValidate
  100. });
  101. setDataAtCell(1, 0, '01/01/15');
  102. setTimeout(() => {
  103. expect(onAfterValidate).toHaveBeenCalledWith(false, '01/01/15', 1, 'date', undefined, undefined);
  104. done();
  105. }, 100);
  106. });
  107. it('should not positively validate a date string in wrong format (if custom format is provided)', (done) => {
  108. var onAfterValidate = jasmine.createSpy('onAfterValidate');
  109. handsontable({
  110. data: arrayOfObjects(),
  111. columns: [
  112. {data: 'date', type: 'date', dateFormat: 'DD/MM/YY'},
  113. {data: 'name'},
  114. {data: 'lastName'}
  115. ],
  116. afterValidate: onAfterValidate
  117. });
  118. setDataAtCell(1, 0, '01/01/2015');
  119. setTimeout(() => {
  120. expect(onAfterValidate).toHaveBeenCalledWith(false, '01/01/2015', 1, 'date', undefined, undefined);
  121. done();
  122. }, 100);
  123. });
  124. it('should positively validate a date string in correct format', (done) => {
  125. var onAfterValidate = jasmine.createSpy('onAfterValidate');
  126. handsontable({
  127. data: arrayOfObjects(),
  128. columns: [
  129. {data: 'date', type: 'date'},
  130. {data: 'name'},
  131. {data: 'lastName'}
  132. ],
  133. afterValidate: onAfterValidate
  134. });
  135. setDataAtCell(1, 0, '01/01/2015');
  136. setTimeout(() => {
  137. expect(onAfterValidate).toHaveBeenCalledWith(true, '01/01/2015', 1, 'date', undefined, undefined);
  138. done();
  139. }, 100);
  140. });
  141. it('should positively validate a date string in correct format (if custom format is provided)', (done) => {
  142. var onAfterValidate = jasmine.createSpy('onAfterValidate');
  143. handsontable({
  144. data: arrayOfObjects(),
  145. columns: [
  146. {data: 'date', type: 'date', dateFormat: 'DD/MM/YY'},
  147. {data: 'name'},
  148. {data: 'lastName'}
  149. ],
  150. afterValidate: onAfterValidate
  151. });
  152. setDataAtCell(1, 0, '23/03/15');
  153. setTimeout(() => {
  154. expect(onAfterValidate).toHaveBeenCalledWith(true, '23/03/15', 1, 'date', undefined, undefined);
  155. done();
  156. }, 100);
  157. });
  158. describe('allowEmpty', () => {
  159. it('should not validate an empty string when allowEmpty is set as `false`', (done) => {
  160. var onAfterValidate = jasmine.createSpy('onAfterValidate');
  161. handsontable({
  162. data: arrayOfObjects(),
  163. columns: [
  164. {data: 'date', type: 'date', dateFormat: 'DD/MM/YY', allowEmpty: false},
  165. {data: 'name'},
  166. {data: 'lastName'}
  167. ],
  168. afterValidate: onAfterValidate
  169. });
  170. setDataAtCell(1, 0, '');
  171. setTimeout(() => {
  172. expect(onAfterValidate).toHaveBeenCalledWith(false, '', 1, 'date', undefined, undefined);
  173. done();
  174. }, 100);
  175. });
  176. it('should not validate `null` when allowEmpty is set as `false`', (done) => {
  177. var onAfterValidate = jasmine.createSpy('onAfterValidate');
  178. handsontable({
  179. data: arrayOfObjects(),
  180. columns: [
  181. {data: 'date', type: 'date', dateFormat: 'DD/MM/YY', allowEmpty: false},
  182. {data: 'name'},
  183. {data: 'lastName'}
  184. ],
  185. afterValidate: onAfterValidate
  186. });
  187. setDataAtCell(1, 0, null);
  188. setTimeout(() => {
  189. expect(onAfterValidate).toHaveBeenCalledWith(false, null, 1, 'date', undefined, undefined);
  190. done();
  191. }, 100);
  192. });
  193. it('should not validate `undefined` when allowEmpty is set as `false`', (done) => {
  194. var onAfterValidate = jasmine.createSpy('onAfterValidate');
  195. handsontable({
  196. data: arrayOfObjects(),
  197. columns: [
  198. {data: 'date', type: 'date', dateFormat: 'DD/MM/YY', allowEmpty: false},
  199. {data: 'name'},
  200. {data: 'lastName'}
  201. ],
  202. afterValidate: onAfterValidate
  203. });
  204. setDataAtCell(1, 0, void 0);
  205. setTimeout(() => {
  206. expect(onAfterValidate).toHaveBeenCalledWith(false, void 0, 1, 'date', undefined, undefined);
  207. done();
  208. }, 100);
  209. });
  210. });
  211. describe('correctFormat', () => {
  212. it('should not make any changes to entered string if correctFormat is not set', (done) => {
  213. var onAfterValidate = jasmine.createSpy('onAfterValidate');
  214. handsontable({
  215. data: arrayOfObjects(),
  216. columns: [
  217. {data: 'date', type: 'date', dateFormat: 'MM/DD/YY'},
  218. {data: 'name'},
  219. {data: 'lastName'}
  220. ],
  221. afterValidate: onAfterValidate
  222. });
  223. setDataAtCell(1, 0, '11/23/2013');
  224. setTimeout(() => {
  225. expect(onAfterValidate).toHaveBeenCalledWith(false, '11/23/2013', 1, 'date', undefined, undefined);
  226. done();
  227. }, 100);
  228. });
  229. it('should not make any changes to entered string if correctFormat is set to false', (done) => {
  230. var onAfterValidate = jasmine.createSpy('onAfterValidate');
  231. handsontable({
  232. data: arrayOfObjects(),
  233. columns: [
  234. {data: 'date', type: 'date', dateFormat: 'MM/DD/YY', correctFormat: false},
  235. {data: 'name'},
  236. {data: 'lastName'}
  237. ],
  238. afterValidate: onAfterValidate
  239. });
  240. setDataAtCell(1, 0, '11/23/2013');
  241. setTimeout(() => {
  242. expect(onAfterValidate).toHaveBeenCalledWith(false, '11/23/2013', 1, 'date', undefined, undefined);
  243. done();
  244. }, 100);
  245. });
  246. it('should rewrite the string to the correct format if a date-string in different format is provided', (done) => {
  247. var onAfterValidate = jasmine.createSpy('onAfterValidate');
  248. handsontable({
  249. data: arrayOfObjects(),
  250. columns: [
  251. {data: 'date', type: 'date', dateFormat: 'MM/DD/YYYY', correctFormat: true},
  252. {data: 'lastName'}
  253. ],
  254. afterValidate: onAfterValidate
  255. });
  256. setDataAtCell(1, 0, '1/10/15');
  257. setTimeout(() => {
  258. expect(onAfterValidate).toHaveBeenCalledWith(true, '1/10/15', 1, 'date', undefined, undefined);
  259. }, 100);
  260. setTimeout(() => {
  261. expect(getDataAtCell(1, 0)).toEqual('01/10/2015');
  262. done();
  263. }, 130);
  264. });
  265. it('should rewrite the string to the correct format if a date-string in different format is provided (for non-default format)', (done) => {
  266. var onAfterValidate = jasmine.createSpy('onAfterValidate');
  267. handsontable({
  268. data: arrayOfObjects(),
  269. columns: [
  270. {data: 'date', type: 'date', dateFormat: 'DD.MM.YYYY', correctFormat: true},
  271. {data: 'lastName'}
  272. ],
  273. afterValidate: onAfterValidate
  274. });
  275. setDataAtCell(1, 0, '5.3.2016');
  276. setTimeout(() => {
  277. expect(onAfterValidate).toHaveBeenCalledWith(true, '5.3.2016', 1, 'date', undefined, undefined);
  278. }, 100);
  279. setTimeout(() => {
  280. expect(getDataAtCell(1, 0)).toEqual('05.03.2016');
  281. done();
  282. }, 130);
  283. });
  284. it('should not try to correct format of non-date strings', (done) => {
  285. var onAfterValidate = jasmine.createSpy('onAfterValidate');
  286. handsontable({
  287. data: arrayOfObjects(),
  288. columns: [
  289. {data: 'date', type: 'date', dateFormat: 'DD/MM/YY', correctFormat: true},
  290. {data: 'name'},
  291. {data: 'lastName'}
  292. ],
  293. afterValidate: onAfterValidate
  294. });
  295. setDataAtCell(1, 0, 'test non-date string');
  296. setTimeout(() => {
  297. expect(onAfterValidate).toHaveBeenCalledWith(false, 'test non-date string', 1, 'date', undefined, undefined);
  298. done();
  299. }, 100);
  300. });
  301. });
  302. });