-
Notifications
You must be signed in to change notification settings - Fork 484
/
Copy pathjoins.spec.js
124 lines (108 loc) · 2.93 KB
/
joins.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
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
if (typeof(window) === 'undefined') var loki = require('../../src/lokijs.js');
describe('joins', function () {
var db, directors, films;
beforeEach(function () {
db = new loki('testJoins', {
persistenceMethod: null
}),
directors = db.addCollection('directors'),
films = db.addCollection('films');
directors.insert([{
name: 'Martin Scorsese',
directorId: 1
}, {
name: 'Francis Ford Coppola',
directorId: 2
}, {
name: 'Steven Spielberg',
directorId: 3
}, {
name: 'Quentin Tarantino',
directorId: 4
}]);
films.insert([{
title: 'Taxi',
filmId: 1,
directorId: 1
}, {
title: 'Raging Bull',
filmId: 2,
directorId: 1
}, {
title: 'The Godfather',
filmId: 3,
directorId: 2
}, {
title: 'Jaws',
filmId: 4,
directorId: 3
}, {
title: 'ET',
filmId: 5,
directorId: 3
}, {
title: 'Raiders of the Lost Ark',
filmId: 6,
directorId: 3
}]);
})
it('works', function () {
var joined;
//Basic non-mapped join
joined = films.eqJoin(directors.data, 'directorId', 'directorId').data();
expect(joined[0].left.title).toEqual('Taxi');
//Basic join with map
joined = films.eqJoin(directors.data, 'directorId', 'directorId', function (left, right) {
return {
filmTitle: left.title,
directorName: right.name
}
}).data();
expect(joined.length).toEqual(films.data.length);
expect(joined[0].filmTitle).toEqual('Taxi');
expect(joined[0].directorName).toEqual('Martin Scorsese');
//Basic non-mapped join with chained map
joined = films.eqJoin(directors.data, 'directorId', 'directorId')
.map(function (obj) {
return {
filmTitle: obj.left.title,
directorName: obj.right.name
}
}).data();
expect(joined[0].filmTitle).toEqual('Taxi');
expect(joined[0].directorName).toEqual('Martin Scorsese');
//Test filtered join
joined = films
.chain()
.find({
directorId: 3
})
.simplesort('title')
.eqJoin(directors.data, 'directorId', 'directorId', function (left, right) {
return {
filmTitle: left.title,
directorName: right.name
}
})
expect(joined.data().length).toEqual(3);
//Test chaining after join
joined.find({
filmTitle: 'Jaws'
});
expect(joined.data()[0].filmTitle).toEqual('Jaws');
//Test calculated keys
joined = films.chain().eqJoin(directors.data,
function (director) {
return director.directorId + 1
},
function (film) {
return film.directorId - 1
})
.data();
expect(joined[0].right.name).toEqual('Steven Spielberg');
});
});
// var Loki = require('../src/lokijs.js'),
// gordian = require('gordian'),
// suite = new gordian('testJoins'),
// suite.report();