-
Notifications
You must be signed in to change notification settings - Fork 0
/
match.test.js
67 lines (54 loc) · 2.19 KB
/
match.test.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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
const { match, tap } = require("../src/datamix");
describe("match", () => {
it("uses strict equality with values as predicates", function () {
expect(match(42, 42)) .toStrictEqual(true);
expect(match(true, true)) .toStrictEqual(true);
expect(match(true, "true")).toStrictEqual(false);
});
it("uses callback predicates", function () {
expect(match(true, v => !! v)).toStrictEqual(true);
expect(match("true", v => !! v)).toStrictEqual(true);
});
it("handles path predicates", function () {
expect(match({a: {x: 1, y: 2}, b: 3}, {'a.x': 1, b: 3})) .toStrictEqual(true);
expect(match({a: {x: 1, y: 2}, b: 3}, {'a.x': 1, 'a.y': 3})).toStrictEqual(false);
});
it("handles entries predicates", function () {
expect(match({a: {x: 1, y: 2}, b: 3}, [['a.x', 1], ['b', 3]]))
.toStrictEqual(true);
expect(match({a: {x: 1, y: 2}, b: 3}, [['a.x', 1], ['a.y', 3]]))
.toStrictEqual(false);
});
it("handles entries + callback predicates", function () {
expect(match({a: {x: 1, y: 2}, b: 3}, [['a.x', v => v < 2]]))
.toStrictEqual(true);
expect(match({a: {x: 1, y: 2}, b: 3}, [['a.x', v => v > 2]]))
.toStrictEqual(false);
});
it("handles objects + callback predicates", function () {
expect(match({a: {x: 1, y: 2}, b: 3}, {'a.x': v => v < 2}))
.toStrictEqual(true);
expect(match({a: {x: 1, y: 2}, b: 3}, {'a.x': v => v > 2}))
.toStrictEqual(false);
});
it("handles wildcard paths", function () {
let users = [{
name: "Jane",
contacts: [{email: "paul@mail.com"}],
}, {
name: "Fred",
contacts: [{email: "john@mail.com"}, {email: "judy@mail.com"}],
}];
expect(match(users, {
"*.contacts.*.email": emails => emails.indexOf('john@mail.com') !== -1,
})).toStrictEqual(true);
});
it("coerces callback values into boolean", function () {
expect(match(42, v => v)).toStrictEqual(true);
expect(match([], v => v)).toStrictEqual(true);
expect(match({}, v => v)).toStrictEqual(true);
expect(match(0, v => v)).toStrictEqual(false);
expect(match(null, v => v)).toStrictEqual(false);
expect(match(undefined, v => v)).toStrictEqual(false);
});
});