@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.
- package/.docs/classes/Change.md +11 -11
- package/.docs/classes/ColumnFilterManager.md +6 -6
- package/.docs/classes/DataUnit.md +157 -157
- package/.docs/classes/DataUnitLoaderUtils.md +6 -6
- package/.docs/classes/SelectionInfo.md +16 -16
- package/.docs/enumerations/ChangeOperation.md +4 -4
- package/.docs/enumerations/SelectionMode.md +2 -2
- package/.docs/functions/defaultDataLoader.md +1 -1
- package/.docs/interfaces/DUActionInterceptor.md +1 -1
- package/.docs/interfaces/PageRequest.md +3 -3
- package/.docs/interfaces/PaginationInfoBuilderParams.md +3 -3
- package/.docs/interfaces/QuickFilter.md +3 -3
- package/.docs/interfaces/Record.md +4 -4
- package/.docs/interfaces/SavedRecord.md +5 -5
- package/.docs/interfaces/WaitingChange.md +3 -3
- package/.docs/type-aliases/DataUnitEventOptions.md +1 -1
- package/dist/dataunit/DataUnit.d.ts +129 -9
- package/dist/dataunit/DataUnit.js +177 -87
- package/dist/dataunit/DataUnit.js.map +1 -1
- package/dist/dataunit/DataUnitHelper.d.ts +1 -2
- package/dist/dataunit/DataUnitHelper.js.map +1 -1
- package/dist/dataunit/formatting/PrettyFormatter.js +3 -5
- package/dist/dataunit/formatting/PrettyFormatter.js.map +1 -1
- package/dist/dataunit/loader/utils/dataUnitLoaderUtils.d.ts +1 -2
- package/dist/dataunit/loader/utils/dataUnitLoaderUtils.js.map +1 -1
- package/dist/dataunit/loading/LoadDataRequest.d.ts +1 -1
- package/dist/dataunit/loading/LoadDataResponse.d.ts +1 -1
- package/dist/dataunit/sorting/FieldComparator.d.ts +1 -1
- package/dist/dataunit/state/slice/AddedRecordsSlice.d.ts +1 -1
- package/dist/dataunit/state/slice/ChangesSlice.d.ts +1 -2
- package/dist/dataunit/state/slice/ChangesSlice.js +1 -2
- package/dist/dataunit/state/slice/ChangesSlice.js.map +1 -1
- package/dist/dataunit/state/slice/LoadingControlSlice.js.map +1 -1
- package/dist/dataunit/state/slice/RecordsSlice.d.ts +1 -1
- package/dist/dataunit/state/slice/RecordsSlice.js +1 -1
- package/dist/dataunit/state/slice/RecordsSlice.js.map +1 -1
- package/dist/dataunit/state/slice/SelectionSlice.d.ts +1 -2
- package/dist/dataunit/state/slice/SelectionSlice.js +1 -2
- package/dist/dataunit/state/slice/SelectionSlice.js.map +1 -1
- package/dist/dataunit/state/slice/SnapshotSlice.d.ts +1 -1
- package/dist/dataunit/state/slice/WaitingChangesSlice.d.ts +1 -1
- package/dist/index.d.ts +1 -4
- package/dist/index.js +1 -4
- package/dist/index.js.map +1 -1
- package/dist/utils/ColumnFilterManager.d.ts +1 -2
- package/dist/utils/ColumnFilterManager.js.map +1 -1
- package/dist/utils/SortingUtils.d.ts +1 -1
- package/package.json +1 -2
- package/reports/test-report.xml +557 -758
- package/src/dataunit/DataUnit.ts +397 -242
- package/src/dataunit/DataUnitHelper.ts +1 -2
- package/src/dataunit/formatting/PrettyFormatter.ts +5 -4
- package/src/dataunit/loader/utils/dataUnitLoaderUtils.ts +1 -2
- package/src/dataunit/loading/LoadDataRequest.ts +1 -1
- package/src/dataunit/loading/LoadDataResponse.ts +1 -1
- package/src/dataunit/sorting/FieldComparator.ts +1 -1
- package/src/dataunit/state/slice/AddedRecordsSlice.ts +1 -1
- package/src/dataunit/state/slice/ChangesSlice.ts +1 -2
- package/src/dataunit/state/slice/LoadingControlSlice.ts +2 -1
- package/src/dataunit/state/slice/RecordsSlice.ts +2 -3
- package/src/dataunit/state/slice/SelectionSlice.ts +1 -2
- package/src/dataunit/state/slice/SnapshotSlice.ts +1 -1
- package/src/dataunit/state/slice/WaitingChangesSlice.ts +1 -1
- package/src/dataunit/state/slice/test/RecordsSlice.spec.ts +1 -1
- package/src/dataunit/test/DataUnit.spec.ts +44 -0
- package/src/index.ts +1 -4
- package/src/utils/ColumnFilterManager.ts +1 -2
- package/src/utils/SortingUtils.ts +1 -1
- package/test/dataunit/formatting/PrettyFormatter.spec.ts +1 -1
- package/test/dataunit/loader/dataUnitInMemoryLoader.spec.ts +1 -2
- package/test/dataunit/loader/utils/dataUnitLoaderUtils.spec.ts +1 -1
- package/test/util/ColumnFilterManager.spec.ts +1 -2
- package/tsconfig.json +0 -1
- package/dist/dataunit/Changes.d.ts +0 -52
- package/dist/dataunit/Changes.js +0 -64
- package/dist/dataunit/Changes.js.map +0 -1
- package/dist/dataunit/SelectionInfo.d.ts +0 -16
- package/dist/dataunit/SelectionInfo.js +0 -39
- package/dist/dataunit/SelectionInfo.js.map +0 -1
- package/dist/dataunit/interfaces/dataUnit.d.ts +0 -61
- package/dist/dataunit/interfaces/dataUnit.js +0 -13
- package/dist/dataunit/interfaces/dataUnit.js.map +0 -1
- package/src/dataunit/Changes.ts +0 -77
- package/src/dataunit/SelectionInfo.ts +0 -55
- package/src/dataunit/interfaces/dataUnit.ts +0 -71
- package/test/dataunit/AccessParentsDataUnit.spec.ts +0 -69
- package/test/dataunit/Actions.spec.ts +0 -74
- package/test/dataunit/Change.spec.ts +0 -66
- package/test/dataunit/FieldManager.spec.ts +0 -286
- package/test/dataunit/FilterSortsLockersAndObservers.spec.ts +0 -339
- package/test/dataunit/InfoManager.spec.ts +0 -254
- package/test/dataunit/LoadDataAndMetadata.spec.ts +0 -269
- package/test/dataunit/RecodsSelection.spec.ts +0 -229
- package/test/dataunit/RecordsManager.spec.ts +0 -323
- package/test/dataunit/SavingData.spec.ts +0 -206
- package/test/dataunit/SelectionInfo.spec.ts +0 -143
- package/test/dataunit/loader/utils/createDataUnitMock.ts +0 -34
- package/test/dataunit/resources/metadata.ts +0 -39
- package/test/dataunit/resources/records.ts +0 -29
|
@@ -1,339 +0,0 @@
|
|
|
1
|
-
import { randomUUID } from "crypto";
|
|
2
|
-
import DataUnit from "../../src/dataunit/DataUnit";
|
|
3
|
-
import { DUActionInterceptor } from "../../src/dataunit/interfaces/dataUnit";
|
|
4
|
-
import { DataType } from "../../src/dataunit/metadata/DataType";
|
|
5
|
-
import { Filter, FilterProvider, Sort, SortingProvider, SortMode } from "../../src/dataunit/metadata/UnitMetadata";
|
|
6
|
-
import { Action } from "../../src/dataunit/state/action/DataUnitAction";
|
|
7
|
-
import { createDataUnitMock } from "./loader/utils/createDataUnitMock";
|
|
8
|
-
|
|
9
|
-
describe('Filters, sorts, lockers and observers', () => {
|
|
10
|
-
let dataUnit: DataUnit;
|
|
11
|
-
|
|
12
|
-
beforeEach(() => {
|
|
13
|
-
jest.clearAllMocks();
|
|
14
|
-
window.requestAnimationFrame = (functionCallback: Function) => functionCallback();
|
|
15
|
-
({ dataUnit } = createDataUnitMock());
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
describe('release', () => {
|
|
19
|
-
beforeEach(async () => {
|
|
20
|
-
await dataUnit.loadMetadata();
|
|
21
|
-
await dataUnit.loadData();
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
it('should clean dataUnit storage', async () => {
|
|
25
|
-
const releaseCallbacks = jest.spyOn(dataUnit, 'releaseCallbacks');
|
|
26
|
-
dataUnit.release();
|
|
27
|
-
expect(releaseCallbacks).toHaveBeenCalled();
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
it('should unsubscribe parent and remove child', async () => {
|
|
31
|
-
const childDataUnit = new DataUnit('test', dataUnit);
|
|
32
|
-
const unsubscribe = jest.spyOn(dataUnit, 'unsubscribe');
|
|
33
|
-
const removeChildDataunit = jest.spyOn(dataUnit, 'removeChildDataunit');
|
|
34
|
-
childDataUnit.release();
|
|
35
|
-
expect(unsubscribe).toHaveBeenCalled();
|
|
36
|
-
expect(removeChildDataunit).toHaveBeenCalled();
|
|
37
|
-
});
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
describe('releaseCallbacks', () => {
|
|
41
|
-
beforeEach(async () => {
|
|
42
|
-
await dataUnit.loadMetadata();
|
|
43
|
-
await dataUnit.loadData();
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
it('should clean observers, interceptors, sorting and filters provider', async () => {
|
|
47
|
-
const interceptorFn = jest.fn();
|
|
48
|
-
const interceptors: DUActionInterceptor = {
|
|
49
|
-
interceptAction: (action) => {
|
|
50
|
-
interceptorFn();
|
|
51
|
-
return action;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
dataUnit.addInterceptor(interceptors);
|
|
55
|
-
|
|
56
|
-
const sortingFn = jest.fn();
|
|
57
|
-
const sortingProvider: SortingProvider = {
|
|
58
|
-
getSort: () => {
|
|
59
|
-
sortingFn();
|
|
60
|
-
const sort: Sort = {
|
|
61
|
-
field: 'column_name_1',
|
|
62
|
-
dataType: DataType.TEXT,
|
|
63
|
-
mode: SortMode.DESC,
|
|
64
|
-
};
|
|
65
|
-
return [sort];
|
|
66
|
-
},
|
|
67
|
-
}
|
|
68
|
-
dataUnit.sortingProvider = sortingProvider;
|
|
69
|
-
|
|
70
|
-
const filterFn = jest.fn();
|
|
71
|
-
const FilterProvider: FilterProvider = {
|
|
72
|
-
getFilter: () => {
|
|
73
|
-
filterFn();
|
|
74
|
-
const filter: Filter = {
|
|
75
|
-
name: 'test_filter',
|
|
76
|
-
expression: 'test',
|
|
77
|
-
}
|
|
78
|
-
return [filter];
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
dataUnit.addFilterProvider(FilterProvider);
|
|
82
|
-
|
|
83
|
-
const observerFn = jest.fn();
|
|
84
|
-
const observer = async () => {
|
|
85
|
-
observerFn();
|
|
86
|
-
return;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
dataUnit.subscribe(observer);
|
|
90
|
-
|
|
91
|
-
dataUnit.releaseCallbacks();
|
|
92
|
-
|
|
93
|
-
await dataUnit.loadData();
|
|
94
|
-
dataUnit.getSort();
|
|
95
|
-
dataUnit.selectFirst();
|
|
96
|
-
|
|
97
|
-
expect(interceptorFn).not.toHaveBeenCalled();
|
|
98
|
-
expect(sortingFn).not.toHaveBeenCalled();
|
|
99
|
-
expect(filterFn).not.toHaveBeenCalled();
|
|
100
|
-
expect(observerFn).not.toHaveBeenCalled();
|
|
101
|
-
});
|
|
102
|
-
|
|
103
|
-
it('should not clean observers when allowReleaseCallbacks is false', async () => {
|
|
104
|
-
dataUnit.allowReleaseCallbacks = false;
|
|
105
|
-
const observerFn = jest.fn();
|
|
106
|
-
const observer = async () => {
|
|
107
|
-
observerFn();
|
|
108
|
-
return;
|
|
109
|
-
}
|
|
110
|
-
dataUnit.subscribe(observer);
|
|
111
|
-
|
|
112
|
-
dataUnit.releaseCallbacks();
|
|
113
|
-
await dataUnit.loadData();
|
|
114
|
-
|
|
115
|
-
expect(observerFn).toHaveBeenCalled();
|
|
116
|
-
});
|
|
117
|
-
});
|
|
118
|
-
|
|
119
|
-
describe('addInterceptor', () => {
|
|
120
|
-
beforeEach(async () => {
|
|
121
|
-
await dataUnit.loadMetadata();
|
|
122
|
-
await dataUnit.loadData();
|
|
123
|
-
});
|
|
124
|
-
|
|
125
|
-
it('should remove interceptors', async () => {
|
|
126
|
-
const dataLoadedFn = jest.fn();
|
|
127
|
-
const interceptors: DUActionInterceptor = {
|
|
128
|
-
interceptAction: (action) => {
|
|
129
|
-
if (action.type === Action.DATA_LOADED) {
|
|
130
|
-
dataLoadedFn();
|
|
131
|
-
}
|
|
132
|
-
return action;
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
dataUnit.addInterceptor(interceptors);
|
|
136
|
-
await dataUnit.loadData();
|
|
137
|
-
expect(dataLoadedFn).toHaveBeenCalled();
|
|
138
|
-
dataUnit.removeInterceptor(interceptors);
|
|
139
|
-
dataLoadedFn.mockClear();
|
|
140
|
-
await dataUnit.loadData();
|
|
141
|
-
expect(dataLoadedFn).not.toHaveBeenCalled();
|
|
142
|
-
});
|
|
143
|
-
});
|
|
144
|
-
|
|
145
|
-
describe('addFilterProvider', () => {
|
|
146
|
-
beforeEach(async () => {
|
|
147
|
-
await dataUnit.loadMetadata();
|
|
148
|
-
await dataUnit.loadData();
|
|
149
|
-
});
|
|
150
|
-
|
|
151
|
-
it('should remove filterProvider', async () => {
|
|
152
|
-
const filterFn = jest.fn();
|
|
153
|
-
const filterProvider: FilterProvider = {
|
|
154
|
-
getFilter: () => {
|
|
155
|
-
filterFn();
|
|
156
|
-
const filter: Filter = {
|
|
157
|
-
name: 'test_filter',
|
|
158
|
-
expression: 'test',
|
|
159
|
-
}
|
|
160
|
-
return [filter];
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
dataUnit.addFilterProvider(filterProvider);
|
|
164
|
-
await dataUnit.loadData();
|
|
165
|
-
expect(filterFn).toHaveBeenCalled();
|
|
166
|
-
dataUnit.removeFilterProvider(filterProvider);
|
|
167
|
-
filterFn.mockClear();
|
|
168
|
-
await dataUnit.loadData();
|
|
169
|
-
expect(filterFn).not.toHaveBeenCalled();
|
|
170
|
-
});
|
|
171
|
-
|
|
172
|
-
it('should add filterProvider with custom key', async () => {
|
|
173
|
-
const filterFn = jest.fn();
|
|
174
|
-
const filter: Filter = {
|
|
175
|
-
name: 'test_filter',
|
|
176
|
-
expression: 'test',
|
|
177
|
-
}
|
|
178
|
-
const filterProvider: FilterProvider = {
|
|
179
|
-
getFilter: () => {
|
|
180
|
-
filterFn();
|
|
181
|
-
return [filter];
|
|
182
|
-
},
|
|
183
|
-
getKey: () => 'customKey',
|
|
184
|
-
}
|
|
185
|
-
dataUnit.addFilterProvider(filterProvider);
|
|
186
|
-
await dataUnit.loadData();
|
|
187
|
-
expect(filterFn).toHaveBeenCalled();
|
|
188
|
-
const response = dataUnit.getFilters();
|
|
189
|
-
expect(response).toStrictEqual([filter]);
|
|
190
|
-
});
|
|
191
|
-
});
|
|
192
|
-
|
|
193
|
-
describe('subscribe', () => {
|
|
194
|
-
beforeEach(async () => {
|
|
195
|
-
await dataUnit.loadMetadata();
|
|
196
|
-
await dataUnit.loadData();
|
|
197
|
-
});
|
|
198
|
-
|
|
199
|
-
it('should remove observer', async () => {
|
|
200
|
-
const observerFn = jest.fn();
|
|
201
|
-
const observer = async () => {
|
|
202
|
-
observerFn();
|
|
203
|
-
return;
|
|
204
|
-
}
|
|
205
|
-
dataUnit.subscribe(observer);
|
|
206
|
-
await dataUnit.loadData();
|
|
207
|
-
expect(observerFn).toHaveBeenCalled();
|
|
208
|
-
dataUnit.unsubscribe(observer);
|
|
209
|
-
observerFn.mockClear();
|
|
210
|
-
await dataUnit.loadData();
|
|
211
|
-
expect(observerFn).not.toHaveBeenCalled();
|
|
212
|
-
});
|
|
213
|
-
|
|
214
|
-
it('should set observer with uuid', async () => {
|
|
215
|
-
const uuid = randomUUID();
|
|
216
|
-
const observerFn = jest.fn();
|
|
217
|
-
const observer = async () => {
|
|
218
|
-
observerFn();
|
|
219
|
-
return;
|
|
220
|
-
}
|
|
221
|
-
dataUnit.subscribe(observer, uuid);
|
|
222
|
-
await dataUnit.loadData();
|
|
223
|
-
expect(observerFn).toHaveBeenCalled();
|
|
224
|
-
dataUnit.unsubscribe(observer, uuid);
|
|
225
|
-
observerFn.mockClear();
|
|
226
|
-
await dataUnit.loadData();
|
|
227
|
-
expect(observerFn).not.toHaveBeenCalled();
|
|
228
|
-
});
|
|
229
|
-
|
|
230
|
-
it('should set observer with error', async () => {
|
|
231
|
-
const observerFn = jest.fn();
|
|
232
|
-
const warn = jest.spyOn(global.console, 'warn');
|
|
233
|
-
const observer = () => {
|
|
234
|
-
observerFn();
|
|
235
|
-
throw new Error('test');
|
|
236
|
-
}
|
|
237
|
-
dataUnit.subscribe(observer);
|
|
238
|
-
await dataUnit.loadData();
|
|
239
|
-
expect(warn).toHaveBeenCalledWith('[DataUnit] error while call observer', expect.anything());
|
|
240
|
-
});
|
|
241
|
-
});
|
|
242
|
-
|
|
243
|
-
describe('getAppliedFilters', () => {
|
|
244
|
-
beforeEach(async () => {
|
|
245
|
-
await dataUnit.loadMetadata();
|
|
246
|
-
await dataUnit.loadData();
|
|
247
|
-
});
|
|
248
|
-
|
|
249
|
-
it('should return applied filters', async () => {
|
|
250
|
-
const filter: Filter = {
|
|
251
|
-
name: 'test_filter',
|
|
252
|
-
expression: 'test',
|
|
253
|
-
}
|
|
254
|
-
const FilterProvider: FilterProvider = {
|
|
255
|
-
getFilter: () => {
|
|
256
|
-
return [filter];
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
dataUnit.addFilterProvider(FilterProvider);
|
|
260
|
-
await dataUnit.loadData();
|
|
261
|
-
const response = dataUnit.getAppliedFilters();
|
|
262
|
-
expect(response).toStrictEqual([filter]);
|
|
263
|
-
});
|
|
264
|
-
|
|
265
|
-
it('should return undefined when filter is not applied', () => {
|
|
266
|
-
const newDataUnit = new DataUnit();
|
|
267
|
-
const filter: Filter = {
|
|
268
|
-
name: 'test_filter',
|
|
269
|
-
expression: 'test',
|
|
270
|
-
}
|
|
271
|
-
const FilterProvider: FilterProvider = {
|
|
272
|
-
getFilter: () => {
|
|
273
|
-
return [filter];
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
newDataUnit.addFilterProvider(FilterProvider);
|
|
277
|
-
const response = newDataUnit.getAppliedFilters();
|
|
278
|
-
expect(response).toBeUndefined();
|
|
279
|
-
});
|
|
280
|
-
});
|
|
281
|
-
|
|
282
|
-
describe('addLoadingLocker', () => {
|
|
283
|
-
const dataLoaded = jest.fn();
|
|
284
|
-
|
|
285
|
-
beforeEach(() => {
|
|
286
|
-
dataLoaded.mockClear();
|
|
287
|
-
const interceptors: DUActionInterceptor = {
|
|
288
|
-
interceptAction: (action) => {
|
|
289
|
-
if (action.type === Action.DATA_LOADED) {
|
|
290
|
-
dataLoaded();
|
|
291
|
-
}
|
|
292
|
-
return action;
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
dataUnit.addInterceptor(interceptors);
|
|
296
|
-
});
|
|
297
|
-
|
|
298
|
-
it('should loaded data just when unlock', async () => {
|
|
299
|
-
const unlock = dataUnit.addLoadingLocker();
|
|
300
|
-
const promiseLoadData = dataUnit.loadData();
|
|
301
|
-
expect(dataLoaded).not.toHaveBeenCalled();
|
|
302
|
-
unlock();
|
|
303
|
-
await promiseLoadData;
|
|
304
|
-
expect(dataLoaded).toHaveBeenCalled();
|
|
305
|
-
});
|
|
306
|
-
});
|
|
307
|
-
|
|
308
|
-
describe('hasWaitingChanges', () => {
|
|
309
|
-
beforeEach(async () => {
|
|
310
|
-
await dataUnit.loadMetadata();
|
|
311
|
-
await dataUnit.loadData();
|
|
312
|
-
});
|
|
313
|
-
|
|
314
|
-
it('should return status waiting changes', () => {
|
|
315
|
-
dataUnit.startChange('column_name_1', {
|
|
316
|
-
blocking: true,
|
|
317
|
-
waitmessage: 'test',
|
|
318
|
-
});
|
|
319
|
-
let hasWaitingChanges = dataUnit.hasWaitingChanges();
|
|
320
|
-
expect(hasWaitingChanges).toBeTruthy();
|
|
321
|
-
dataUnit.cancelWaitingChange('column_name_1');
|
|
322
|
-
hasWaitingChanges = dataUnit.hasWaitingChanges();
|
|
323
|
-
expect(hasWaitingChanges).toBeFalsy();
|
|
324
|
-
});
|
|
325
|
-
});
|
|
326
|
-
|
|
327
|
-
describe('addGlobalLoaderProp', () => {
|
|
328
|
-
it('should set global properties', () => {
|
|
329
|
-
dataUnit.addGlobalLoaderProp('prop_name', 'prop_value');
|
|
330
|
-
const properties = dataUnit.getGlobalLoaderProps();
|
|
331
|
-
expect(properties).toStrictEqual(new Map([['prop_name', 'prop_value']]));
|
|
332
|
-
});
|
|
333
|
-
|
|
334
|
-
it('should return empty map when global properties not set', () => {
|
|
335
|
-
const properties = dataUnit.getGlobalLoaderProps();
|
|
336
|
-
expect(properties).toStrictEqual(new Map());
|
|
337
|
-
});
|
|
338
|
-
});
|
|
339
|
-
});
|
|
@@ -1,254 +0,0 @@
|
|
|
1
|
-
import DataUnit from "../../src/dataunit/DataUnit";
|
|
2
|
-
import { DataType } from "../../src/dataunit/metadata/DataType";
|
|
3
|
-
import { SortMode } from "../../src/dataunit/metadata/UnitMetadata";
|
|
4
|
-
import { createDataUnitMock } from "./loader/utils/createDataUnitMock";
|
|
5
|
-
import { recordsTest } from "./resources/records";
|
|
6
|
-
|
|
7
|
-
describe('Info manager', () => {
|
|
8
|
-
let dataUnit: DataUnit;
|
|
9
|
-
|
|
10
|
-
beforeEach(() => {
|
|
11
|
-
jest.clearAllMocks();
|
|
12
|
-
window.requestAnimationFrame = (functionCallback: Function) => functionCallback();
|
|
13
|
-
({ dataUnit } = createDataUnitMock());
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
describe('getters and setters', () => {
|
|
17
|
-
it('should return dataUnit uuid', () => {
|
|
18
|
-
const response = dataUnit.dataUnitId;
|
|
19
|
-
expect(response).toMatch(/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i);
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
it('should return isWaitingToReload', () => {
|
|
23
|
-
let response = dataUnit.isWaitingToReload();
|
|
24
|
-
expect(response).toBeFalsy();
|
|
25
|
-
dataUnit.setWaitingToReload(true);
|
|
26
|
-
response = dataUnit.isWaitingToReload();
|
|
27
|
-
expect(response).toBeTruthy();
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
it('should return cancelPagination', () => {
|
|
31
|
-
let response = dataUnit.cancelPagination;
|
|
32
|
-
expect(response).toBeFalsy();
|
|
33
|
-
dataUnit.cancelPagination = true;
|
|
34
|
-
response = dataUnit.cancelPagination;
|
|
35
|
-
expect(response).toBeTruthy();
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
it('should return isMultipleEdition', () => {
|
|
39
|
-
let response = dataUnit.isMultipleEdition;
|
|
40
|
-
expect(response).toBeFalsy();
|
|
41
|
-
dataUnit.isMultipleEdition = true;
|
|
42
|
-
response = dataUnit.isMultipleEdition;
|
|
43
|
-
expect(response).toBeTruthy();
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
it('should return defaultSorting', () => {
|
|
47
|
-
const sort = {
|
|
48
|
-
dataType: DataType.BOOLEAN,
|
|
49
|
-
field: 'test',
|
|
50
|
-
mode: SortMode.ASC,
|
|
51
|
-
};
|
|
52
|
-
let response = dataUnit.getSort();
|
|
53
|
-
expect(response).toStrictEqual([]);
|
|
54
|
-
dataUnit.defaultSorting = [sort];
|
|
55
|
-
response = dataUnit.getSort();
|
|
56
|
-
expect(response).toStrictEqual([sort]);
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
it('should return pageSize', () => {
|
|
60
|
-
let response = dataUnit.pageSize;
|
|
61
|
-
expect(response).toBe(0);
|
|
62
|
-
dataUnit.pageSize = 10;
|
|
63
|
-
response = dataUnit.pageSize;
|
|
64
|
-
expect(response).toBe(10);
|
|
65
|
-
});
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
describe('waitingForChange', () => {
|
|
69
|
-
it('should return true for changes field', () => {
|
|
70
|
-
dataUnit.startChange('column_name_1', {
|
|
71
|
-
blocking: true,
|
|
72
|
-
waitmessage: 'test',
|
|
73
|
-
});
|
|
74
|
-
const properties = dataUnit.waitingForChange('column_name_1');
|
|
75
|
-
expect(properties).toBeTruthy();
|
|
76
|
-
});
|
|
77
|
-
|
|
78
|
-
it('should return false for no changes field', () => {
|
|
79
|
-
const properties = dataUnit.waitingForChange('column_name_2');
|
|
80
|
-
expect(properties).toBeFalsy();
|
|
81
|
-
});
|
|
82
|
-
});
|
|
83
|
-
|
|
84
|
-
describe('getInvalidMessage', () => {
|
|
85
|
-
beforeEach(async () => {
|
|
86
|
-
await dataUnit.loadMetadata();
|
|
87
|
-
await dataUnit.loadData();
|
|
88
|
-
});
|
|
89
|
-
|
|
90
|
-
it('should return error message from field', () => {
|
|
91
|
-
const messageTest = 'Error message';
|
|
92
|
-
dataUnit.setInvalidField('column_name_1', messageTest, 'test_1');
|
|
93
|
-
const message = dataUnit.getInvalidMessage('test_1', 'column_name_1');
|
|
94
|
-
expect(message).toBe(messageTest);
|
|
95
|
-
});
|
|
96
|
-
|
|
97
|
-
it('should return undefined when not has any error', () => {
|
|
98
|
-
const message = dataUnit.getInvalidMessage('test_1', 'column_name_2');
|
|
99
|
-
expect(message).toBeUndefined();
|
|
100
|
-
});
|
|
101
|
-
});
|
|
102
|
-
|
|
103
|
-
describe('isDirty', () => {
|
|
104
|
-
beforeEach(async () => {
|
|
105
|
-
await dataUnit.loadMetadata();
|
|
106
|
-
await dataUnit.loadData();
|
|
107
|
-
});
|
|
108
|
-
|
|
109
|
-
it('should return true when has data not saved', async () => {
|
|
110
|
-
dataUnit.selectFirst();
|
|
111
|
-
await dataUnit.setFieldValue('column_name_1', 'new_value');
|
|
112
|
-
const isDirty = dataUnit.isDirty();
|
|
113
|
-
expect(isDirty).toBeTruthy();
|
|
114
|
-
});
|
|
115
|
-
|
|
116
|
-
it('should return true when dataUnit child not has data pending', async () => {
|
|
117
|
-
dataUnit.getChildDataunit('test');
|
|
118
|
-
const childDataUnit = dataUnit.getChildDataunit('test');
|
|
119
|
-
childDataUnit.selectFirst();
|
|
120
|
-
await childDataUnit.setFieldValue('column_name_1', 'new_value');
|
|
121
|
-
const isDirty = dataUnit.isDirty();
|
|
122
|
-
expect(isDirty).toBeTruthy();
|
|
123
|
-
});
|
|
124
|
-
|
|
125
|
-
it('should return false when dataUnit child has data not saved and ignoreChildren', async () => {
|
|
126
|
-
const childDataUnit = new DataUnit('test', dataUnit);
|
|
127
|
-
childDataUnit.selectFirst();
|
|
128
|
-
await childDataUnit.setFieldValue('column_name_1', 'new_value');
|
|
129
|
-
const isDirty = dataUnit.isDirty(true);
|
|
130
|
-
expect(isDirty).toBeFalsy();
|
|
131
|
-
});
|
|
132
|
-
});
|
|
133
|
-
|
|
134
|
-
describe('hasDirtyRecords', () => {
|
|
135
|
-
beforeEach(async () => {
|
|
136
|
-
await dataUnit.loadMetadata();
|
|
137
|
-
await dataUnit.loadData();
|
|
138
|
-
const saveLoaderMock = jest.fn().mockResolvedValue(recordsTest);
|
|
139
|
-
dataUnit.saveLoader = saveLoaderMock;
|
|
140
|
-
});
|
|
141
|
-
|
|
142
|
-
it('should return true when any record has data not saved', async () => {
|
|
143
|
-
dataUnit.selectFirst();
|
|
144
|
-
await dataUnit.setFieldValue('column_name_1', 'new_value');
|
|
145
|
-
dataUnit.clearSelection();
|
|
146
|
-
let isDirty = dataUnit.hasDirtyRecords();
|
|
147
|
-
expect(isDirty).toBeTruthy();
|
|
148
|
-
dataUnit.selectLast();
|
|
149
|
-
await dataUnit.setFieldValue('column_name_1', 'new_value');
|
|
150
|
-
dataUnit.clearSelection();
|
|
151
|
-
isDirty = dataUnit.hasDirtyRecords();
|
|
152
|
-
expect(isDirty).toBeTruthy();
|
|
153
|
-
});
|
|
154
|
-
|
|
155
|
-
it('should return false when data has be saved', async () => {
|
|
156
|
-
dataUnit.selectFirst();
|
|
157
|
-
await dataUnit.setFieldValue('column_name_1', 'new_value');
|
|
158
|
-
await dataUnit.saveData();
|
|
159
|
-
const isDirty = dataUnit.hasDirtyRecords();
|
|
160
|
-
expect(isDirty).toBeFalsy();
|
|
161
|
-
});
|
|
162
|
-
});
|
|
163
|
-
|
|
164
|
-
describe('isNewRecord', () => {
|
|
165
|
-
beforeEach(async () => {
|
|
166
|
-
await dataUnit.loadMetadata();
|
|
167
|
-
await dataUnit.loadData();
|
|
168
|
-
});
|
|
169
|
-
|
|
170
|
-
it('should return false when record is not new', async () => {
|
|
171
|
-
dataUnit.selectFirst();
|
|
172
|
-
const recordSelected = dataUnit.getSelectedRecord();
|
|
173
|
-
const isNewRecord = dataUnit.isNewRecord(recordSelected?.__record__id__!);
|
|
174
|
-
expect(isNewRecord).toBeFalsy();
|
|
175
|
-
});
|
|
176
|
-
|
|
177
|
-
it('should return true when record is new', async () => {
|
|
178
|
-
await dataUnit.addRecord();
|
|
179
|
-
const recordSelected = dataUnit.getSelectedRecord();
|
|
180
|
-
const isNewRecord = dataUnit.isNewRecord(recordSelected?.__record__id__!);
|
|
181
|
-
expect(isNewRecord).toBeTruthy();
|
|
182
|
-
});
|
|
183
|
-
});
|
|
184
|
-
|
|
185
|
-
describe('canUndo', () => {
|
|
186
|
-
beforeEach(async () => {
|
|
187
|
-
await dataUnit.loadMetadata();
|
|
188
|
-
await dataUnit.loadData();
|
|
189
|
-
const saveLoaderMock = jest.fn().mockResolvedValue(recordsTest);
|
|
190
|
-
dataUnit.saveLoader = saveLoaderMock;
|
|
191
|
-
});
|
|
192
|
-
|
|
193
|
-
it('should return true when changes can undo', async () => {
|
|
194
|
-
await dataUnit.addRecord();
|
|
195
|
-
const canUndo = dataUnit.canUndo();
|
|
196
|
-
expect(canUndo).toBeTruthy();
|
|
197
|
-
});
|
|
198
|
-
|
|
199
|
-
it('should return true when field value changes can undo', async () => {
|
|
200
|
-
dataUnit.selectFirst();
|
|
201
|
-
await dataUnit.setFieldValue('column_name_1', 'new_value');
|
|
202
|
-
const canUndo = dataUnit.canUndo();
|
|
203
|
-
expect(canUndo).toBeTruthy();
|
|
204
|
-
});
|
|
205
|
-
|
|
206
|
-
it('should return false when changes can not undo', async () => {
|
|
207
|
-
dataUnit.selectFirst();
|
|
208
|
-
await dataUnit.setFieldValue('column_name_1', 'new_value');
|
|
209
|
-
await dataUnit.saveData();
|
|
210
|
-
const canUndo = dataUnit.canUndo();
|
|
211
|
-
expect(canUndo).toBeFalsy();
|
|
212
|
-
});
|
|
213
|
-
});
|
|
214
|
-
|
|
215
|
-
describe('canRedo', () => {
|
|
216
|
-
beforeEach(async () => {
|
|
217
|
-
await dataUnit.loadMetadata();
|
|
218
|
-
await dataUnit.loadData();
|
|
219
|
-
const saveLoaderMock = jest.fn().mockResolvedValue(recordsTest);
|
|
220
|
-
dataUnit.saveLoader = saveLoaderMock;
|
|
221
|
-
});
|
|
222
|
-
|
|
223
|
-
it('should return true when changes can redo', async () => {
|
|
224
|
-
await dataUnit.addRecord();
|
|
225
|
-
const canUndo = dataUnit.canUndo();
|
|
226
|
-
expect(canUndo).toBeTruthy();
|
|
227
|
-
dataUnit.undo();
|
|
228
|
-
const canRedo = dataUnit.canRedo();
|
|
229
|
-
expect(canRedo).toBeTruthy();
|
|
230
|
-
});
|
|
231
|
-
|
|
232
|
-
it('should return true when field value changes can redo', async () => {
|
|
233
|
-
dataUnit.selectFirst();
|
|
234
|
-
await dataUnit.setFieldValue('column_name_1', 'new_value');
|
|
235
|
-
const canUndo = dataUnit.canUndo();
|
|
236
|
-
expect(canUndo).toBeTruthy();
|
|
237
|
-
dataUnit.undo();
|
|
238
|
-
const canRedo = dataUnit.canRedo();
|
|
239
|
-
expect(canRedo).toBeTruthy();
|
|
240
|
-
});
|
|
241
|
-
|
|
242
|
-
it('should return false when changes can not redo', () => {
|
|
243
|
-
const canRedo = dataUnit.canRedo();
|
|
244
|
-
expect(canRedo).toBeFalsy();
|
|
245
|
-
});
|
|
246
|
-
});
|
|
247
|
-
|
|
248
|
-
describe('toString', () => {
|
|
249
|
-
it('should return dataUnit name', () => {
|
|
250
|
-
const name = dataUnit.toString();
|
|
251
|
-
expect(name).toContain('dataunit?');
|
|
252
|
-
});
|
|
253
|
-
});
|
|
254
|
-
});
|