utils.test.ts 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. import { describe, expect, it } from 'vitest';
  2. import { Errors } from '@/types';
  3. import { FieldEventUtils, mergeFeedbacks } from '@/core/utils';
  4. describe('core/utils', () => {
  5. describe('mergeFeedbacks', () => {
  6. it('should merge when some key in source is empty array', () => {
  7. const origin = {
  8. a: ['error'],
  9. b: ['error'],
  10. } as unknown as Errors;
  11. const source = {
  12. a: [],
  13. } as unknown as Errors;
  14. const result = mergeFeedbacks(origin, source);
  15. expect(result).toEqual({
  16. a: [],
  17. b: ['error'],
  18. });
  19. });
  20. it('should merge when some key in source is undefined', () => {
  21. const origin = {
  22. a: ['error'],
  23. b: ['error'],
  24. } as unknown as Errors;
  25. const source = {
  26. a: undefined,
  27. } as unknown as Errors;
  28. const result = mergeFeedbacks(origin, source);
  29. expect(result).toEqual({
  30. a: undefined,
  31. b: ['error'],
  32. });
  33. });
  34. });
  35. describe('FieldEventUtils.shouldTriggerFieldChangeEvent', () => {
  36. it('array append: should not trigger for all array child or grand child', () => {
  37. expect(
  38. FieldEventUtils.shouldTriggerFieldChangeEvent(
  39. {
  40. values: {},
  41. prevValues: {},
  42. name: 'arr',
  43. options: {
  44. action: 'array-append',
  45. indexes: [0],
  46. },
  47. },
  48. 'arr.0',
  49. ),
  50. ).toBe(false);
  51. expect(
  52. FieldEventUtils.shouldTriggerFieldChangeEvent(
  53. {
  54. values: {},
  55. prevValues: {},
  56. name: 'arr',
  57. options: {
  58. action: 'array-append',
  59. indexes: [0],
  60. },
  61. },
  62. 'arr.0.x',
  63. ),
  64. ).toBe(false);
  65. expect(
  66. FieldEventUtils.shouldTriggerFieldChangeEvent(
  67. {
  68. values: {},
  69. prevValues: {},
  70. name: 'arr',
  71. options: {
  72. action: 'array-append',
  73. indexes: [0],
  74. },
  75. },
  76. 'arr',
  77. ),
  78. ).toBe(true);
  79. expect(
  80. FieldEventUtils.shouldTriggerFieldChangeEvent(
  81. {
  82. values: {},
  83. prevValues: {},
  84. name: 'p.arr',
  85. options: {
  86. action: 'array-append',
  87. indexes: [0],
  88. },
  89. },
  90. 'p',
  91. ),
  92. ).toBe(true);
  93. expect(
  94. FieldEventUtils.shouldTriggerFieldChangeEvent(
  95. {
  96. values: {},
  97. prevValues: {},
  98. name: '',
  99. options: {
  100. action: 'array-append',
  101. indexes: [0],
  102. },
  103. },
  104. '0',
  105. ),
  106. ).toBe(false);
  107. });
  108. it('array splice: should not trigger for array child or grand child only when index < first spliced index', () => {
  109. expect(
  110. FieldEventUtils.shouldTriggerFieldChangeEvent(
  111. {
  112. values: {},
  113. prevValues: {},
  114. name: 'arr',
  115. options: {
  116. action: 'array-splice',
  117. indexes: [0],
  118. },
  119. },
  120. 'arr.0',
  121. ),
  122. ).toBe(true);
  123. expect(
  124. FieldEventUtils.shouldTriggerFieldChangeEvent(
  125. {
  126. values: {},
  127. prevValues: {},
  128. name: 'arr',
  129. options: {
  130. action: 'array-splice',
  131. indexes: [0],
  132. },
  133. },
  134. 'arr.1',
  135. ),
  136. ).toBe(true);
  137. expect(
  138. FieldEventUtils.shouldTriggerFieldChangeEvent(
  139. {
  140. values: {},
  141. prevValues: {},
  142. name: 'arr',
  143. options: {
  144. action: 'array-splice',
  145. indexes: [1],
  146. },
  147. },
  148. 'arr.0',
  149. ),
  150. ).toBe(false);
  151. expect(
  152. FieldEventUtils.shouldTriggerFieldChangeEvent(
  153. {
  154. values: {},
  155. prevValues: {},
  156. name: 'arr',
  157. options: {
  158. action: 'array-splice',
  159. indexes: [1, 2],
  160. },
  161. },
  162. 'arr.1',
  163. ),
  164. ).toBe(true);
  165. expect(
  166. FieldEventUtils.shouldTriggerFieldChangeEvent(
  167. {
  168. values: {},
  169. prevValues: {},
  170. name: 'arr',
  171. options: {
  172. action: 'array-splice',
  173. indexes: [4, 5],
  174. },
  175. },
  176. 'arr.1',
  177. ),
  178. ).toBe(false);
  179. expect(
  180. FieldEventUtils.shouldTriggerFieldChangeEvent(
  181. {
  182. values: {},
  183. prevValues: {},
  184. name: 'arr',
  185. options: {
  186. action: 'array-splice',
  187. indexes: [],
  188. },
  189. },
  190. 'arr.1',
  191. ),
  192. ).toBe(true);
  193. });
  194. });
  195. });