-
Notifications
You must be signed in to change notification settings - Fork 87
/
sortObject.spec.js
49 lines (40 loc) · 1.18 KB
/
sortObject.spec.js
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
import {runTests} from 'helpers-fn'
import {allTrue} from './allTrue'
import {equals} from './equals'
import {sortObject} from './sortObject'
const obj = {
c: 1,
a: 2,
b: 3,
}
const predicateA = (propA, propB, valueA, valueB) => (propA > propB ? -1 : 1)
const expectationA = ['c', 'b', 'a']
const predicateB = (propA, propB, valueA, valueB) => (propA < propB ? -1 : 1)
const expectationB = ['a', 'b', 'c']
const predicateC = (propA, propB, valueA, valueB) =>
valueA > valueB ? -1 : 1
const expectationC = ['b', 'a', 'c']
const fn = ([predicate, expectation]) => {
const result = sortObject(predicate, obj)
const curriedResult = sortObject(predicate)(obj)
const sortedKeys = Object.keys(result)
const sortedKeysCurried = Object.keys(curriedResult)
const isSameObject = equals(obj, result)
const isSameObjectCurried = equals(obj, curriedResult)
return allTrue(
isSameObject,
isSameObjectCurried,
equals(sortedKeys, expectation),
equals(sortedKeysCurried, expectation)
)
}
const testData = {
label: 'foo',
data: [
{ok: [predicateA, expectationA]},
{ok: [predicateB, expectationB]},
{ok: [predicateC, expectationC]},
],
fn,
}
runTests(testData)