Skip to content

Commit 99b3687

Browse files
author
sungryong.park
committed
[#88] ✅ add test
1 parent 315e48b commit 99b3687

File tree

1 file changed

+117
-0
lines changed

1 file changed

+117
-0
lines changed

src/sortBy.test.ts

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
import _sortBy from 'lodash/sortBy'
2+
import {describe, it, expect} from 'vitest'
3+
4+
import {sortBy} from './sortBy'
5+
6+
function expectsEqual<T>(...args: Parameters<typeof sortBy<T>>) {
7+
expect(sortBy(...args)).toEqual(_sortBy(...args))
8+
}
9+
10+
describe('sortBy', () => {
11+
it('sorts an array of objects by single property', () => {
12+
const data = [
13+
{user: 'fred', age: 48},
14+
{user: 'barney', age: 34},
15+
{user: 'fred', age: 40},
16+
{user: 'barney', age: 36},
17+
]
18+
expectsEqual(data, 'user')
19+
})
20+
21+
it('sorts an array with multiple property iteratees', () => {
22+
const data = [
23+
{user: 'fred', age: 48},
24+
{user: 'barney', age: 34},
25+
{user: 'fred', age: 40},
26+
{user: 'barney', age: 36},
27+
]
28+
expectsEqual(data, ['user', 'age'])
29+
})
30+
31+
it('sorts an array with function + property iteratees', () => {
32+
const data = [
33+
{user: 'fred', age: 48},
34+
{user: 'barney', age: 36},
35+
{user: 'fred', age: 40},
36+
{user: 'barney', age: 36},
37+
]
38+
expectsEqual(data, (o) => o.user, 'age')
39+
})
40+
41+
it('stably sorts items with the same criteria', () => {
42+
const data = [
43+
{id: 1, group: 'alpha', order: 2},
44+
{id: 2, group: 'alpha', order: 1},
45+
{id: 3, group: 'beta', order: 1},
46+
{id: 4, group: 'beta', order: 1},
47+
]
48+
expectsEqual(data, ['group', 'order'])
49+
50+
expect(
51+
sortBy(data, ['group', 'order'])
52+
.filter((d) => d.group === 'beta')
53+
.map((d) => d.id),
54+
).toEqual(
55+
_sortBy(data, ['group', 'order'])
56+
.filter((d) => d.group === 'beta')
57+
.map((d) => d.id),
58+
)
59+
})
60+
61+
it('sorts the values of an object as if it were an array', () => {
62+
const dataObj = {
63+
a: {user: 'fred', age: 48},
64+
b: {user: 'barney', age: 36},
65+
c: {user: 'wilma', age: 40},
66+
}
67+
expectsEqual(Object.values(dataObj), 'user')
68+
})
69+
70+
it('handles empty array', () => {
71+
expectsEqual([], 'age')
72+
73+
expectsEqual([], (x) => x)
74+
})
75+
76+
it('returns a new sorted array (does not mutate original)', () => {
77+
const data = [
78+
{user: 'fred', age: 48},
79+
{user: 'barney', age: 36},
80+
]
81+
const dataClone = [...data]
82+
expect(data).toEqual(dataClone)
83+
expectsEqual(data, 'age')
84+
})
85+
86+
it('sorts numbers or strings properly', () => {
87+
const numericData = [10, 2, 5, 2]
88+
expectsEqual(numericData)
89+
90+
const stringData = ['pear', 'apple', 'banana', 'Apple']
91+
expectsEqual(stringData)
92+
})
93+
94+
it('sorts numbers by value', () => {
95+
expectsEqual([5, 2, 9, 1], (x) => x)
96+
97+
expectsEqual([3, 1, 2])
98+
})
99+
100+
it('sorts using function iteratee', () => {
101+
const users = [
102+
{name: 'Alice', age: 32},
103+
{name: 'Bob', age: 24},
104+
{name: 'Charlie', age: 29},
105+
]
106+
expectsEqual(users, (u) => u.name.length)
107+
})
108+
109+
it('handles duplicate values correctly', () => {
110+
expectsEqual([3, 1, 2, 1], (x) => x)
111+
})
112+
113+
it('handles null values', () => {
114+
expectsEqual([{val: 2}, {val: undefined}, {val: 1}], 'val')
115+
expectsEqual([{val: null}, {val: 2}, {val: 1}], 'val')
116+
})
117+
})

0 commit comments

Comments
 (0)