Skip to content

Commit 4875616

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

2 files changed

Lines changed: 151 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: 150 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,131 @@ describe('dehydration methods', () => {
680667
).toBe(true);
681668
});
682669
});
670+
671+
describe('hydration methods', () => {
672+
it.each([
673+
[
674+
'hydrateIrisGridPanelStateV1',
675+
{
676+
isSelectingPartition: false,
677+
partition: null,
678+
partitionColumn: 'INVALID',
679+
advancedSettings: [],
680+
},
681+
],
682+
[
683+
'hydrateIrisGridPanelStateV2',
684+
{
685+
isSelectingPartition: false,
686+
partitions: [null],
687+
partitionColumns: ['INVALID'],
688+
advancedSettings: [],
689+
},
690+
],
691+
])('%s invalid column error', (_label, panelState) => {
692+
expect(() =>
693+
IrisGridUtils.hydrateIrisGridPanelState(
694+
irisGridTestUtils.makeModel(
695+
irisGridTestUtils.makeTable({
696+
columns: irisGridTestUtils.makeColumns(5, 'name_'),
697+
})
698+
),
699+
panelState
700+
)
701+
).toThrow('Invalid partition column INVALID');
702+
});
703+
704+
it.each([
705+
[
706+
'hydrateIrisGridPanelStateV1 null partition',
707+
{
708+
isSelectingPartition: false,
709+
partition: null,
710+
partitionColumn: 'name_0',
711+
advancedSettings: [],
712+
},
713+
],
714+
[
715+
'hydrateIrisGridPanelStateV1 unselected partition',
716+
{
717+
isSelectingPartition: false,
718+
partition: '',
719+
partitionColumn: 'name_0',
720+
advancedSettings: [],
721+
},
722+
],
723+
[
724+
'hydrateIrisGridPanelStateV1 one selected partition',
725+
{
726+
isSelectingPartition: true,
727+
partition: '',
728+
partitionColumn: 'name_0',
729+
advancedSettings: [],
730+
},
731+
],
732+
[
733+
'hydrateIrisGridPanelStateV2 no partition columns',
734+
{
735+
isSelectingPartition: false,
736+
partitions: [],
737+
partitionColumns: [],
738+
advancedSettings: [],
739+
},
740+
],
741+
[
742+
'hydrateIrisGridPanelStateV2 two unselected columns',
743+
{
744+
isSelectingPartition: true,
745+
partitions: [null, null],
746+
partitionColumns: ['name_0', 'name_1'],
747+
advancedSettings: [],
748+
},
749+
],
750+
[
751+
'hydrateIrisGridPanelStateV2 two selected columns',
752+
{
753+
isSelectingPartition: true,
754+
partitions: ['a', 'b'],
755+
partitionColumns: ['name_0', 'name_1'],
756+
advancedSettings: [],
757+
},
758+
],
759+
[
760+
'hydrateIrisGridPanelStateV2 mixed selection columns',
761+
{
762+
isSelectingPartition: true,
763+
partitions: [null, 'b', null],
764+
partitionColumns: ['name_0', 'name_1', 'name_2'],
765+
advancedSettings: [],
766+
},
767+
],
768+
[
769+
'hydrateIrisGridPanelStateV2 mixed selection columns',
770+
{
771+
isSelectingPartition: true,
772+
partitions: ['a', null, 'b'],
773+
partitionColumns: ['name_0', 'name_1', 'name_2'],
774+
advancedSettings: [],
775+
},
776+
],
777+
])('%s partitions and columns match', (_label, panelState) => {
778+
const result = IrisGridUtils.hydrateIrisGridPanelState(
779+
irisGridTestUtils.makeModel(
780+
irisGridTestUtils.makeTable({
781+
columns: irisGridTestUtils.makeColumns(5, 'name_'),
782+
})
783+
),
784+
panelState
785+
);
786+
expect(result.isSelectingPartition).toBe(panelState.isSelectingPartition);
787+
if (isPanelStateV1(panelState)) {
788+
expect(result.partitions).toEqual([panelState.partition]);
789+
expect(result.partitionColumns[0].name).toBe(panelState.partitionColumn);
790+
} else {
791+
expect(result.partitions).toEqual(panelState.partitions);
792+
panelState.partitionColumns.forEach((partition, index) => {
793+
expect(result.partitionColumns[index].name === partition).toBeTruthy();
794+
});
795+
}
796+
});
797+
});

0 commit comments

Comments
 (0)