@sankhyalabs/core 6.1.0-dev.1 → 6.1.0-dev.3

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/Changes.d.ts +52 -0
  18. package/dist/dataunit/Changes.js +64 -0
  19. package/dist/dataunit/Changes.js.map +1 -0
  20. package/dist/dataunit/DataUnit.d.ts +9 -129
  21. package/dist/dataunit/DataUnit.js +87 -177
  22. package/dist/dataunit/DataUnit.js.map +1 -1
  23. package/dist/dataunit/DataUnitHelper.d.ts +2 -1
  24. package/dist/dataunit/DataUnitHelper.js.map +1 -1
  25. package/dist/dataunit/SelectionInfo.d.ts +16 -0
  26. package/dist/dataunit/SelectionInfo.js +39 -0
  27. package/dist/dataunit/SelectionInfo.js.map +1 -0
  28. package/dist/dataunit/formatting/PrettyFormatter.js +5 -3
  29. package/dist/dataunit/formatting/PrettyFormatter.js.map +1 -1
  30. package/dist/dataunit/interfaces/dataUnit.d.ts +61 -0
  31. package/dist/dataunit/interfaces/dataUnit.js +13 -0
  32. package/dist/dataunit/interfaces/dataUnit.js.map +1 -0
  33. package/dist/dataunit/loader/utils/dataUnitLoaderUtils.d.ts +2 -1
  34. package/dist/dataunit/loader/utils/dataUnitLoaderUtils.js.map +1 -1
  35. package/dist/dataunit/loading/LoadDataRequest.d.ts +1 -1
  36. package/dist/dataunit/loading/LoadDataResponse.d.ts +1 -1
  37. package/dist/dataunit/sorting/FieldComparator.d.ts +1 -1
  38. package/dist/dataunit/state/slice/AddedRecordsSlice.d.ts +1 -1
  39. package/dist/dataunit/state/slice/ChangesSlice.d.ts +2 -1
  40. package/dist/dataunit/state/slice/ChangesSlice.js +2 -1
  41. package/dist/dataunit/state/slice/ChangesSlice.js.map +1 -1
  42. package/dist/dataunit/state/slice/LoadingControlSlice.js.map +1 -1
  43. package/dist/dataunit/state/slice/RecordsSlice.d.ts +1 -1
  44. package/dist/dataunit/state/slice/RecordsSlice.js +1 -1
  45. package/dist/dataunit/state/slice/RecordsSlice.js.map +1 -1
  46. package/dist/dataunit/state/slice/SelectionSlice.d.ts +2 -1
  47. package/dist/dataunit/state/slice/SelectionSlice.js +2 -1
  48. package/dist/dataunit/state/slice/SelectionSlice.js.map +1 -1
  49. package/dist/dataunit/state/slice/SnapshotSlice.d.ts +1 -1
  50. package/dist/dataunit/state/slice/WaitingChangesSlice.d.ts +1 -1
  51. package/dist/index.d.ts +4 -1
  52. package/dist/index.js +4 -1
  53. package/dist/index.js.map +1 -1
  54. package/dist/utils/ColumnFilterManager.d.ts +2 -1
  55. package/dist/utils/ColumnFilterManager.js.map +1 -1
  56. package/dist/utils/SortingUtils.d.ts +1 -1
  57. package/package.json +2 -1
  58. package/reports/test-report.xml +660 -459
  59. package/src/dataunit/Changes.ts +77 -0
  60. package/src/dataunit/DataUnit.ts +242 -397
  61. package/src/dataunit/DataUnitHelper.ts +2 -1
  62. package/src/dataunit/SelectionInfo.ts +55 -0
  63. package/src/dataunit/formatting/PrettyFormatter.ts +4 -5
  64. package/src/dataunit/interfaces/dataUnit.ts +71 -0
  65. package/src/dataunit/loader/utils/dataUnitLoaderUtils.ts +2 -1
  66. package/src/dataunit/loading/LoadDataRequest.ts +1 -1
  67. package/src/dataunit/loading/LoadDataResponse.ts +1 -1
  68. package/src/dataunit/sorting/FieldComparator.ts +1 -1
  69. package/src/dataunit/state/slice/AddedRecordsSlice.ts +1 -1
  70. package/src/dataunit/state/slice/ChangesSlice.ts +2 -1
  71. package/src/dataunit/state/slice/LoadingControlSlice.ts +1 -2
  72. package/src/dataunit/state/slice/RecordsSlice.ts +3 -2
  73. package/src/dataunit/state/slice/SelectionSlice.ts +2 -1
  74. package/src/dataunit/state/slice/SnapshotSlice.ts +1 -1
  75. package/src/dataunit/state/slice/WaitingChangesSlice.ts +1 -1
  76. package/src/dataunit/state/slice/test/RecordsSlice.spec.ts +1 -1
  77. package/src/index.ts +4 -1
  78. package/src/utils/ColumnFilterManager.ts +2 -1
  79. package/src/utils/SortingUtils.ts +1 -1
  80. package/test/dataunit/AccessParentsDataUnit.spec.ts +69 -0
  81. package/test/dataunit/Actions.spec.ts +74 -0
  82. package/test/dataunit/Change.spec.ts +66 -0
  83. package/test/dataunit/FieldManager.spec.ts +286 -0
  84. package/test/dataunit/FilterSortsLockersAndObservers.spec.ts +339 -0
  85. package/test/dataunit/InfoManager.spec.ts +254 -0
  86. package/test/dataunit/LoadDataAndMetadata.spec.ts +269 -0
  87. package/test/dataunit/RecodsSelection.spec.ts +229 -0
  88. package/test/dataunit/RecordsManager.spec.ts +323 -0
  89. package/test/dataunit/SavingData.spec.ts +206 -0
  90. package/test/dataunit/SelectionInfo.spec.ts +143 -0
  91. package/test/dataunit/formatting/PrettyFormatter.spec.ts +1 -1
  92. package/test/dataunit/loader/dataUnitInMemoryLoader.spec.ts +2 -1
  93. package/test/dataunit/loader/utils/createDataUnitMock.ts +34 -0
  94. package/test/dataunit/loader/utils/dataUnitLoaderUtils.spec.ts +1 -1
  95. package/test/dataunit/resources/metadata.ts +39 -0
  96. package/test/dataunit/resources/records.ts +29 -0
  97. package/test/util/ColumnFilterManager.spec.ts +2 -1
  98. package/tsconfig.json +1 -0
  99. package/src/dataunit/test/DataUnit.spec.ts +0 -44
@@ -0,0 +1,206 @@
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
+ });
@@ -0,0 +1,143 @@
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
+ });
@@ -18,7 +18,7 @@ describe('getFormattedValue', () => {
18
18
  it('should return empty string when value is not an array', () => {
19
19
  const value = 'not an array';
20
20
  const descriptor = getFileFieldDescriptor();
21
- expect(getFormattedValue(value, descriptor)).toBe('');
21
+ expect(getFormattedValue(value, descriptor)).toBe(value);
22
22
  });
23
23
 
24
24
  it('should return empty string when value is an empty array', () => {
@@ -6,7 +6,8 @@ import {
6
6
  import { FieldDescriptor, UnitMetadata } from '../../../src/dataunit/metadata/UnitMetadata.js';
7
7
  import { DataType } from '../../../src/dataunit/metadata/DataType.js';
8
8
  import DateUtils from '../../../src/utils/DateUtils.js';
9
- import DataUnit, { Record } from '../../../src/dataunit/DataUnit.js';
9
+ import DataUnit from '../../../src/dataunit/DataUnit.js';
10
+ import { Record } from '../../../src/dataunit/interfaces/dataUnit.js';
10
11
 
11
12
  describe('DataUnitInMemoryLoader - loadData', () => {
12
13
  const dataUnitMetetadata: UnitMetadata = {
@@ -0,0 +1,34 @@
1
+ import { DataUnit, LoadDataResponse } from "../../../../src";
2
+ import { metadata } from "../../resources/metadata";
3
+ import { recordsTest } from "../../resources/records";
4
+
5
+ export function createDataUnitMock(): {
6
+ dataUnit: DataUnit,
7
+ dataLoaderMock: jest.Mock,
8
+ metadataLoaderMock: jest.Mock
9
+ } {
10
+ const dataUnit = new DataUnit();
11
+ let dataLoaderMock: jest.Mock;
12
+ let metadataLoaderMock: jest.Mock;
13
+ dataLoaderMock = jest.fn((_, request) => {
14
+ return new Promise<LoadDataResponse>((resolve) => {
15
+ const { offset = 0, limit = recordsTest.length } = request;
16
+ const currentPage = Math.floor(offset / limit);
17
+ const hasMore = (offset + limit) < recordsTest.length;
18
+ resolve({
19
+ records: [...recordsTest].slice(offset, offset + limit),
20
+ paginationInfo: {
21
+ currentPage,
22
+ hasMore,
23
+ firstRecord: offset,
24
+ lastRecord: Math.min(offset + limit - 1, recordsTest.length - 1),
25
+ count: recordsTest.length
26
+ },
27
+ });
28
+ });
29
+ });
30
+ metadataLoaderMock = jest.fn().mockResolvedValue({ ...metadata });
31
+ dataUnit.dataLoader = dataLoaderMock;
32
+ dataUnit.metadataLoader = metadataLoaderMock;
33
+ return { dataUnit, dataLoaderMock, metadataLoaderMock };
34
+ }
@@ -17,7 +17,7 @@ jest.mock('../../../../src/utils/SortingUtils', () => {
17
17
 
18
18
  import { DataUnitLoaderUtils } from '../../../../src/dataunit/loader/utils/dataUnitLoaderUtils';
19
19
  import { IColumnFilter } from '../../../../src/utils/ColumnFilterManager';
20
- import { Record } from '../../../../src/dataunit/DataUnit';
20
+ import { Record } from '../../../../src/dataunit/interfaces/dataUnit';
21
21
  import { Filter, Sort, SortMode } from '../../../../src/dataunit/metadata/UnitMetadata';
22
22
  import { DataType } from '../../../../src/dataunit/metadata/DataType';
23
23
  import { ColumnFilterManager } from '../../../../src/utils/ColumnFilterManager';
@@ -0,0 +1,39 @@
1
+ import { DataType } from "../../../src/dataunit/metadata/DataType";
2
+ import { UnitMetadata } from "../../../src/dataunit/metadata/UnitMetadata";
3
+
4
+ export const metadata: UnitMetadata = {
5
+ name: 'test',
6
+ label: 'test',
7
+ children: [{
8
+ name: 'child',
9
+ label: 'label_child',
10
+ links: [{
11
+ source: 'source',
12
+ target: 'test',
13
+ }],
14
+ }],
15
+ fields: [
16
+ {
17
+ name: 'column_name_1',
18
+ label: 'Column name 1',
19
+ dataType: DataType.TEXT,
20
+ visible: true,
21
+ },
22
+ {
23
+ name: 'column_name_2',
24
+ label: 'Column name 2',
25
+ dataType: DataType.NUMBER,
26
+ readOnly: false,
27
+ properties: {
28
+ visibleOnConfig: true,
29
+ }
30
+ },
31
+ {
32
+ name: 'column_name_3',
33
+ label: 'Column name 3',
34
+ dataType: DataType.BOOLEAN,
35
+ readOnly: true,
36
+ visible: false,
37
+ },
38
+ ],
39
+ }
@@ -0,0 +1,29 @@
1
+ import { Record } from "../../../src/dataunit/interfaces/dataUnit";
2
+
3
+ export const recordsTest: Record[] = [
4
+ {
5
+ __record__id__: 'test_1',
6
+ column_name_1: 'column_value_1',
7
+ column_name_2: 1,
8
+ },
9
+ {
10
+ __record__id__: 'test_2',
11
+ column_name_1: 'column_value_1',
12
+ column_name_2: 2,
13
+ },
14
+ {
15
+ __record__id__: 'test_3',
16
+ column_name_1: 'column_value_1',
17
+ column_name_2: 3,
18
+ },
19
+ {
20
+ __record__id__: 'test_4',
21
+ column_name_1: 'column_value_1',
22
+ column_name_2: 4,
23
+ },
24
+ {
25
+ __record__id__: 'test_5',
26
+ column_name_1: 'column_value_1',
27
+ column_name_2: 5,
28
+ }
29
+ ];
@@ -1,6 +1,7 @@
1
1
  import { ColumnFilterManager, IColumnFilter } from '../../src/utils/ColumnFilterManager.js';
2
2
  import { FieldDescriptor, Filter, FilterParam } from '../../src/dataunit/metadata/UnitMetadata.js';
3
- import DataUnit, { Record } from '../../src/dataunit/DataUnit';
3
+ import DataUnit from '../../src/dataunit/DataUnit';
4
+ import { Record } from '../../src/dataunit/interfaces/dataUnit';
4
5
 
5
6
 
6
7
  describe('ColumnFilterManager', () => {
package/tsconfig.json CHANGED
@@ -8,6 +8,7 @@
8
8
  "strict": true,
9
9
  "moduleResolution": "node",
10
10
  "declaration": true,
11
+ "esModuleInterop": true
11
12
  },
12
13
  "removeComments": true,
13
14
  "preserveConstEnums": true,
@@ -1,44 +0,0 @@
1
- import DataUnit from '../DataUnit';
2
- import { Action } from '../state/action/DataUnitAction';
3
-
4
- describe('DataUnit', () => {
5
-
6
- let dataUnit: DataUnit;
7
-
8
- beforeEach(() => {
9
- dataUnit = new DataUnit();
10
-
11
- dataUnit['dispatchAction'] = jest.fn();
12
- });
13
-
14
- it('should return false when not waiting to reload', () => {
15
- expect(dataUnit.isWaitingToReload()).toBe(false);
16
- });
17
-
18
- it('should set waitingToReload to true', () => {
19
- dataUnit.setWaitingToReload(true);
20
- expect(dataUnit.isWaitingToReload()).toBe(true);
21
- });
22
-
23
- it('should set waitingToReload to false', () => {
24
- dataUnit.setWaitingToReload(true);
25
- dataUnit.setWaitingToReload(false);
26
- expect(dataUnit.isWaitingToReload()).toBe(false);
27
- });
28
-
29
- it('should dispatch SAVING_CANCELED action with correct fields and recordId', () => {
30
- const fields = [
31
- { name: 'field1', message: 'error1' },
32
- { name: 'field2', message: 'error2' }
33
- ];
34
- const recordId = '12345';
35
-
36
- dataUnit.savingCanceled(fields, recordId);
37
-
38
- expect(dataUnit['dispatchAction']).toHaveBeenCalledWith(
39
- Action.SAVING_CANCELED,
40
- { fields, recordId },
41
- undefined
42
- );
43
- });
44
- });