autocompleteValidator.spec.js 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. describe('autocompleteValidator', () => {
  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. describe('allowEmpty', () => {
  13. it('should validate empty cells positively (by default)', (done) => {
  14. var onAfterValidate = jasmine.createSpy('onAfterValidate');
  15. var hot = handsontable({
  16. data: [
  17. ['some', 'sample', 'data'],
  18. ],
  19. columns: [
  20. {
  21. type: 'autocomplete',
  22. source: ['some', 'sample', 'data'],
  23. strict: true
  24. },
  25. {
  26. type: 'autocomplete',
  27. source: ['some', 'sample', 'data'],
  28. strict: true
  29. },
  30. {
  31. type: 'autocomplete',
  32. source: ['some', 'sample', 'data'],
  33. strict: true
  34. }
  35. ],
  36. afterValidate: onAfterValidate
  37. });
  38. setDataAtCell(0, 0, '');
  39. setTimeout(() => {
  40. expect(onAfterValidate).toHaveBeenCalledWith(true, '', 0, 0, undefined, undefined);
  41. done();
  42. }, 100);
  43. });
  44. it('should validate empty cells positively when allowEmpty is set to true', (done) => {
  45. var onAfterValidate = jasmine.createSpy('onAfterValidate');
  46. var hot = handsontable({
  47. data: [
  48. ['some', 'sample', 'data'],
  49. ],
  50. columns: [
  51. {
  52. type: 'autocomplete',
  53. source: ['some', 'sample', 'data'],
  54. strict: true
  55. },
  56. {
  57. type: 'autocomplete',
  58. source: ['some', 'sample', 'data'],
  59. strict: true
  60. },
  61. {
  62. type: 'autocomplete',
  63. source: ['some', 'sample', 'data'],
  64. strict: true
  65. }
  66. ],
  67. allowEmpty: true,
  68. afterValidate: onAfterValidate
  69. });
  70. setDataAtCell(0, 0, '');
  71. setTimeout(() => {
  72. expect(onAfterValidate).toHaveBeenCalledWith(true, '', 0, 0, undefined, undefined);
  73. done();
  74. }, 100);
  75. });
  76. it('should validate empty cells negatively when allowEmpty is set to false', (done) => {
  77. var onAfterValidate = jasmine.createSpy('onAfterValidate');
  78. var hot = handsontable({
  79. data: [
  80. ['some', 'sample', 'data'],
  81. ],
  82. columns: [
  83. {
  84. type: 'autocomplete',
  85. source: ['some', 'sample', 'data'],
  86. strict: true
  87. },
  88. {
  89. type: 'autocomplete',
  90. source: ['some', 'sample', 'data'],
  91. strict: true
  92. },
  93. {
  94. type: 'autocomplete',
  95. source: ['some', 'sample', 'data'],
  96. strict: true
  97. }
  98. ],
  99. allowEmpty: false,
  100. afterValidate: onAfterValidate
  101. });
  102. setDataAtCell(0, 0, '');
  103. setTimeout(() => {
  104. expect(onAfterValidate).toHaveBeenCalledWith(false, '', 0, 0, undefined, undefined);
  105. done();
  106. }, 100);
  107. });
  108. it('should respect the allowEmpty property for a single column', (done) => {
  109. var onAfterValidate = jasmine.createSpy('onAfterValidate');
  110. var hot = handsontable({
  111. data: [
  112. ['some', 'sample', 'data']
  113. ],
  114. columns: [
  115. {
  116. type: 'autocomplete',
  117. source: ['some', 'sample', 'data'],
  118. strict: true
  119. },
  120. {
  121. type: 'autocomplete',
  122. source: ['some', 'sample', 'data'],
  123. strict: true,
  124. allowEmpty: false
  125. },
  126. {
  127. type: 'autocomplete',
  128. source: ['some', 'sample', 'data'],
  129. strict: true
  130. }
  131. ],
  132. afterValidate: onAfterValidate
  133. });
  134. setDataAtCell(0, 0, '');
  135. setDataAtCell(0, 1, '');
  136. setDataAtCell(0, 2, '');
  137. setTimeout(() => {
  138. expect(onAfterValidate.calls.argsFor(0)).toEqual([true, '', 0, 0, undefined, undefined]);
  139. expect(onAfterValidate.calls.argsFor(1)).toEqual([false, '', 0, 1, undefined, undefined]);
  140. expect(onAfterValidate.calls.argsFor(2)).toEqual([true, '', 0, 2, undefined, undefined]);
  141. done();
  142. }, 100);
  143. });
  144. it('should work for null and undefined values in cells', (done) => {
  145. var onAfterValidate = jasmine.createSpy('onAfterValidate');
  146. var hot = handsontable({
  147. data: [
  148. ['some', 'sample', 'data']
  149. ],
  150. columns: [
  151. {
  152. type: 'autocomplete',
  153. source: ['some', 'sample', 'data'],
  154. strict: true
  155. },
  156. {
  157. type: 'autocomplete',
  158. source: ['some', 'sample', 'data'],
  159. strict: true,
  160. },
  161. {
  162. type: 'autocomplete',
  163. source: ['some', 'sample', 'data'],
  164. strict: true
  165. }
  166. ],
  167. allowEmpty: false,
  168. afterValidate: onAfterValidate
  169. });
  170. setDataAtCell(0, 0, null);
  171. setDataAtCell(0, 1, void 0);
  172. setDataAtCell(0, 2, '');
  173. setTimeout(() => {
  174. expect(onAfterValidate.calls.argsFor(0)).toEqual([false, null, 0, 0, undefined, undefined]);
  175. expect(onAfterValidate.calls.argsFor(1)).toEqual([false, void 0, 0, 1, undefined, undefined]);
  176. expect(onAfterValidate.calls.argsFor(2)).toEqual([false, '', 0, 2, undefined, undefined]);
  177. done();
  178. }, 100);
  179. });
  180. });
  181. describe('strict mode', () => {
  182. it('sshould validate negatively when chars have different size', (done) => {
  183. var onAfterValidate = jasmine.createSpy('onAfterValidate');
  184. var hot = handsontable({
  185. data: [
  186. ['some', 'sample', 'data'],
  187. ],
  188. columns: [
  189. {
  190. type: 'autocomplete',
  191. source: ['some', 'sample', 'data'],
  192. strict: true
  193. }
  194. ],
  195. afterValidate: onAfterValidate
  196. });
  197. setDataAtCell(0, 0, 'Some');
  198. setTimeout(() => {
  199. expect(onAfterValidate).toHaveBeenCalledWith(false, 'Some', 0, 0, undefined, undefined);
  200. done();
  201. }, 100);
  202. });
  203. });
  204. });