Skip to content

Commit 0548e5d

Browse files
committed
Add unit tests for hydration cases
1 parent 9c9d099 commit 0548e5d

2 files changed

Lines changed: 119 additions & 36 deletions

File tree

packages/iris-grid/src/IrisGridTestUtils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ class IrisGridTestUtils {
9292
makeTable({
9393
columns = this.makeColumns(),
9494
size = 1000000000,
95-
sort = [],
95+
sort = [] as Sort[],
9696
layoutHints = {} as LayoutHints,
9797
} = {}): Table {
9898
// eslint-disable-next-line @typescript-eslint/no-explicit-any

packages/iris-grid/src/IrisGridUtils.test.ts

Lines changed: 118 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -10,35 +10,12 @@ import IrisGridTestUtils from './IrisGridTestUtils';
1010
import IrisGridUtils, {
1111
DehydratedSort,
1212
LegacyDehydratedSort,
13+
isPanelStateV1,
1314
} from './IrisGridUtils';
1415

1516
const irisGridUtils = new IrisGridUtils(dh);
1617
const irisGridTestUtils = new IrisGridTestUtils(dh);
1718

18-
function makeFilter() {
19-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
20-
return new (dh as any).FilterCondition();
21-
}
22-
23-
function makeColumns(count = 30) {
24-
const columns: Column[] = [];
25-
26-
for (let i = 0; i < count; i += 1) {
27-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
28-
const column = new (dh as any).Column({ index: i, name: `name_${i}` });
29-
columns.push(column);
30-
}
31-
32-
return columns;
33-
}
34-
35-
function makeTable({
36-
columns = makeColumns(),
37-
sort = [] as Sort[],
38-
} = {}): Table {
39-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
40-
return new (dh as any).Table({ columns, sort });
41-
}
4219
function makeColumn(index: number): Column {
4320
return irisGridTestUtils.makeColumn(
4421
`${index}`,
@@ -47,6 +24,16 @@ function makeColumn(index: number): Column {
4724
);
4825
}
4926

27+
function makeTable({
28+
columns = irisGridTestUtils.makeColumns(10, 'name_'),
29+
sort = [] as Sort[],
30+
} = {}): Table {
31+
return irisGridTestUtils.makeTable({
32+
columns,
33+
sort,
34+
});
35+
}
36+
5037
describe('quickfilters tests', () => {
5138
it('exports/imports empty list', () => {
5239
const table = irisGridTestUtils.makeTable();
@@ -62,10 +49,10 @@ describe('quickfilters tests', () => {
6249
});
6350

6451
it('exports/imports quickFilters', () => {
65-
const table = makeTable();
52+
const table = irisGridTestUtils.makeTable();
6653
const column = 9;
6754
const text = '>1000';
68-
const filter = makeFilter();
55+
const filter = irisGridTestUtils.makeFilter();
6956
const quickFilters = new Map([[column, { text, filter }]]);
7057

7158
const exportedFilters = IrisGridUtils.dehydrateQuickFilters(quickFilters);
@@ -93,7 +80,7 @@ describe('quickfilters tests', () => {
9380

9481
describe('advanced filter tests', () => {
9582
it('exports/imports empty list', () => {
96-
const table = makeTable();
83+
const table = irisGridTestUtils.makeTable();
9784
const filters = new Map();
9885
const exportedFilters = irisGridUtils.dehydrateAdvancedFilters(
9986
table.columns,
@@ -112,7 +99,7 @@ describe('advanced filter tests', () => {
11299
it('exports advanced filters', () => {
113100
const table = makeTable();
114101
const column = 7;
115-
const filter = makeFilter();
102+
const filter = irisGridTestUtils.makeFilter();
116103
const options = {
117104
filterItems: [{ selectedType: '', value: '', key: 0 }],
118105
filterOperators: [],
@@ -151,7 +138,7 @@ describe('advanced filter tests', () => {
151138
describe('sort exporting/importing', () => {
152139
it('exports/imports empty sort', () => {
153140
const sort = [];
154-
const table = makeTable({ sort });
141+
const table = irisGridTestUtils.makeTable({ sort });
155142
const exportedSort = IrisGridUtils.dehydrateSort(sort);
156143
expect(exportedSort).toEqual([]);
157144

@@ -160,7 +147,7 @@ describe('sort exporting/importing', () => {
160147
});
161148

162149
it('should export (dehydrate) sorts', () => {
163-
const columns = makeColumns();
150+
const columns = irisGridTestUtils.makeColumns(10, 'name_');
164151
const sort = [columns[3].sort(), columns[7].sort().abs().desc()];
165152
const dehydratedSorts = IrisGridUtils.dehydrateSort(sort);
166153

@@ -171,9 +158,9 @@ describe('sort exporting/importing', () => {
171158
});
172159

173160
describe('should import (hydrate) sorts', () => {
174-
const columns = makeColumns();
161+
const columns = irisGridTestUtils.makeColumns(10, 'name_');
175162
const sort = [columns[3].sort(), columns[7].sort().abs().desc()];
176-
const table = makeTable({ columns, sort });
163+
const table = irisGridTestUtils.makeTable({ columns, sort });
177164

178165
const dehydratedSorts = IrisGridUtils.dehydrateSort(sort);
179166

@@ -210,7 +197,7 @@ describe('sort exporting/importing', () => {
210197
describe('pendingDataMap hydration/dehydration', () => {
211198
it('dehydrates/hydrates empty map', () => {
212199
const pendingDataMap = new Map();
213-
const columns = makeColumns();
200+
const columns = irisGridTestUtils.makeColumns(10, 'name_');
214201
const dehydratedMap = irisGridUtils.dehydratePendingDataMap(
215202
columns,
216203
pendingDataMap
@@ -242,7 +229,7 @@ describe('pendingDataMap hydration/dehydration', () => {
242229
},
243230
],
244231
]);
245-
const columns = makeColumns();
232+
const columns = irisGridTestUtils.makeColumns(10, 'name_');
246233
const dehydratedMap = irisGridUtils.dehydratePendingDataMap(
247234
columns,
248235
pendingDataMap
@@ -488,7 +475,7 @@ describe('validate copy ranges', () => {
488475

489476
describe('changeFilterColumnNamesToIndexes', () => {
490477
const DEFAULT_FILTER = {};
491-
const columns = makeColumns(10);
478+
const columns = irisGridTestUtils.makeColumns(10, 'name_');
492479
it('Replaces column names with indexes', () => {
493480
const filters = [
494481
{ name: 'name_1', filter: DEFAULT_FILTER },
@@ -680,3 +667,99 @@ describe('dehydration methods', () => {
680667
).toBe(true);
681668
});
682669
});
670+
671+
describe('hydration methods', () => {
672+
it.each([
673+
[
674+
'hydrateIrisGridPanelStateV1 null partition',
675+
{
676+
isSelectingPartition: false,
677+
partition: null,
678+
partitionColumn: 'name_0',
679+
advancedSettings: [],
680+
},
681+
],
682+
[
683+
'hydrateIrisGridPanelStateV1 unselected partition',
684+
{
685+
isSelectingPartition: false,
686+
partition: '',
687+
partitionColumn: 'name_0',
688+
advancedSettings: [],
689+
},
690+
],
691+
[
692+
'hydrateIrisGridPanelStateV1 one selected partition',
693+
{
694+
isSelectingPartition: true,
695+
partition: '',
696+
partitionColumn: 'name_0',
697+
advancedSettings: [],
698+
},
699+
],
700+
[
701+
'hydrateIrisGridPanelStateV2 no partition columns',
702+
{
703+
isSelectingPartition: false,
704+
partitions: [],
705+
partitionColumns: [],
706+
advancedSettings: [],
707+
},
708+
],
709+
[
710+
'hydrateIrisGridPanelStateV2 two unselected columns',
711+
{
712+
isSelectingPartition: true,
713+
partitions: [null, null],
714+
partitionColumns: ['name_0', 'name_1'],
715+
advancedSettings: [],
716+
},
717+
],
718+
[
719+
'hydrateIrisGridPanelStateV2 two selected columns',
720+
{
721+
isSelectingPartition: true,
722+
partitions: ['a', 'b'],
723+
partitionColumns: ['name_0', 'name_1'],
724+
advancedSettings: [],
725+
},
726+
],
727+
[
728+
'hydrateIrisGridPanelStateV2 mixed selection columns',
729+
{
730+
isSelectingPartition: true,
731+
partitions: [null, 'b', null],
732+
partitionColumns: ['name_0', 'name_1', 'name_2'],
733+
advancedSettings: [],
734+
},
735+
],
736+
[
737+
'hydrateIrisGridPanelStateV2 mixed selection columns',
738+
{
739+
isSelectingPartition: true,
740+
partitions: ['a', null, 'b'],
741+
partitionColumns: ['name_0', 'name_1', 'name_2'],
742+
advancedSettings: [],
743+
},
744+
],
745+
])('%s partitions and columns match', (_label, panelState) => {
746+
const result = IrisGridUtils.hydrateIrisGridPanelState(
747+
irisGridTestUtils.makeModel(
748+
irisGridTestUtils.makeTable({
749+
columns: irisGridTestUtils.makeColumns(5, 'name_'),
750+
})
751+
),
752+
panelState
753+
);
754+
expect(result.isSelectingPartition).toBe(panelState.isSelectingPartition);
755+
if (isPanelStateV1(panelState)) {
756+
expect(result.partitions).toEqual([panelState.partition]);
757+
expect(result.partitionColumns[0].name).toBe(panelState.partitionColumn);
758+
} else {
759+
expect(result.partitions).toEqual(panelState.partitions);
760+
panelState.partitionColumns.forEach((partition, index) => {
761+
expect(result.partitionColumns[index].name === partition).toBeTruthy();
762+
});
763+
}
764+
});
765+
});

0 commit comments

Comments
 (0)