Skip to content

Commit b104d77

Browse files
add unit tests for multiSortBy
1 parent 0de11a1 commit b104d77

1 file changed

Lines changed: 67 additions & 0 deletions

File tree

packages/router-generator/tests/utils.test.ts

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,73 @@ describe('cleanPath', () => {
2020
})
2121
})
2222

23+
describe('multiSortBy', () => {
24+
it('sorts by single accessor', () => {
25+
const arr = [{ v: 3 }, { v: 1 }, { v: 2 }]
26+
const result = multiSortBy(arr, [(d) => d.v])
27+
expect(result.map((d) => d.v)).toEqual([1, 2, 3])
28+
})
29+
30+
it('sorts by multiple accessors', () => {
31+
const arr = [
32+
{ a: 2, b: 1 },
33+
{ a: 1, b: 2 },
34+
{ a: 1, b: 1 },
35+
]
36+
const result = multiSortBy(arr, [(d) => d.a, (d) => d.b])
37+
expect(result).toEqual([
38+
{ a: 1, b: 1 },
39+
{ a: 1, b: 2 },
40+
{ a: 2, b: 1 },
41+
])
42+
})
43+
44+
it('preserves original order for equal elements', () => {
45+
const arr = [
46+
{ a: 1, id: 'first' },
47+
{ a: 1, id: 'second' },
48+
{ a: 1, id: 'third' },
49+
]
50+
const result = multiSortBy(arr, [(d) => d.a])
51+
expect(result.map((d) => d.id)).toEqual(['first', 'second', 'third'])
52+
})
53+
54+
it('handles undefined values', () => {
55+
const arr = [{ v: 1 }, { v: undefined }, { v: 2 }]
56+
const result = multiSortBy(arr, [(d) => d.v])
57+
// undefined sorts to end
58+
expect(result.map((d) => d.v)).toEqual([1, 2, undefined])
59+
})
60+
61+
it('handles empty array', () => {
62+
const result = multiSortBy([], [(d) => d])
63+
expect(result).toEqual([])
64+
})
65+
66+
it('handles single element array', () => {
67+
const result = multiSortBy([{ v: 1 }], [(d) => d.v])
68+
expect(result).toEqual([{ v: 1 }])
69+
})
70+
71+
it('uses default accessor when none provided', () => {
72+
const arr = [3, 1, 2]
73+
const result = multiSortBy(arr)
74+
expect(result).toEqual([1, 2, 3])
75+
})
76+
77+
it('sorts strings correctly', () => {
78+
const arr = [{ s: 'c' }, { s: 'a' }, { s: 'b' }]
79+
const result = multiSortBy(arr, [(d) => d.s])
80+
expect(result.map((d) => d.s)).toEqual(['a', 'b', 'c'])
81+
})
82+
83+
it('handles negative numbers in accessors for reverse sort', () => {
84+
const arr = [{ v: 1 }, { v: 3 }, { v: 2 }]
85+
const result = multiSortBy(arr, [(d) => -d.v])
86+
expect(result.map((d) => d.v)).toEqual([3, 2, 1])
87+
})
88+
})
89+
2390
describe.each([
2491
{ nonNested: true, mode: 'experimental nonNestedPaths' },
2592
{ nonNested: false, mode: 'default' },

0 commit comments

Comments
 (0)