-
Notifications
You must be signed in to change notification settings - Fork 19
/
Copy pathfirebase-search.spec.js
106 lines (93 loc) · 2.7 KB
/
firebase-search.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
const admin = require('firebase-admin');
const env = require('./services/environment');
var credential = admin.credential.cert(env.firebaseConfig.serviceAccount);
admin.initializeApp({
databaseURL: env.firebaseConfig.databaseURL,
credential
});
const ref = admin.database().ref('firebase-search/test/algolia');
const FirebaseSearch = require('./firebase-search');
describe('Firebase Search', () => {
let search;
beforeEach(() => {
search = new FirebaseSearch(ref, env);
});
beforeEach(done =>
clean().then(() => {
search.algolia.search('test').then(res => {
expect(res.nbHits).toEqual(0);
done();
});
}));
afterAll(done => clean().then(done));
function clean() {
return ref.remove().then(() => search.algolia.clearIndex(true));
}
describe('Algolia', () => {
afterEach(done => {
search.removeAllListeners();
search.algolia.firebase.stop();
done();
});
it(
'should build',
done => {
const fakeEntries = createFakeEntries(10);
const updates = getUpdates(fakeEntries);
ref
.update(updates)
.then(() => search.algolia.firebase.build())
.then(() => search.algolia.search('test'))
.then(res => {
expect(res.nbHits).toEqual(10);
done();
})
.catch(done);
},
60000
);
it(
'should sync',
done => {
const fakeEntries = createFakeEntries(10);
const initialEntries = fakeEntries.slice(0, 4);
const secondaryEntries = fakeEntries.slice(5);
const initialUpdates = getUpdates(initialEntries);
const secondaryUpdates = getUpdates(secondaryEntries);
let counter = 0;
let recordsAdded = [];
search.on('algolia_child_added', function handleAlgoliaChildAdded(record) {
counter++;
recordsAdded.push(record.postId);
if (counter == 5) {
expect(recordsAdded.sort().join()).toEqual('test-0,test-1,test-2,test-3,test-4');
done();
}
});
ref.update(initialUpdates).then(() => search.algolia.firebase.start()).then(() => ref.update(secondaryUpdates));
},
60000
);
function getUpdates(entries) {
return entries.reduce(
(updates, entry) => {
updates[entry.postId] = entry;
return updates;
},
{}
);
}
function createFakeEntries(n = 5) {
var i = n;
var fakeEntries = [];
while (i--) {
fakeEntries.push({
postId: `test-${i}`,
userComment: `#fake #${i}`,
userCommentParts: ['#fake', `#${i}`]
});
}
return fakeEntries;
}
});
});