@sankhyalabs/core 6.1.0-dev.4 → 6.1.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/.docs/classes/Change.md +11 -11
  2. package/.docs/classes/ColumnFilterManager.md +6 -6
  3. package/.docs/classes/DataUnit.md +157 -157
  4. package/.docs/classes/DataUnitLoaderUtils.md +6 -6
  5. package/.docs/classes/SelectionInfo.md +16 -16
  6. package/.docs/enumerations/ChangeOperation.md +4 -4
  7. package/.docs/enumerations/SelectionMode.md +2 -2
  8. package/.docs/functions/defaultDataLoader.md +1 -1
  9. package/.docs/interfaces/DUActionInterceptor.md +1 -1
  10. package/.docs/interfaces/PageRequest.md +3 -3
  11. package/.docs/interfaces/PaginationInfoBuilderParams.md +3 -3
  12. package/.docs/interfaces/QuickFilter.md +3 -3
  13. package/.docs/interfaces/Record.md +4 -4
  14. package/.docs/interfaces/SavedRecord.md +5 -5
  15. package/.docs/interfaces/WaitingChange.md +3 -3
  16. package/.docs/type-aliases/DataUnitEventOptions.md +1 -1
  17. package/dist/dataunit/DataUnit.d.ts +129 -9
  18. package/dist/dataunit/DataUnit.js +177 -87
  19. package/dist/dataunit/DataUnit.js.map +1 -1
  20. package/dist/dataunit/DataUnitHelper.d.ts +1 -2
  21. package/dist/dataunit/DataUnitHelper.js.map +1 -1
  22. package/dist/dataunit/formatting/PrettyFormatter.js +3 -5
  23. package/dist/dataunit/formatting/PrettyFormatter.js.map +1 -1
  24. package/dist/dataunit/loader/utils/dataUnitLoaderUtils.d.ts +1 -2
  25. package/dist/dataunit/loader/utils/dataUnitLoaderUtils.js.map +1 -1
  26. package/dist/dataunit/loading/LoadDataRequest.d.ts +1 -1
  27. package/dist/dataunit/loading/LoadDataResponse.d.ts +1 -1
  28. package/dist/dataunit/sorting/FieldComparator.d.ts +1 -1
  29. package/dist/dataunit/state/slice/AddedRecordsSlice.d.ts +1 -1
  30. package/dist/dataunit/state/slice/ChangesSlice.d.ts +1 -2
  31. package/dist/dataunit/state/slice/ChangesSlice.js +1 -2
  32. package/dist/dataunit/state/slice/ChangesSlice.js.map +1 -1
  33. package/dist/dataunit/state/slice/LoadingControlSlice.js.map +1 -1
  34. package/dist/dataunit/state/slice/RecordsSlice.d.ts +1 -1
  35. package/dist/dataunit/state/slice/RecordsSlice.js +1 -1
  36. package/dist/dataunit/state/slice/RecordsSlice.js.map +1 -1
  37. package/dist/dataunit/state/slice/SelectionSlice.d.ts +1 -2
  38. package/dist/dataunit/state/slice/SelectionSlice.js +1 -2
  39. package/dist/dataunit/state/slice/SelectionSlice.js.map +1 -1
  40. package/dist/dataunit/state/slice/SnapshotSlice.d.ts +1 -1
  41. package/dist/dataunit/state/slice/WaitingChangesSlice.d.ts +1 -1
  42. package/dist/index.d.ts +1 -4
  43. package/dist/index.js +1 -4
  44. package/dist/index.js.map +1 -1
  45. package/dist/utils/ColumnFilterManager.d.ts +1 -2
  46. package/dist/utils/ColumnFilterManager.js.map +1 -1
  47. package/dist/utils/SortingUtils.d.ts +1 -1
  48. package/package.json +1 -2
  49. package/reports/test-report.xml +557 -758
  50. package/src/dataunit/DataUnit.ts +397 -242
  51. package/src/dataunit/DataUnitHelper.ts +1 -2
  52. package/src/dataunit/formatting/PrettyFormatter.ts +5 -4
  53. package/src/dataunit/loader/utils/dataUnitLoaderUtils.ts +1 -2
  54. package/src/dataunit/loading/LoadDataRequest.ts +1 -1
  55. package/src/dataunit/loading/LoadDataResponse.ts +1 -1
  56. package/src/dataunit/sorting/FieldComparator.ts +1 -1
  57. package/src/dataunit/state/slice/AddedRecordsSlice.ts +1 -1
  58. package/src/dataunit/state/slice/ChangesSlice.ts +1 -2
  59. package/src/dataunit/state/slice/LoadingControlSlice.ts +2 -1
  60. package/src/dataunit/state/slice/RecordsSlice.ts +2 -3
  61. package/src/dataunit/state/slice/SelectionSlice.ts +1 -2
  62. package/src/dataunit/state/slice/SnapshotSlice.ts +1 -1
  63. package/src/dataunit/state/slice/WaitingChangesSlice.ts +1 -1
  64. package/src/dataunit/state/slice/test/RecordsSlice.spec.ts +1 -1
  65. package/src/dataunit/test/DataUnit.spec.ts +44 -0
  66. package/src/index.ts +1 -4
  67. package/src/utils/ColumnFilterManager.ts +1 -2
  68. package/src/utils/SortingUtils.ts +1 -1
  69. package/test/dataunit/formatting/PrettyFormatter.spec.ts +1 -1
  70. package/test/dataunit/loader/dataUnitInMemoryLoader.spec.ts +1 -2
  71. package/test/dataunit/loader/utils/dataUnitLoaderUtils.spec.ts +1 -1
  72. package/test/util/ColumnFilterManager.spec.ts +1 -2
  73. package/tsconfig.json +0 -1
  74. package/dist/dataunit/Changes.d.ts +0 -52
  75. package/dist/dataunit/Changes.js +0 -64
  76. package/dist/dataunit/Changes.js.map +0 -1
  77. package/dist/dataunit/SelectionInfo.d.ts +0 -16
  78. package/dist/dataunit/SelectionInfo.js +0 -39
  79. package/dist/dataunit/SelectionInfo.js.map +0 -1
  80. package/dist/dataunit/interfaces/dataUnit.d.ts +0 -61
  81. package/dist/dataunit/interfaces/dataUnit.js +0 -13
  82. package/dist/dataunit/interfaces/dataUnit.js.map +0 -1
  83. package/src/dataunit/Changes.ts +0 -77
  84. package/src/dataunit/SelectionInfo.ts +0 -55
  85. package/src/dataunit/interfaces/dataUnit.ts +0 -71
  86. package/test/dataunit/AccessParentsDataUnit.spec.ts +0 -69
  87. package/test/dataunit/Actions.spec.ts +0 -74
  88. package/test/dataunit/Change.spec.ts +0 -66
  89. package/test/dataunit/FieldManager.spec.ts +0 -286
  90. package/test/dataunit/FilterSortsLockersAndObservers.spec.ts +0 -339
  91. package/test/dataunit/InfoManager.spec.ts +0 -254
  92. package/test/dataunit/LoadDataAndMetadata.spec.ts +0 -269
  93. package/test/dataunit/RecodsSelection.spec.ts +0 -229
  94. package/test/dataunit/RecordsManager.spec.ts +0 -323
  95. package/test/dataunit/SavingData.spec.ts +0 -206
  96. package/test/dataunit/SelectionInfo.spec.ts +0 -143
  97. package/test/dataunit/loader/utils/createDataUnitMock.ts +0 -34
  98. package/test/dataunit/resources/metadata.ts +0 -39
  99. package/test/dataunit/resources/records.ts +0 -29
@@ -1,323 +0,0 @@
1
- import DataUnit from "../../src/dataunit/DataUnit";
2
- import { SelectionMode } from "../../src/dataunit/interfaces/dataUnit";
3
- import ErrorException from "../../src/exceptions/ErrorException";
4
- import { createDataUnitMock } from "./loader/utils/createDataUnitMock";
5
- import { recordsTest } from "./resources/records";
6
-
7
- describe('Records manager', () => {
8
- let dataUnit: DataUnit;
9
- let dataLoaderMock = jest.fn();
10
- let metadataLoaderMock = jest.fn();
11
-
12
- beforeEach(() => {
13
- jest.clearAllMocks();
14
- window.requestAnimationFrame = (functionCallback: Function) => functionCallback();
15
- ({ dataUnit, dataLoaderMock, metadataLoaderMock } = createDataUnitMock());
16
- });
17
-
18
- describe('removeRecords', () => {
19
- it('should remove first record', async () => {
20
- await dataUnit.loadData();
21
- await dataUnit.removeRecords(["test_1"], [recordsTest[0]]);
22
- expect(dataUnit.records).toStrictEqual(recordsTest.slice(1, recordsTest.length));
23
- });
24
-
25
- it('should remove first record with loader', async () => {
26
- dataUnit.removeLoader = jest.fn((_, ids) => new Promise<string[]>(resolve => resolve(ids)))
27
- await dataUnit.loadData();
28
- await dataUnit.removeRecords(["test_1"], [recordsTest[0]]);
29
- expect(dataUnit.records).toStrictEqual(recordsTest.slice(1, recordsTest.length));
30
- expect(dataUnit.removeLoader).toHaveBeenCalled();
31
- });
32
-
33
- it('should remove two record with loader', async () => {
34
- dataUnit.removeLoader = jest.fn((_, ids) => new Promise<string[]>(resolve => resolve(ids)))
35
- await dataUnit.loadData();
36
- await dataUnit.removeRecords(["test_2", "test_1"], [recordsTest[1], recordsTest[0]]);
37
- expect(dataUnit.records).toStrictEqual(recordsTest.slice(2, recordsTest.length));
38
- expect(dataUnit.removeLoader).toHaveBeenCalled();
39
- });
40
-
41
- it('should remove last', async () => {
42
- dataUnit.removeLoader = jest.fn((_, ids) => new Promise<string[]>(resolve => resolve(ids)))
43
- await dataUnit.loadData();
44
- await dataUnit.removeRecords(["test_5"], [recordsTest[4]]);
45
- expect(dataUnit.records).toStrictEqual(recordsTest.slice(0, 4));
46
- });
47
-
48
- it('should handle error dataLoader', async () => {
49
- dataUnit.removeLoader = jest.fn().mockRejectedValue(new Error("Error test"));
50
- const removeRecords = async () => await dataUnit.removeRecords(["test_1"], [recordsTest[0]]);
51
- await expect(removeRecords()).rejects.toBeInstanceOf(ErrorException);
52
- });
53
- });
54
-
55
- describe('removeSelectedRecords', () => {
56
- it('should remove first record', async () => {
57
- await dataUnit.loadData();
58
- dataUnit.selectFirst();
59
- const response = await dataUnit.removeSelectedRecords();
60
- expect(dataUnit.records).toStrictEqual(recordsTest.slice(1, recordsTest.length));
61
- expect(response).toStrictEqual(["test_1"]);
62
- });
63
-
64
- it('should remove last record', async () => {
65
- await dataUnit.loadData();
66
- dataUnit.selectLast();
67
- const response = await dataUnit.removeSelectedRecords();
68
- expect(dataUnit.records).toStrictEqual(recordsTest.slice(0, 4));
69
- expect(response).toStrictEqual(["test_5"]);
70
- });
71
-
72
- it('should ignore when not has a record selected', async () => {
73
- await dataUnit.loadData();
74
- const response = await dataUnit.removeSelectedRecords();
75
- expect(dataUnit.records).toStrictEqual(recordsTest);
76
- expect(response).toStrictEqual([]);
77
- });
78
-
79
- it('should throw error when all records is selected', async () => {
80
- await dataUnit.loadData();
81
- await dataUnit.setSelection(SelectionMode.ALL_RECORDS);
82
- const removeSelectedRecords = async () => await dataUnit.removeSelectedRecords();
83
- await expect(removeSelectedRecords()).rejects.toBeInstanceOf(Error);
84
- });
85
- });
86
-
87
- describe('copySelected', () => {
88
- it('should copy first record', async () => {
89
- await dataUnit.loadData();
90
- dataUnit.selectFirst();
91
- dataUnit.copySelected();
92
- expect(dataUnit.records.length).toBe(recordsTest.length + 1);
93
- expect(dataUnit.records[dataUnit.records.length - 1].__record__id__).toBe("NEW_0");
94
- expect(dataUnit.records[dataUnit.records.length - 1].__record__source__id__).toBe("test_1");
95
- expect(dataUnit.records[dataUnit.records.length - 1].__copy__).toBeTruthy();
96
- expect(dataUnit.records[dataUnit.records.length - 1]).toStrictEqual(expect.objectContaining({
97
- column_name_1: 'column_value_1',
98
- column_name_2: 1,
99
- }));
100
- });
101
-
102
- it('should copy last record', async () => {
103
- await dataUnit.loadData();
104
- dataUnit.selectLast();
105
- dataUnit.copySelected();
106
- expect(dataUnit.records[dataUnit.records.length - 1].__record__source__id__).toBe("test_5");
107
- });
108
-
109
- it('should ignore when not has a record selected', async () => {
110
- await dataUnit.loadData();
111
- dataUnit.copySelected();
112
- expect(dataUnit.records).toStrictEqual(recordsTest);
113
- });
114
-
115
- it('should ignore when not has records', async () => {
116
- dataUnit.copySelected();
117
- expect(dataUnit.records).toStrictEqual([]);
118
- });
119
-
120
- it('should throw error when all records is selected', async () => {
121
- await dataUnit.loadData();
122
- await dataUnit.setSelection(SelectionMode.ALL_RECORDS);
123
- expect(() => dataUnit.copySelected()).toThrow("Erro interno: Impossível copiar os registros selecionados pois a seleção atual é virtual.");
124
- });
125
- });
126
-
127
- describe('hasCopiedRecord', () => {
128
- it('should be true when has new records', async () => {
129
- await dataUnit.loadData();
130
- dataUnit.selectFirst();
131
- dataUnit.copySelected();
132
- const hasCopiedRecord = dataUnit.hasCopiedRecord();
133
- expect(hasCopiedRecord).toBeTruthy();
134
- });
135
-
136
- it('should be false when not have any record', async () => {
137
- dataUnit.copySelected();
138
- const hasCopiedRecord = dataUnit.hasCopiedRecord();
139
- expect(hasCopiedRecord).toBeFalsy();
140
- });
141
-
142
- it('should be false when not have any new record', async () => {
143
- await dataUnit.loadData();
144
- const hasCopiedRecord = dataUnit.hasCopiedRecord();
145
- expect(hasCopiedRecord).toBeFalsy();
146
- });
147
-
148
- it('should be false when has new value created', async () => {
149
- await dataUnit.addRecord();
150
- const hasCopiedRecord = dataUnit.hasCopiedRecord();
151
- expect(hasCopiedRecord).toBeFalsy();
152
- });
153
- });
154
-
155
- describe('reloadCurrentRecord', () => {
156
- it('should return empty array when not has recordLoader', async () => {
157
- await dataUnit.loadData();
158
- dataUnit.selectFirst();
159
- const response = await dataUnit.reloadCurrentRecord();
160
- expect(response).toStrictEqual([]);
161
- });
162
-
163
- it('should return empty array when not has dataLoader', async () => {
164
- dataUnit.dataLoader = undefined;
165
- dataUnit.recordLoader = jest.fn().mockResolvedValue({ records: recordsTest });
166
- const response = await dataUnit.reloadCurrentRecord();
167
- expect(response).toStrictEqual([]);
168
- });
169
-
170
- it('should call dataLoader to fech records', async () => {
171
- await dataUnit.loadData();
172
- dataUnit.selectFirst();
173
- const recordLoader = jest.fn().mockResolvedValue(recordsTest);
174
- dataUnit.recordLoader = recordLoader;
175
-
176
- const response = await dataUnit.reloadCurrentRecord();
177
- expect(response).toStrictEqual(recordsTest);
178
- expect(recordLoader).toHaveBeenCalledWith(dataUnit, ["test_1"]);
179
- });
180
-
181
- it('should handle error recordLoader', async () => {
182
- await dataUnit.loadData();
183
- dataUnit.selectFirst();
184
- const recordLoader = jest.fn().mockRejectedValue(new Error("Error test"));
185
- dataUnit.recordLoader = recordLoader;
186
-
187
- const reloadCurrentRecord = () => dataUnit.reloadCurrentRecord();
188
- await expect(reloadCurrentRecord).rejects.toBeInstanceOf(ErrorException);
189
- });
190
- });
191
-
192
- describe('getModifiedRecords', () => {
193
- it('should return record that has been modified', async () => {
194
- await dataUnit.loadData();
195
- dataUnit.selectFirst();
196
- dataUnit.setFieldValue('column_name_1', 'new_value');
197
- const response = dataUnit.getModifiedRecords();
198
- expect(response).toStrictEqual([{ ...recordsTest[0], column_name_1: 'new_value' }]);
199
- });
200
-
201
- it('should return empty when not has any record modified', async () => {
202
- await dataUnit.loadData();
203
- const response = dataUnit.getModifiedRecords();
204
- expect(response).toStrictEqual([]);
205
- });
206
- });
207
-
208
- describe('getAddedRecords', () => {
209
- it('should return the new record has been created', async () => {
210
- await dataUnit.loadData();
211
- await dataUnit.addRecord();
212
- const response = dataUnit.getAddedRecords();
213
- expect(response).toStrictEqual([{ "__record__id__": "NEW_0", }]);
214
- });
215
-
216
- it('should return undefined when not has any new record', async () => {
217
- await dataUnit.loadData();
218
- const response = dataUnit.getAddedRecords();
219
- expect(response).toBeUndefined();
220
- });
221
- });
222
-
223
- describe('getLastLoadRequest', () => {
224
- it('should return a empty request', async () => {
225
- await dataUnit.loadData();
226
- const response = dataUnit.getLastLoadRequest();
227
- expect(response).toStrictEqual({
228
- filters: undefined,
229
- keepSelection: undefined,
230
- parentRecordId: undefined,
231
- sort: [],
232
- source: undefined,
233
- });
234
- });
235
-
236
- it('should return a fully example request', async () => {
237
- const params = {
238
- checkLastFilter: true,
239
- keepSelection: true,
240
- quickFilter: {
241
- filter: {
242
- expression: 'test',
243
- name: 'test',
244
- params: []
245
- },
246
- term: 'test',
247
- },
248
- selectFirstRecord: true,
249
- source: 'test'
250
- }
251
- await dataUnit.loadDataWithParams(params);
252
- const response = dataUnit.getLastLoadRequest();
253
- expect(response).toStrictEqual({
254
- filters: [params.quickFilter.filter],
255
- keepSelection: true,
256
- quickFilter: params.quickFilter,
257
- parentRecordId: undefined,
258
- sort: [],
259
- source: 'test'
260
- });
261
- });
262
- });
263
-
264
- describe('clearDataUnit', () => {
265
- it('should clean all records', async () => {
266
- await dataUnit.loadData();
267
- expect(dataUnit.records).toStrictEqual(recordsTest);
268
- dataUnit.clearDataUnit();
269
- expect(dataUnit.records).toStrictEqual([]);
270
- });
271
- });
272
-
273
- describe('cancelEdition', () => {
274
- it('should cancel edition', async () => {
275
- await dataUnit.loadData();
276
- dataUnit.selectFirst();
277
- dataUnit.setFieldValue('column_name_1', 'new_value');
278
- const response = await dataUnit.cancelEdition();
279
- expect(dataUnit.isDirty()).toBeFalsy();
280
- expect(response).toBeTruthy();
281
- });
282
-
283
- it('should cancel edition in child dataUnits', async () => {
284
- const parentDataUnit = new DataUnit();
285
- const childDataUnit = parentDataUnit.getChildDataunit('test');
286
- dataLoaderMock = jest.fn().mockResolvedValue({ records: recordsTest });
287
- childDataUnit.dataLoader = dataLoaderMock;
288
- parentDataUnit.dataLoader = dataLoaderMock;
289
- await childDataUnit.loadData();
290
- await parentDataUnit.loadData();
291
-
292
- childDataUnit.selectFirst();
293
- await childDataUnit.setFieldValue('column_name_1', 'new_value');
294
- await parentDataUnit.setFieldValue('column_name_1', 'new_value');
295
-
296
- const response = await parentDataUnit.cancelEdition();
297
- expect(childDataUnit.isDirty()).toBeFalsy();
298
- expect(parentDataUnit.isDirty()).toBeFalsy();
299
- expect(response).toBeTruthy();
300
- });
301
-
302
- it('should load data when cancel edition in child dataUnits and has a record selected', async () => {
303
- const parentDataUnit = new DataUnit();
304
- const childDataUnit = parentDataUnit.getChildDataunit('test');
305
- dataLoaderMock = jest.fn().mockResolvedValue({ records: recordsTest });
306
- childDataUnit.dataLoader = dataLoaderMock;
307
- parentDataUnit.dataLoader = dataLoaderMock;
308
- await childDataUnit.loadData();
309
- await parentDataUnit.loadData();
310
-
311
- parentDataUnit.selectFirst();
312
- childDataUnit.selectFirst();
313
- await childDataUnit.setFieldValue('column_name_1', 'new_value');
314
- await parentDataUnit.setFieldValue('column_name_1', 'new_value');
315
-
316
- const response = await parentDataUnit.cancelEdition();
317
- expect(childDataUnit.isDirty()).toBeFalsy();
318
- expect(parentDataUnit.isDirty()).toBeFalsy();
319
- expect(response).toBeTruthy();
320
- expect(dataLoaderMock).toHaveBeenCalled();
321
- });
322
- });
323
- });
@@ -1,206 +0,0 @@
1
- import { Change } from "../../src/dataunit/Changes";
2
- import DataUnit from "../../src/dataunit/DataUnit";
3
- import { DUActionInterceptor } from "../../src/dataunit/interfaces/dataUnit";
4
- import { Action, DataUnitAction } from "../../src/dataunit/state/action/DataUnitAction";
5
- import ErrorException from "../../src/exceptions/ErrorException";
6
- import ServiceCanceledException from "../../src/exceptions/ServiceCanceledException";
7
- import SilentException from "../../src/exceptions/SilentException";
8
- import WaitingChangeException from "../../src/exceptions/WaitingChangeException";
9
- import { createDataUnitMock } from "./loader/utils/createDataUnitMock";
10
- import { recordsTest } from "./resources/records";
11
-
12
- describe('Saving data', () => {
13
- let dataUnit: DataUnit;
14
-
15
- beforeEach(() => {
16
- jest.clearAllMocks();
17
- window.requestAnimationFrame = (functionCallback: Function) => functionCallback();
18
- ({ dataUnit } = createDataUnitMock());
19
- });
20
-
21
- describe('saveData', () => {
22
- it('should call saveLoader with a new record', async () => {
23
- const saveLoaderMock = jest.fn().mockResolvedValue(recordsTest);
24
- dataUnit.saveLoader = saveLoaderMock;
25
- await dataUnit.addRecord();
26
- await dataUnit.setFieldValue('column_name_1', 'new_value');
27
- await dataUnit.saveData();
28
- expect(saveLoaderMock).toHaveBeenCalledWith(
29
- dataUnit,
30
- expect.arrayContaining([
31
- expect.objectContaining({
32
- record: { "__record__id__": "NEW_0" },
33
- updatingFields: { "column_name_1": "new_value" },
34
- })
35
- ])
36
- );
37
- });
38
-
39
- it('should not call saveLoader when not has any data to saved', async () => {
40
- const saveLoaderMock = jest.fn().mockResolvedValue(recordsTest);
41
- dataUnit.saveLoader = saveLoaderMock;
42
- await dataUnit.saveData();
43
- expect(saveLoaderMock).not.toHaveBeenCalled();
44
- });
45
-
46
- it('should call interceptor dataSaved', async () => {
47
- const saveLoaderMock = jest.fn().mockResolvedValue(recordsTest);
48
- dataUnit.saveLoader = saveLoaderMock;
49
- const dataSaved = jest.fn();
50
- const interceptors: DUActionInterceptor = {
51
- interceptAction: (action) => {
52
- if (action.type === Action.DATA_SAVED) {
53
- dataSaved();
54
- }
55
- return action;
56
- }
57
- }
58
- dataUnit.addInterceptor(interceptors);
59
- await dataUnit.addRecord();
60
- await dataUnit.saveData();
61
- expect(dataSaved).toHaveBeenCalled();
62
- });
63
-
64
- it('should throw error waiting change when has a blocking promise', async () => {
65
- const saveLoaderMock = jest.fn().mockResolvedValue(recordsTest);
66
- dataUnit.saveLoader = saveLoaderMock;
67
- await dataUnit.addRecord();
68
- let resolvePromise: Function;
69
- dataUnit.startChange("column_name_1", {
70
- blocking: true,
71
- waitmessage: 'Waiting column change',
72
- promise: new Promise((resolve) => {
73
- resolvePromise = resolve;
74
- })
75
- });
76
- const saveData = () => dataUnit.saveData();
77
- await expect(saveData).rejects.toBeInstanceOf(WaitingChangeException);
78
- });
79
-
80
- it('should waiting change when not has blocking promises', async () => {
81
- const saveLoaderMock = jest.fn().mockResolvedValue(recordsTest);
82
- dataUnit.saveLoader = saveLoaderMock;
83
- let resolvePromise: () => void = () => { };
84
- await dataUnit.addRecord();
85
- dataUnit.startChange("column_name_1", {
86
- blocking: false,
87
- waitmessage: 'Waiting column change',
88
- promise: new Promise<void>((resolve) => {
89
- resolvePromise = resolve;
90
- }),
91
- });
92
- const promise = dataUnit.saveData();
93
- expect(saveLoaderMock).not.toHaveBeenCalled();
94
- resolvePromise();
95
- await promise;
96
- expect(saveLoaderMock).toHaveBeenCalled();
97
- });
98
-
99
- it('should just resolve promises when not has a saveLoader', async () => {
100
- dataUnit.saveLoader = undefined;
101
- await dataUnit.addRecord();
102
- dataUnit.startChange("column_name_1", {
103
- blocking: false,
104
- waitmessage: 'Waiting column change',
105
- promise: new Promise<void>((resolve) => {
106
- resolve();
107
- }),
108
- });
109
- const dataSaved = jest.fn();
110
- const interceptors: DUActionInterceptor = {
111
- interceptAction: (action) => {
112
- if (action.type === Action.DATA_SAVED) {
113
- dataSaved();
114
- }
115
- return action;
116
- }
117
- }
118
- dataUnit.addInterceptor(interceptors);
119
- await dataUnit.saveData();
120
- expect(dataSaved).not.toHaveBeenCalled();
121
- });
122
-
123
- it('should handle error saveLoader', async () => {
124
- const saveLoaderMock = jest.fn().mockRejectedValue("Error");
125
- dataUnit.saveLoader = saveLoaderMock;
126
- const dataSaved = jest.fn();
127
- const savingError = jest.fn();
128
- const interceptors: DUActionInterceptor = {
129
- interceptAction: (action) => {
130
- switch (action.type) {
131
- case Action.DATA_SAVED:
132
- dataSaved();
133
- break;
134
- case Action.SAVING_ERROR:
135
- savingError();
136
- break;
137
- }
138
- return action;
139
- }
140
- }
141
- dataUnit.addInterceptor(interceptors);
142
- await dataUnit.addRecord();
143
- const saveData = () => dataUnit.saveData();
144
- await expect(saveData).rejects.toBeInstanceOf(ErrorException);
145
- expect(dataSaved).not.toHaveBeenCalled();
146
- });
147
-
148
- it('should handle error ServiceCanceledException saveLoader', async () => {
149
- const saveLoaderMock = jest.fn().mockRejectedValue(new ServiceCanceledException("Caceled", "Test canceled"));
150
- dataUnit.saveLoader = saveLoaderMock;
151
- await dataUnit.addRecord();
152
- const response = await dataUnit.saveData();
153
- expect(response).toBeUndefined();
154
- });
155
-
156
- it('should handle error SilentException saveLoader', async () => {
157
- const saveLoaderMock = jest.fn().mockRejectedValue(new SilentException("Silent", "Test silent"));
158
- dataUnit.saveLoader = saveLoaderMock;
159
- await dataUnit.addRecord();
160
- const saveData = () => dataUnit.saveData();
161
- await expect(saveData).rejects.toBeInstanceOf(SilentException);
162
- });
163
-
164
- it('should dispatch action on child dataUnits', async () => {
165
- const dataUnitChild = dataUnit.getChildDataunit('test');
166
- dataUnitChild.addRecord();
167
- const savingData = jest.fn();
168
- const observer = (action: DataUnitAction) => {
169
- if (action.type === Action.SAVING_DATA) {
170
- savingData();
171
- }
172
- }
173
- dataUnitChild.subscribe(observer);
174
- await dataUnit.addRecord();
175
- dataUnit.saveData();
176
- expect(savingData).toHaveBeenCalled();
177
- });
178
- });
179
-
180
- describe('buildChangesToSaveFromChild', () => {
181
- it('should return changes on dataUnit childs', async () => {
182
- const parentDataUnit = new DataUnit();
183
- const childDataUnit = parentDataUnit.getChildDataunit('test');
184
- const changes: Change[] = [];
185
- childDataUnit.addRecord();
186
- await childDataUnit.setFieldValue('column_name_1', 'new_value');
187
- parentDataUnit.buildChangesToSaveFromChild(changes, parentDataUnit);
188
- expect(changes).toStrictEqual(
189
- expect.arrayContaining([
190
- expect.objectContaining({
191
- record: { "__record__id__": "NEW_0" },
192
- updatingFields: { "column_name_1": "new_value" },
193
- })
194
- ])
195
- );
196
- });
197
-
198
- it('should return empty when no has any change', async () => {
199
- const parentDataUnit = new DataUnit();
200
- parentDataUnit.getChildDataunit('test');
201
- const changes: Change[] = [];
202
- parentDataUnit.buildChangesToSaveFromChild(changes, parentDataUnit);
203
- expect(changes).toStrictEqual([]);
204
- });
205
- });
206
- });
@@ -1,143 +0,0 @@
1
- import { SelectionInfo } from "../../src/dataunit/SelectionInfo";
2
- import { Record, SelectionMode } from "../../src/dataunit/interfaces/dataUnit";
3
- import { DataType } from "../../src/dataunit/metadata/DataType";
4
- import { Filter, Sort, SortMode } from "../../src/dataunit/metadata/UnitMetadata";
5
- import { recordsTest } from "./resources/records";
6
-
7
- describe('SelectionInfo', () => {
8
- let selectionInfo: SelectionInfo;
9
- const filter: Filter = {
10
- name: 'test_filter',
11
- expression: 'test',
12
- };
13
- const sort: Sort = {
14
- field: 'column_name_1',
15
- dataType: DataType.TEXT,
16
- mode: SortMode.DESC,
17
- };
18
- beforeEach(() => {
19
- selectionInfo = new SelectionInfo(
20
- recordsTest,
21
- SelectionMode.SOME_RECORDS,
22
- 5,
23
- [filter],
24
- [sort]
25
- );
26
- });
27
-
28
- it('should return false when mode is some records', () => {
29
- const response = selectionInfo.isAllRecords();
30
- expect(response).toBeFalsy();
31
- });
32
-
33
- it('should return true when mode is all records', () => {
34
- selectionInfo = new SelectionInfo(
35
- recordsTest,
36
- SelectionMode.ALL_RECORDS,
37
- 5,
38
- [filter],
39
- [sort]
40
- );
41
- const response = selectionInfo.isAllRecords();
42
- expect(response).toBeTruthy();
43
- });
44
-
45
- it('should return false when records is not empty', () => {
46
- const response = selectionInfo.isEmpty();
47
- expect(response).toBeFalsy();
48
- });
49
-
50
- it('should return true when records is empty', () => {
51
- selectionInfo = new SelectionInfo(
52
- [],
53
- SelectionMode.ALL_RECORDS,
54
- 5,
55
- [filter],
56
- [sort]
57
- );
58
- const response = selectionInfo.isAllRecords();
59
- expect(response).toBeTruthy();
60
- });
61
-
62
- it('should return number of total when records is empty', () => {
63
- selectionInfo = new SelectionInfo(
64
- [],
65
- SelectionMode.ALL_RECORDS,
66
- 10,
67
- [filter],
68
- [sort]
69
- );
70
- const response = selectionInfo.length;
71
- expect(response).toBe(10);
72
- });
73
-
74
- it('should return 0 when records is empty and total is undefined ', () => {
75
- selectionInfo = new SelectionInfo(
76
- [],
77
- SelectionMode.ALL_RECORDS,
78
- undefined,
79
- [filter],
80
- [sort]
81
- );
82
- const response = selectionInfo.length;
83
- expect(response).toBe(0);
84
- });
85
-
86
- it('should return number of length of records when is not empty', () => {
87
- const response = selectionInfo.length;
88
- expect(response).toBe(5);
89
- });
90
-
91
- it('should return 0 when records is undefined and total is undefined', () => {
92
- selectionInfo = new SelectionInfo(
93
- undefined as unknown as Array<Record>,
94
- SelectionMode.SOME_RECORDS,
95
- undefined,
96
- [filter],
97
- [sort]
98
- );
99
- const response = selectionInfo.length;
100
- expect(response).toBe(0);
101
- });
102
-
103
- it('should return undefined when records is undefined', () => {
104
- selectionInfo = new SelectionInfo(
105
- undefined as unknown as Array<Record>,
106
- SelectionMode.SOME_RECORDS,
107
- undefined,
108
- [filter],
109
- [sort]
110
- );
111
- const response = selectionInfo.recordIds;
112
- expect(response).toBeUndefined();
113
- });
114
-
115
- it('should call getAllRecords', () => {
116
- selectionInfo = new SelectionInfo(
117
- [],
118
- SelectionMode.ALL_RECORDS,
119
- undefined,
120
- [filter],
121
- [sort]
122
- );
123
- selectionInfo.getAllRecords = jest.fn();
124
- const response = selectionInfo.records;
125
- expect(response).toBeUndefined();
126
- expect(selectionInfo.getAllRecords).toHaveBeenCalled();
127
- });
128
-
129
- it('should handle when getAllRecords is undefined', () => {
130
- selectionInfo = new SelectionInfo(
131
- [],
132
- SelectionMode.ALL_RECORDS,
133
- undefined,
134
- [filter],
135
- [sort]
136
- );
137
- try {
138
- selectionInfo.records;
139
- } catch (error) {
140
- expect(error).toBeInstanceOf(Error);
141
- }
142
- });
143
- });