viewdb 0.10.0 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.prettierrc +1 -1
- package/LICENSE +22 -22
- package/README.md +416 -416
- package/jest.config.js +11 -11
- package/lib/cursor.js +84 -79
- package/lib/index.js +6 -6
- package/lib/inmemory/collection.js +112 -112
- package/lib/inmemory/store.js +19 -19
- package/lib/merger.js +62 -62
- package/lib/observe.js +53 -53
- package/lib/plugins/index.js +2 -2
- package/lib/plugins/viewdb_timestamp_plugin.js +106 -106
- package/lib/plugins/viewdb_versioning_plugin.js +93 -93
- package/package.json +37 -37
- package/test/cursor.js +101 -101
- package/test/merger.js +196 -196
- package/test/observe.js +165 -165
- package/test/plugins/viewdb_timestamp_plugin.js +159 -159
- package/test/plugins/viewdb_versioning_plugin.js +112 -112
package/test/cursor.js
CHANGED
|
@@ -1,101 +1,101 @@
|
|
|
1
|
-
var Cursor = require('../lib/cursor');
|
|
2
|
-
var ViewDB = require('..');
|
|
3
|
-
|
|
4
|
-
describe('Cursor', () => {
|
|
5
|
-
it('#toArray', (done) => {
|
|
6
|
-
var cursor = new Cursor(null, {}, null, function (query, callback) {
|
|
7
|
-
callback(null, [1, 2, 3, 4]);
|
|
8
|
-
});
|
|
9
|
-
cursor.toArray(function (err, result) {
|
|
10
|
-
expect(result.length).toBe(4);
|
|
11
|
-
done();
|
|
12
|
-
});
|
|
13
|
-
});
|
|
14
|
-
it('#forEach', (done) => {
|
|
15
|
-
var cursor = new Cursor(null, {}, null, function (query, callback) {
|
|
16
|
-
callback(null, [1, 2, 3, 4]);
|
|
17
|
-
});
|
|
18
|
-
var calls = 0;
|
|
19
|
-
cursor.forEach(function (result) {
|
|
20
|
-
expect(result).toBeTruthy();
|
|
21
|
-
calls++;
|
|
22
|
-
});
|
|
23
|
-
setTimeout(function () {
|
|
24
|
-
expect(calls).toBe(4);
|
|
25
|
-
done();
|
|
26
|
-
}, 0);
|
|
27
|
-
});
|
|
28
|
-
it('#skip', (done) => {
|
|
29
|
-
var db = new ViewDB();
|
|
30
|
-
var collection = db.collection('documents');
|
|
31
|
-
for (var i = 0; i < 10; i++) {
|
|
32
|
-
collection.insert({ a: 'a', id: i });
|
|
33
|
-
}
|
|
34
|
-
collection
|
|
35
|
-
.find({ a: 'a' })
|
|
36
|
-
.skip(5)
|
|
37
|
-
.toArray(function (err, res) {
|
|
38
|
-
expect(res.length).toBe(5);
|
|
39
|
-
done();
|
|
40
|
-
});
|
|
41
|
-
});
|
|
42
|
-
it('#limit', (done) => {
|
|
43
|
-
var db = new ViewDB();
|
|
44
|
-
var collection = db.collection('documents');
|
|
45
|
-
for (var i = 0; i < 10; i++) {
|
|
46
|
-
collection.insert({ a: 'a', id: i });
|
|
47
|
-
}
|
|
48
|
-
collection
|
|
49
|
-
.find({ a: 'a' })
|
|
50
|
-
.limit(9)
|
|
51
|
-
.toArray(function (err, res) {
|
|
52
|
-
expect(res[8].id).toBe(8);
|
|
53
|
-
expect(res.length).toBe(9);
|
|
54
|
-
done();
|
|
55
|
-
});
|
|
56
|
-
});
|
|
57
|
-
it('#sort', (done) => {
|
|
58
|
-
var db = new ViewDB();
|
|
59
|
-
var collection = db.collection('documents');
|
|
60
|
-
for (var i = 0; i < 10; i++) {
|
|
61
|
-
collection.insert({ a: 'a', id: i });
|
|
62
|
-
}
|
|
63
|
-
collection
|
|
64
|
-
.find({})
|
|
65
|
-
.sort({ id: 1 })
|
|
66
|
-
.toArray(function (err, res) {
|
|
67
|
-
expect(res[0].id).toBe(0);
|
|
68
|
-
done();
|
|
69
|
-
});
|
|
70
|
-
});
|
|
71
|
-
it('#sort desc', (done) => {
|
|
72
|
-
var db = new ViewDB();
|
|
73
|
-
var collection = db.collection('documents');
|
|
74
|
-
for (var i = 0; i < 10; i++) {
|
|
75
|
-
collection.insert({ a: 'a', id: i });
|
|
76
|
-
}
|
|
77
|
-
collection
|
|
78
|
-
.find({})
|
|
79
|
-
.sort({ id: -1 })
|
|
80
|
-
.toArray(function (err, res) {
|
|
81
|
-
expect(res[0].id).toBe(9);
|
|
82
|
-
done();
|
|
83
|
-
});
|
|
84
|
-
});
|
|
85
|
-
it('#skip/limit', (done) => {
|
|
86
|
-
var db = new ViewDB();
|
|
87
|
-
var collection = db.collection('documents');
|
|
88
|
-
for (var i = 0; i < 10; i++) {
|
|
89
|
-
collection.insert({ a: 'a', id: i });
|
|
90
|
-
}
|
|
91
|
-
collection
|
|
92
|
-
.find({ a: 'a' })
|
|
93
|
-
.skip(8)
|
|
94
|
-
.limit(10)
|
|
95
|
-
.toArray(function (err, res) {
|
|
96
|
-
expect(res[1].id).toBe(9);
|
|
97
|
-
expect(res.length).toBe(2); // only 2 left after skipping 8/10
|
|
98
|
-
done();
|
|
99
|
-
});
|
|
100
|
-
});
|
|
101
|
-
});
|
|
1
|
+
var Cursor = require('../lib/cursor');
|
|
2
|
+
var ViewDB = require('..');
|
|
3
|
+
|
|
4
|
+
describe('Cursor', () => {
|
|
5
|
+
it('#toArray', (done) => {
|
|
6
|
+
var cursor = new Cursor(null, {}, null, function (query, callback) {
|
|
7
|
+
callback(null, [1, 2, 3, 4]);
|
|
8
|
+
});
|
|
9
|
+
cursor.toArray(function (err, result) {
|
|
10
|
+
expect(result.length).toBe(4);
|
|
11
|
+
done();
|
|
12
|
+
});
|
|
13
|
+
});
|
|
14
|
+
it('#forEach', (done) => {
|
|
15
|
+
var cursor = new Cursor(null, {}, null, function (query, callback) {
|
|
16
|
+
callback(null, [1, 2, 3, 4]);
|
|
17
|
+
});
|
|
18
|
+
var calls = 0;
|
|
19
|
+
cursor.forEach(function (result) {
|
|
20
|
+
expect(result).toBeTruthy();
|
|
21
|
+
calls++;
|
|
22
|
+
});
|
|
23
|
+
setTimeout(function () {
|
|
24
|
+
expect(calls).toBe(4);
|
|
25
|
+
done();
|
|
26
|
+
}, 0);
|
|
27
|
+
});
|
|
28
|
+
it('#skip', (done) => {
|
|
29
|
+
var db = new ViewDB();
|
|
30
|
+
var collection = db.collection('documents');
|
|
31
|
+
for (var i = 0; i < 10; i++) {
|
|
32
|
+
collection.insert({ a: 'a', id: i });
|
|
33
|
+
}
|
|
34
|
+
collection
|
|
35
|
+
.find({ a: 'a' })
|
|
36
|
+
.skip(5)
|
|
37
|
+
.toArray(function (err, res) {
|
|
38
|
+
expect(res.length).toBe(5);
|
|
39
|
+
done();
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
it('#limit', (done) => {
|
|
43
|
+
var db = new ViewDB();
|
|
44
|
+
var collection = db.collection('documents');
|
|
45
|
+
for (var i = 0; i < 10; i++) {
|
|
46
|
+
collection.insert({ a: 'a', id: i });
|
|
47
|
+
}
|
|
48
|
+
collection
|
|
49
|
+
.find({ a: 'a' })
|
|
50
|
+
.limit(9)
|
|
51
|
+
.toArray(function (err, res) {
|
|
52
|
+
expect(res[8].id).toBe(8);
|
|
53
|
+
expect(res.length).toBe(9);
|
|
54
|
+
done();
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
it('#sort', (done) => {
|
|
58
|
+
var db = new ViewDB();
|
|
59
|
+
var collection = db.collection('documents');
|
|
60
|
+
for (var i = 0; i < 10; i++) {
|
|
61
|
+
collection.insert({ a: 'a', id: i });
|
|
62
|
+
}
|
|
63
|
+
collection
|
|
64
|
+
.find({})
|
|
65
|
+
.sort({ id: 1 })
|
|
66
|
+
.toArray(function (err, res) {
|
|
67
|
+
expect(res[0].id).toBe(0);
|
|
68
|
+
done();
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
it('#sort desc', (done) => {
|
|
72
|
+
var db = new ViewDB();
|
|
73
|
+
var collection = db.collection('documents');
|
|
74
|
+
for (var i = 0; i < 10; i++) {
|
|
75
|
+
collection.insert({ a: 'a', id: i });
|
|
76
|
+
}
|
|
77
|
+
collection
|
|
78
|
+
.find({})
|
|
79
|
+
.sort({ id: -1 })
|
|
80
|
+
.toArray(function (err, res) {
|
|
81
|
+
expect(res[0].id).toBe(9);
|
|
82
|
+
done();
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
it('#skip/limit', (done) => {
|
|
86
|
+
var db = new ViewDB();
|
|
87
|
+
var collection = db.collection('documents');
|
|
88
|
+
for (var i = 0; i < 10; i++) {
|
|
89
|
+
collection.insert({ a: 'a', id: i });
|
|
90
|
+
}
|
|
91
|
+
collection
|
|
92
|
+
.find({ a: 'a' })
|
|
93
|
+
.skip(8)
|
|
94
|
+
.limit(10)
|
|
95
|
+
.toArray(function (err, res) {
|
|
96
|
+
expect(res[1].id).toBe(9);
|
|
97
|
+
expect(res.length).toBe(2); // only 2 left after skipping 8/10
|
|
98
|
+
done();
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
});
|
package/test/merger.js
CHANGED
|
@@ -1,196 +1,196 @@
|
|
|
1
|
-
var _ = require('lodash');
|
|
2
|
-
var merge = require('../lib/merger');
|
|
3
|
-
|
|
4
|
-
describe('Merger', () => {
|
|
5
|
-
it('#merge with remove element', (done) => {
|
|
6
|
-
var l1 = [{ a: 1 }, 'b', 'd'];
|
|
7
|
-
var l2 = [{ a: 1 }, 'b'];
|
|
8
|
-
|
|
9
|
-
var res = merge(l1, l2, {
|
|
10
|
-
removed: function (e) {
|
|
11
|
-
expect(e).toBe('d');
|
|
12
|
-
done();
|
|
13
|
-
},
|
|
14
|
-
comparatorId: _.isEqual,
|
|
15
|
-
comparator: _.isEqual
|
|
16
|
-
});
|
|
17
|
-
expect(_.isEqual(l2, res)).toBe(true);
|
|
18
|
-
|
|
19
|
-
// console.log(_.difference(l1,l2));
|
|
20
|
-
});
|
|
21
|
-
it('#merge with remove complex element', (done) => {
|
|
22
|
-
var l1 = [{ a: 1 }, 'b', 'd', { e: 1 }];
|
|
23
|
-
var l2 = [{ a: 1 }, 'b'];
|
|
24
|
-
var removed = [];
|
|
25
|
-
var res = merge(l1, l2, {
|
|
26
|
-
removed: function (e) {
|
|
27
|
-
removed.push(e);
|
|
28
|
-
},
|
|
29
|
-
comparatorId: _.isEqual,
|
|
30
|
-
comparator: _.isEqual
|
|
31
|
-
});
|
|
32
|
-
expect(removed.length).toBe(2);
|
|
33
|
-
expect(_.isEqual(l2, res)).toBe(true);
|
|
34
|
-
done();
|
|
35
|
-
|
|
36
|
-
// console.log(_.difference(l1,l2));
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
it('#merge with objects instead of arrays', (done) => {
|
|
40
|
-
var l1 = { 0: { a: 1 }, 1: 'b', 2: 'd', 3: { e: 1 } };
|
|
41
|
-
var l2 = [{ a: 1 }, 'b'];
|
|
42
|
-
var removed = [];
|
|
43
|
-
var res = merge(l1, l2, {
|
|
44
|
-
removed: function (e) {
|
|
45
|
-
removed.push(e);
|
|
46
|
-
},
|
|
47
|
-
comparatorId: _.isEqual,
|
|
48
|
-
comparator: _.isEqual
|
|
49
|
-
});
|
|
50
|
-
expect(removed.length).toBe(2);
|
|
51
|
-
expect(_.isEqual(l2, res)).toBe(true);
|
|
52
|
-
done();
|
|
53
|
-
|
|
54
|
-
// console.log(_.difference(l1,l2));
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
it('#merge with one add element', (done) => {
|
|
58
|
-
var l1 = [{ a: 1 }, 'b'];
|
|
59
|
-
var l2 = [{ a: 1 }, 'b', 'c'];
|
|
60
|
-
|
|
61
|
-
var res = merge(l1, l2, {
|
|
62
|
-
added: function (e) {
|
|
63
|
-
expect(e).toBe('c');
|
|
64
|
-
done();
|
|
65
|
-
},
|
|
66
|
-
removed: function () {
|
|
67
|
-
done(new Error('should not be called'));
|
|
68
|
-
}
|
|
69
|
-
});
|
|
70
|
-
expect(_.isEqual(l2, res)).toBe(true);
|
|
71
|
-
});
|
|
72
|
-
it('#merge with one complex add element', (done) => {
|
|
73
|
-
var l1 = [{ a: 1 }, 'b'];
|
|
74
|
-
var l2 = [{ a: 1 }, 'b', { c: 1 }];
|
|
75
|
-
|
|
76
|
-
var res = merge(l1, l2, {
|
|
77
|
-
added: function (e) {
|
|
78
|
-
expect(_.isEqual(e, { c: 1 })).toBe(true);
|
|
79
|
-
done();
|
|
80
|
-
},
|
|
81
|
-
removed: function () {
|
|
82
|
-
done(new Error('should not be called'));
|
|
83
|
-
}
|
|
84
|
-
});
|
|
85
|
-
expect(_.isEqual(l2, res)).toBe(true);
|
|
86
|
-
});
|
|
87
|
-
it('#merge with one move element', (done) => {
|
|
88
|
-
var l1 = [{ a: 1 }, 'b', { c: 1 }];
|
|
89
|
-
var l2 = [{ a: 1 }, { c: 1 }, 'b'];
|
|
90
|
-
var moved = [];
|
|
91
|
-
var res = merge(l1, l2, {
|
|
92
|
-
added: function () {
|
|
93
|
-
done(new Error('should not be called'));
|
|
94
|
-
},
|
|
95
|
-
removed: function () {
|
|
96
|
-
done(new Error('should not be called'));
|
|
97
|
-
},
|
|
98
|
-
moved: function (e, oldIndex, newIndex) {
|
|
99
|
-
moved.push(arguments);
|
|
100
|
-
}
|
|
101
|
-
});
|
|
102
|
-
expect(moved.length).toBe(1);
|
|
103
|
-
|
|
104
|
-
expect(_.isEqual(l2, res)).toBe(true);
|
|
105
|
-
|
|
106
|
-
done();
|
|
107
|
-
});
|
|
108
|
-
it('#merge with one changing elements', (done) => {
|
|
109
|
-
var l1 = [{ _id: 1, a: 'Hello' }];
|
|
110
|
-
var l2 = [{ _id: 1, a: 'Hej' }];
|
|
111
|
-
var res = merge(l1, l2, {
|
|
112
|
-
added: function () {
|
|
113
|
-
done(new Error('should not be called'));
|
|
114
|
-
},
|
|
115
|
-
removed: function () {
|
|
116
|
-
done(new Error('should not be called'));
|
|
117
|
-
},
|
|
118
|
-
moved: function () {
|
|
119
|
-
done(new Error('should not be called'));
|
|
120
|
-
},
|
|
121
|
-
changed: function (o, n, index) {},
|
|
122
|
-
comparatorId: function (a, b) {
|
|
123
|
-
return a._id === b._id;
|
|
124
|
-
}
|
|
125
|
-
});
|
|
126
|
-
expect(_.isEqual(l2, res)).toBe(true);
|
|
127
|
-
done();
|
|
128
|
-
});
|
|
129
|
-
|
|
130
|
-
it('#merge true and false array', (done) => {
|
|
131
|
-
var l1 = [true, false];
|
|
132
|
-
var l2 = [false, true];
|
|
133
|
-
var res = merge(l1, l2);
|
|
134
|
-
expect(_.isEqual(l2, res)).toBe(true);
|
|
135
|
-
done();
|
|
136
|
-
});
|
|
137
|
-
it('#merge complex moves', (done) => {
|
|
138
|
-
var l1 = [
|
|
139
|
-
{ _id: 1, a: 'Hello1' },
|
|
140
|
-
{ _id: 2, a: 'Hello2' },
|
|
141
|
-
{ _id: 3, a: 'Hello3' },
|
|
142
|
-
{ _id: 4, a: 'Hello4' }
|
|
143
|
-
];
|
|
144
|
-
var l2 = [
|
|
145
|
-
{ _id: 4, a: 'Hej4' },
|
|
146
|
-
{ _id: 3, a: 'Hej3' },
|
|
147
|
-
{ _id: 2, a: 'Hej2' },
|
|
148
|
-
{ _id: 1, a: 'Hej1' }
|
|
149
|
-
];
|
|
150
|
-
|
|
151
|
-
var res = merge(
|
|
152
|
-
l1,
|
|
153
|
-
l2,
|
|
154
|
-
_.defaults(
|
|
155
|
-
{
|
|
156
|
-
comparatorId: function (a, b) {
|
|
157
|
-
return a._id === b._id;
|
|
158
|
-
}
|
|
159
|
-
},
|
|
160
|
-
{}
|
|
161
|
-
)
|
|
162
|
-
);
|
|
163
|
-
expect(_.isEqual(l2, res)).toBe(true);
|
|
164
|
-
done();
|
|
165
|
-
});
|
|
166
|
-
it('#merge complex moves and add and remove', (done) => {
|
|
167
|
-
var l1 = [
|
|
168
|
-
{ _id: 1, a: 'Hello1' },
|
|
169
|
-
{ _id: 2, a: 'Hello2' },
|
|
170
|
-
{ _id: 3, a: 'Hello3' },
|
|
171
|
-
{ _id: 4, a: 'Hello4' }
|
|
172
|
-
];
|
|
173
|
-
var l2 = [
|
|
174
|
-
{ _id: 4, a: 'Hej4' },
|
|
175
|
-
{ _id: 99, a: 'Hej99' },
|
|
176
|
-
{ _id: 2, a: 'Hej2' },
|
|
177
|
-
{ _id: 1, a: 'Hej1' },
|
|
178
|
-
{ _id: 100, a: 'Hej100' }
|
|
179
|
-
];
|
|
180
|
-
|
|
181
|
-
var res = merge(
|
|
182
|
-
l1,
|
|
183
|
-
l2,
|
|
184
|
-
_.defaults(
|
|
185
|
-
{
|
|
186
|
-
comparatorId: function (a, b) {
|
|
187
|
-
return a._id === b._id;
|
|
188
|
-
}
|
|
189
|
-
},
|
|
190
|
-
{}
|
|
191
|
-
)
|
|
192
|
-
);
|
|
193
|
-
expect(_.isEqual(l2, res)).toBe(true);
|
|
194
|
-
done();
|
|
195
|
-
});
|
|
196
|
-
});
|
|
1
|
+
var _ = require('lodash');
|
|
2
|
+
var merge = require('../lib/merger');
|
|
3
|
+
|
|
4
|
+
describe('Merger', () => {
|
|
5
|
+
it('#merge with remove element', (done) => {
|
|
6
|
+
var l1 = [{ a: 1 }, 'b', 'd'];
|
|
7
|
+
var l2 = [{ a: 1 }, 'b'];
|
|
8
|
+
|
|
9
|
+
var res = merge(l1, l2, {
|
|
10
|
+
removed: function (e) {
|
|
11
|
+
expect(e).toBe('d');
|
|
12
|
+
done();
|
|
13
|
+
},
|
|
14
|
+
comparatorId: _.isEqual,
|
|
15
|
+
comparator: _.isEqual
|
|
16
|
+
});
|
|
17
|
+
expect(_.isEqual(l2, res)).toBe(true);
|
|
18
|
+
|
|
19
|
+
// console.log(_.difference(l1,l2));
|
|
20
|
+
});
|
|
21
|
+
it('#merge with remove complex element', (done) => {
|
|
22
|
+
var l1 = [{ a: 1 }, 'b', 'd', { e: 1 }];
|
|
23
|
+
var l2 = [{ a: 1 }, 'b'];
|
|
24
|
+
var removed = [];
|
|
25
|
+
var res = merge(l1, l2, {
|
|
26
|
+
removed: function (e) {
|
|
27
|
+
removed.push(e);
|
|
28
|
+
},
|
|
29
|
+
comparatorId: _.isEqual,
|
|
30
|
+
comparator: _.isEqual
|
|
31
|
+
});
|
|
32
|
+
expect(removed.length).toBe(2);
|
|
33
|
+
expect(_.isEqual(l2, res)).toBe(true);
|
|
34
|
+
done();
|
|
35
|
+
|
|
36
|
+
// console.log(_.difference(l1,l2));
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
it('#merge with objects instead of arrays', (done) => {
|
|
40
|
+
var l1 = { 0: { a: 1 }, 1: 'b', 2: 'd', 3: { e: 1 } };
|
|
41
|
+
var l2 = [{ a: 1 }, 'b'];
|
|
42
|
+
var removed = [];
|
|
43
|
+
var res = merge(l1, l2, {
|
|
44
|
+
removed: function (e) {
|
|
45
|
+
removed.push(e);
|
|
46
|
+
},
|
|
47
|
+
comparatorId: _.isEqual,
|
|
48
|
+
comparator: _.isEqual
|
|
49
|
+
});
|
|
50
|
+
expect(removed.length).toBe(2);
|
|
51
|
+
expect(_.isEqual(l2, res)).toBe(true);
|
|
52
|
+
done();
|
|
53
|
+
|
|
54
|
+
// console.log(_.difference(l1,l2));
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
it('#merge with one add element', (done) => {
|
|
58
|
+
var l1 = [{ a: 1 }, 'b'];
|
|
59
|
+
var l2 = [{ a: 1 }, 'b', 'c'];
|
|
60
|
+
|
|
61
|
+
var res = merge(l1, l2, {
|
|
62
|
+
added: function (e) {
|
|
63
|
+
expect(e).toBe('c');
|
|
64
|
+
done();
|
|
65
|
+
},
|
|
66
|
+
removed: function () {
|
|
67
|
+
done(new Error('should not be called'));
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
expect(_.isEqual(l2, res)).toBe(true);
|
|
71
|
+
});
|
|
72
|
+
it('#merge with one complex add element', (done) => {
|
|
73
|
+
var l1 = [{ a: 1 }, 'b'];
|
|
74
|
+
var l2 = [{ a: 1 }, 'b', { c: 1 }];
|
|
75
|
+
|
|
76
|
+
var res = merge(l1, l2, {
|
|
77
|
+
added: function (e) {
|
|
78
|
+
expect(_.isEqual(e, { c: 1 })).toBe(true);
|
|
79
|
+
done();
|
|
80
|
+
},
|
|
81
|
+
removed: function () {
|
|
82
|
+
done(new Error('should not be called'));
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
expect(_.isEqual(l2, res)).toBe(true);
|
|
86
|
+
});
|
|
87
|
+
it('#merge with one move element', (done) => {
|
|
88
|
+
var l1 = [{ a: 1 }, 'b', { c: 1 }];
|
|
89
|
+
var l2 = [{ a: 1 }, { c: 1 }, 'b'];
|
|
90
|
+
var moved = [];
|
|
91
|
+
var res = merge(l1, l2, {
|
|
92
|
+
added: function () {
|
|
93
|
+
done(new Error('should not be called'));
|
|
94
|
+
},
|
|
95
|
+
removed: function () {
|
|
96
|
+
done(new Error('should not be called'));
|
|
97
|
+
},
|
|
98
|
+
moved: function (e, oldIndex, newIndex) {
|
|
99
|
+
moved.push(arguments);
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
expect(moved.length).toBe(1);
|
|
103
|
+
|
|
104
|
+
expect(_.isEqual(l2, res)).toBe(true);
|
|
105
|
+
|
|
106
|
+
done();
|
|
107
|
+
});
|
|
108
|
+
it('#merge with one changing elements', (done) => {
|
|
109
|
+
var l1 = [{ _id: 1, a: 'Hello' }];
|
|
110
|
+
var l2 = [{ _id: 1, a: 'Hej' }];
|
|
111
|
+
var res = merge(l1, l2, {
|
|
112
|
+
added: function () {
|
|
113
|
+
done(new Error('should not be called'));
|
|
114
|
+
},
|
|
115
|
+
removed: function () {
|
|
116
|
+
done(new Error('should not be called'));
|
|
117
|
+
},
|
|
118
|
+
moved: function () {
|
|
119
|
+
done(new Error('should not be called'));
|
|
120
|
+
},
|
|
121
|
+
changed: function (o, n, index) {},
|
|
122
|
+
comparatorId: function (a, b) {
|
|
123
|
+
return a._id === b._id;
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
expect(_.isEqual(l2, res)).toBe(true);
|
|
127
|
+
done();
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
it('#merge true and false array', (done) => {
|
|
131
|
+
var l1 = [true, false];
|
|
132
|
+
var l2 = [false, true];
|
|
133
|
+
var res = merge(l1, l2);
|
|
134
|
+
expect(_.isEqual(l2, res)).toBe(true);
|
|
135
|
+
done();
|
|
136
|
+
});
|
|
137
|
+
it('#merge complex moves', (done) => {
|
|
138
|
+
var l1 = [
|
|
139
|
+
{ _id: 1, a: 'Hello1' },
|
|
140
|
+
{ _id: 2, a: 'Hello2' },
|
|
141
|
+
{ _id: 3, a: 'Hello3' },
|
|
142
|
+
{ _id: 4, a: 'Hello4' }
|
|
143
|
+
];
|
|
144
|
+
var l2 = [
|
|
145
|
+
{ _id: 4, a: 'Hej4' },
|
|
146
|
+
{ _id: 3, a: 'Hej3' },
|
|
147
|
+
{ _id: 2, a: 'Hej2' },
|
|
148
|
+
{ _id: 1, a: 'Hej1' }
|
|
149
|
+
];
|
|
150
|
+
|
|
151
|
+
var res = merge(
|
|
152
|
+
l1,
|
|
153
|
+
l2,
|
|
154
|
+
_.defaults(
|
|
155
|
+
{
|
|
156
|
+
comparatorId: function (a, b) {
|
|
157
|
+
return a._id === b._id;
|
|
158
|
+
}
|
|
159
|
+
},
|
|
160
|
+
{}
|
|
161
|
+
)
|
|
162
|
+
);
|
|
163
|
+
expect(_.isEqual(l2, res)).toBe(true);
|
|
164
|
+
done();
|
|
165
|
+
});
|
|
166
|
+
it('#merge complex moves and add and remove', (done) => {
|
|
167
|
+
var l1 = [
|
|
168
|
+
{ _id: 1, a: 'Hello1' },
|
|
169
|
+
{ _id: 2, a: 'Hello2' },
|
|
170
|
+
{ _id: 3, a: 'Hello3' },
|
|
171
|
+
{ _id: 4, a: 'Hello4' }
|
|
172
|
+
];
|
|
173
|
+
var l2 = [
|
|
174
|
+
{ _id: 4, a: 'Hej4' },
|
|
175
|
+
{ _id: 99, a: 'Hej99' },
|
|
176
|
+
{ _id: 2, a: 'Hej2' },
|
|
177
|
+
{ _id: 1, a: 'Hej1' },
|
|
178
|
+
{ _id: 100, a: 'Hej100' }
|
|
179
|
+
];
|
|
180
|
+
|
|
181
|
+
var res = merge(
|
|
182
|
+
l1,
|
|
183
|
+
l2,
|
|
184
|
+
_.defaults(
|
|
185
|
+
{
|
|
186
|
+
comparatorId: function (a, b) {
|
|
187
|
+
return a._id === b._id;
|
|
188
|
+
}
|
|
189
|
+
},
|
|
190
|
+
{}
|
|
191
|
+
)
|
|
192
|
+
);
|
|
193
|
+
expect(_.isEqual(l2, res)).toBe(true);
|
|
194
|
+
done();
|
|
195
|
+
});
|
|
196
|
+
});
|