Skip to content

Commit bce4188

Browse files
committed
filterFns unit tests and rearrange some fixtures
1 parent cf0972d commit bce4188

File tree

15 files changed

+537
-124
lines changed

15 files changed

+537
-124
lines changed

packages/table-core/src/fns/filterFns.ts

Lines changed: 40 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,9 @@ export const filterFn_includesStringSensitive: FilterFn<any, any> = <
5050
columnId: string,
5151
filterValue: string,
5252
) => {
53-
return Boolean(row.getValue(columnId)?.toString().includes(filterValue))
53+
return Boolean(
54+
row.getValue(columnId)?.toString().includes(filterValue.toString()),
55+
)
5456
}
5557

5658
filterFn_includesStringSensitive.autoRemove = (val: any) => testFalsy(val)
@@ -96,6 +98,22 @@ export const filterFn_equalsString: FilterFn<any, any> = <
9698

9799
filterFn_equalsString.autoRemove = (val: any) => testFalsy(val)
98100

101+
/**
102+
* Filter function for checking if a string is exactly equal to a given string. (Case-sensitive)
103+
*/
104+
export const filterFn_equalsStringSensitive: FilterFn<any, any> = <
105+
TFeatures extends TableFeatures,
106+
TData extends RowData,
107+
>(
108+
row: Row<TFeatures, TData>,
109+
columnId: string,
110+
filterValue: string,
111+
) => {
112+
return row.getValue(columnId)?.toString() === filterValue
113+
}
114+
115+
filterFn_equalsStringSensitive.autoRemove = (val: any) => testFalsy(val)
116+
99117
// Number filters
100118

101119
/**
@@ -277,6 +295,20 @@ filterFn_inNumberRange.autoRemove = (val: any) =>
277295

278296
// Array filters
279297

298+
/**
299+
* Filter function for checking if an array has a given value.
300+
*/
301+
export const filterFn_arrHas: FilterFn<any, any> = <
302+
TFeatures extends TableFeatures,
303+
TData extends RowData,
304+
>(
305+
row: Row<TFeatures, TData>,
306+
columnId: string,
307+
filterValue: Array<unknown>,
308+
) => {
309+
return filterValue.some((val) => row.getValue<unknown>(columnId) === val)
310+
}
311+
280312
/**
281313
* Filter function for checking if an array includes a given value.
282314
*/
@@ -286,11 +318,13 @@ export const filterFn_arrIncludes: FilterFn<any, any> = <
286318
>(
287319
row: Row<TFeatures, TData>,
288320
columnId: string,
289-
filterValue: unknown,
321+
filterValue: Array<unknown>,
290322
) => {
291-
const value = row.getValue<Array<unknown>>(columnId)
292-
if (!Array.isArray(value)) return false
293-
return value.includes(filterValue)
323+
return filterValue.some((val) =>
324+
(row.getValue<unknown>(columnId) as Array<unknown> | string).includes(
325+
val as any,
326+
),
327+
)
294328
}
295329

296330
filterFn_arrIncludes.autoRemove = (val: any) => testFalsy(val) || !val?.length
@@ -338,6 +372,7 @@ filterFn_arrIncludesSome.autoRemove = (val: any) =>
338372
export const filterFns = {
339373
arrIncludes: filterFn_arrIncludes,
340374
arrIncludesAll: filterFn_arrIncludesAll,
375+
arrHas: filterFn_arrHas,
341376
arrIncludesSome: filterFn_arrIncludesSome,
342377
between: filterFn_between,
343378
betweenInclusive: filterFn_betweenInclusive,

packages/table-core/tests/fixtures/data/generateColumns.ts

Lines changed: 0 additions & 17 deletions
This file was deleted.
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { createColumnHelper } from '../../../src'
2+
import type { Person, PersonColumn, PersonKeys } from './types'
3+
import type { TableFeatures } from '../../../src'
4+
5+
export function generateTestColumnDefs<TFeatures extends TableFeatures>(
6+
people: Array<Person>,
7+
): Array<PersonColumn<TFeatures>> {
8+
const columnHelper = createColumnHelper<TFeatures, Person>()
9+
const person = people[0]
10+
11+
if (!person) {
12+
return []
13+
}
14+
15+
return Object.keys(person).map((key) => {
16+
const typedKey = key as PersonKeys
17+
18+
return columnHelper.accessor(typedKey, { id: typedKey } as any)
19+
})
20+
}

packages/table-core/tests/fixtures/data/makeData.ts renamed to packages/table-core/tests/fixtures/data/generateTestData.ts

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ function createPerson(): Person {
2424
* e.g. makeData(3, 2) creates 3 parent rows with 2 sub-rows each
2525
* @returns An array of Person objects with optional nested subRows based on the provided lengths
2626
*/
27-
export function makeData(...lengths: Array<number>) {
27+
export function generateTestData(...lengths: Array<number>) {
2828
const makeDataLevel = (depth = 0): Array<Person> => {
2929
const len = lengths[depth]
3030

@@ -40,3 +40,35 @@ export function makeData(...lengths: Array<number>) {
4040

4141
return makeDataLevel()
4242
}
43+
44+
export function getStaticTestData() {
45+
return [
46+
{
47+
id: '1',
48+
firstName: 'John',
49+
lastName: 'Doe',
50+
age: 30,
51+
visits: 100,
52+
progress: 50,
53+
status: 'relationship',
54+
},
55+
{
56+
id: '2',
57+
firstName: 'Jane',
58+
lastName: 'Smith',
59+
age: 25,
60+
visits: 200,
61+
progress: 75,
62+
status: 'complicated',
63+
},
64+
{
65+
id: '3',
66+
firstName: 'Alice',
67+
lastName: 'Johnson',
68+
age: 35,
69+
visits: 150,
70+
progress: 60,
71+
status: 'single',
72+
},
73+
] as const satisfies Array<Person>
74+
}

packages/table-core/tests/fixtures/data/types.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
1-
import type { ColumnDef } from '../../../src'
1+
import type { ColumnDef, TableFeatures } from '../../../src'
22

33
export type PersonKeys = keyof Person
4-
export type PersonColumn = ColumnDef<any, Person, any>
4+
export type PersonColumn<TFeatures extends TableFeatures> = ColumnDef<
5+
TFeatures,
6+
Person,
7+
any
8+
>
59

610
export type Person = {
711
id: string

packages/table-core/tests/helpers/createTestTable.ts

Lines changed: 0 additions & 54 deletions
This file was deleted.
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
import {
2+
generateTestTableFromData,
3+
generateTestTableWithData,
4+
generateTestTableWithDataAndState,
5+
generateTestTableWithStateFromData,
6+
} from './generateTestTable'
7+
import type { TableFeatures, TableOptions } from '../../src'
8+
import type { Person } from '../fixtures/data/types'
9+
10+
export function generateTestRowsWithData<TFeatures extends TableFeatures>(
11+
lengths: Array<number> | number = 10,
12+
options?: Omit<TableOptions<TFeatures, Person>, 'data' | 'columns'> & {
13+
_features?: TFeatures
14+
},
15+
) {
16+
const testTable = generateTestTableWithData<TFeatures>(lengths, options)
17+
return testTable.getRowModel().rows
18+
}
19+
20+
export function generateTestRowsFromData<TFeatures extends TableFeatures>(
21+
data: Array<Person>,
22+
options?: Omit<TableOptions<TFeatures, Person>, 'data' | 'columns'> & {
23+
_features?: TFeatures
24+
},
25+
) {
26+
const testTable = generateTestTableFromData<TFeatures>(data, options)
27+
return testTable.getRowModel().rows
28+
}
29+
30+
export function generateTestRowsWithState<TFeatures extends TableFeatures>(
31+
lengths: Array<number> | number = 10,
32+
options?: Omit<
33+
TableOptions<TFeatures, Person>,
34+
'data' | 'columns' | 'onStateChange'
35+
> & {
36+
_features?: TFeatures
37+
},
38+
) {
39+
const testTable = generateTestTableWithDataAndState<TFeatures>(
40+
lengths,
41+
options,
42+
)
43+
return testTable.getRowModel().rows
44+
}
45+
46+
export function generateTestRowsWithStateFromData<
47+
TFeatures extends TableFeatures,
48+
>(
49+
data: Array<Person>,
50+
options?: Omit<
51+
TableOptions<TFeatures, Person>,
52+
'data' | 'columns' | 'onStateChange'
53+
> & {
54+
_features?: TFeatures
55+
},
56+
) {
57+
const testTable = generateTestTableWithStateFromData<TFeatures>(data, options)
58+
return testTable.getRowModel().rows
59+
}

0 commit comments

Comments
 (0)