-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.test.ts
145 lines (129 loc) · 5.53 KB
/
index.test.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
import { expect, test } from 'vitest'
// Modules loaded for testing.
import sortObjectsArray from './src/index'
// Objects Array to test.
const countries = [
{ name: 'Colombia', code: 'co', area: 1197411 },
{ name: 'Argentina', code: 'ar', area: 2766890 },
{ name: 'canada', code: 'ca', area: 9984670 },
{ name: 'NonExistingCountry' },
{ name: 'Brasil', code: 'br', area: 8511965 }
]
const countriesObj = {
Colombia: 1197411,
Argentina: 2766890,
canada: 9984670,
NonExistingCountry: null,
Brasil: 8511965
}
test('Testing normal sorting of the array by name property', () => {
expect.assertions(6)
const sortedArray = sortObjectsArray(countries, 'name')
expect(sortedArray[0].name).toBe('Argentina')
expect(sortedArray[1].name).toBe('Brasil')
expect(sortedArray[2].name).toBe('Colombia')
expect(sortedArray[4].name).toBe('canada')
expect(countries[0].name).toBe('Colombia')
expect(countries.length).toBe(sortedArray.length)
})
test('Testing desc sorting by the area property', () => {
expect.assertions(7)
const sortedArray = sortObjectsArray(countries, 'area', 'desc')
expect(sortedArray[0].name).toBe('canada')
expect(sortedArray[1].name).toBe('Brasil')
expect(sortedArray[2].name).toBe('Argentina')
expect(sortedArray[3].name).toBe('Colombia')
expect(sortedArray[4].name).toBe('NonExistingCountry')
expect(countries[0].name).toBe('Colombia')
expect(countries.length).toBe(sortedArray.length)
})
//
test('Testing desc sorting by the area property passing a configuration object with order', () => {
expect.assertions(7)
const sortedArray = sortObjectsArray(countries, 'area', { order: 'desc' })
expect(sortedArray[0].name).toBe('canada')
expect(sortedArray[1].name).toBe('Brasil')
expect(sortedArray[2].name).toBe('Argentina')
expect(sortedArray[3].name).toBe('Colombia')
expect(sortedArray[4].name).toBe('NonExistingCountry')
expect(countries[0].name).toBe('Colombia')
expect(countries.length).toBe(sortedArray.length)
})
test('Testing desc sorting by the area property passing a configuration object with order and case insensivity', () => {
expect.assertions(7)
const sortedArray = sortObjectsArray(countries, 'area', { order: 'desc', caseinsensitive: true })
expect(sortedArray[0].name).toBe('canada')
expect(sortedArray[1].name).toBe('Brasil')
expect(sortedArray[2].name).toBe('Argentina')
expect(sortedArray[3].name).toBe('Colombia')
expect(sortedArray[4].name).toBe('NonExistingCountry')
expect(countries[0].name).toBe('Colombia')
expect(countries.length).toBe(sortedArray.length)
})
test('Testing normal sorting of the array by name property passing a caseinsensitive flag', () => {
expect.assertions(6)
const sortedArray = sortObjectsArray(countries, 'name', { caseinsensitive: true })
expect(sortedArray[0].name).toBe('Argentina')
expect(sortedArray[1].name).toBe('Brasil')
expect(sortedArray[2].name).toBe('canada')
expect(sortedArray[3].name).toBe('Colombia')
expect(countries[0].name).toBe('Colombia')
expect(countries.length).toBe(sortedArray.length)
})
test('Testing sorting by non-existing property', () => {
expect.assertions(4)
const sortedArray = sortObjectsArray(countries, 'nonexistingproperty')
expect(sortedArray[0].name).toBe('Colombia')
expect(sortedArray[4].name).toBe('Brasil')
expect(countries[0].name).toBe('Colombia')
expect(countries.length).toBe(sortedArray.length)
})
test('Testing sorting by with missing property to sort', () => {
expect.assertions(4)
const sortedArray = sortObjectsArray(countries)
expect(sortedArray[0].name).toBe('Colombia')
expect(sortedArray[4].name).toBe('Brasil')
expect(countries[0].name).toBe('Colombia')
expect(countries.length).toBe(sortedArray.length)
})
test('Testing sorting an object by value', () => {
expect.assertions(3)
const sortedArray = sortObjectsArray(countriesObj, 'value', 'desc')
expect(sortedArray[0].key).toBe('canada')
expect(countriesObj.canada).toBe(9984670)
expect(Object.keys(countriesObj).length).toBe(sortedArray.length)
})
test('Testing sorting repeated fields', () => {
expect.assertions(5)
const sortedArray = sortObjectsArray([...countries, ...countries], 'area', 'desc')
expect(sortedArray[0].name).toBe('canada')
expect(sortedArray[0].area).toBe(9984670)
expect(sortedArray[1].name).toBe('canada')
expect(sortedArray[1].area).toBe(9984670)
expect([...countries, ...countries].length).toBe(sortedArray.length)
})
test('Testing sorting array of arrays', () => {
expect.assertions(5)
const sortedArray = sortObjectsArray([countries, countries], 'area', { flatten: true, order: 'desc' })
expect(sortedArray[0].name).toBe('canada')
expect(sortedArray[0].area).toBe(9984670)
expect(sortedArray[1].name).toBe('canada')
expect(sortedArray[1].area).toBe(9984670)
expect([...countries, ...countries].length).toBe(sortedArray.length)
})
test('Testing sorting array of arrays', () => {
expect.assertions(5)
const sortedArray = sortObjectsArray([countries, countries], 'area', { order: 'desc' })
expect(sortedArray[0][0].name).toBe('canada')
expect(sortedArray[0][0].area).toBe(9984670)
expect(sortedArray[1][0].name).toBe('canada')
expect(sortedArray[1][0].area).toBe(9984670)
expect([countries, countries].length).toBe(sortedArray.length)
})
test('Testing sorting array of arrays ommiting config object', () => {
expect.assertions(3)
const sortedArray = sortObjectsArray([countries, countries], 'name')
expect(sortedArray[0][0].name).toBe('Argentina')
expect(sortedArray[1][0].name).toBe('Argentina')
expect([countries, countries].length).toBe(sortedArray.length)
})