@entropic-bond/firebase-admin 1.5.0 → 1.6.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.
@@ -1,401 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- /**
7
- * @jest-environment node
8
- */
9
- const node_dns_1 = __importDefault(require("node:dns"));
10
- const entropic_bond_1 = require("entropic-bond");
11
- const firebase_admin_datasource_1 = require("./firebase-admin-datasource");
12
- const firebase_admin_helper_1 = require("../firebase-admin-helper");
13
- const test_user_1 = require("../mocks/test-user");
14
- const mock_data_json_1 = __importDefault(require("../mocks/mock-data.json"));
15
- node_dns_1.default.setDefaultResultOrder('ipv4first');
16
- process.env['FIRESTORE_EMULATOR_HOST'] = 'localhost:9080';
17
- async function loadTestData(model) {
18
- const users = Object.values(mock_data_json_1.default.TestUser);
19
- await Promise.all(users.map(userObj => {
20
- const user = entropic_bond_1.Persistent.createInstance(userObj);
21
- return model.save(user);
22
- }));
23
- }
24
- describe('Firestore Model', () => {
25
- let model;
26
- let testUser;
27
- firebase_admin_helper_1.FirebaseAdminHelper.setFirebaseConfig({
28
- projectId: "demo-test",
29
- });
30
- beforeEach(async () => {
31
- entropic_bond_1.Store.useDataSource(new firebase_admin_datasource_1.FirebaseAdminDatasource());
32
- testUser = new test_user_1.TestUser();
33
- testUser.name = {
34
- firstName: 'testUserFirstName',
35
- lastName: 'testUserLastName'
36
- };
37
- testUser.age = 35;
38
- testUser.skills = ['lazy', 'dirty'];
39
- model = entropic_bond_1.Store.getModel('TestUser');
40
- await loadTestData(model);
41
- });
42
- afterEach(async () => {
43
- await fetch('http://localhost:9080/emulator/v1/projects/demo-test/databases/(default)/documents', {
44
- method: 'DELETE'
45
- });
46
- });
47
- it('should find document by id', async () => {
48
- await model.save(testUser);
49
- const user = await model.findById(testUser.id);
50
- expect(user).toBeInstanceOf(test_user_1.TestUser);
51
- expect(user?.id).toEqual(testUser.id);
52
- expect(user?.name?.firstName).toEqual('testUserFirstName');
53
- });
54
- it('should write a document', async () => {
55
- await model.save(testUser);
56
- const newUser = await model.findById(testUser.id);
57
- expect(newUser?.name).toEqual({
58
- firstName: 'testUserFirstName',
59
- lastName: 'testUserLastName'
60
- });
61
- });
62
- it('should delete a document by id', async () => {
63
- await model.save(testUser);
64
- const newUser = await model.findById(testUser.id);
65
- expect(newUser?.age).toBe(35);
66
- await model.delete(testUser.id);
67
- const deletedUser = await model.findById(testUser.id);
68
- expect(deletedUser).toBeUndefined();
69
- });
70
- it('should not throw if a document id doesn\'t exists', (done) => {
71
- expect(() => {
72
- model.findById('nonExistingId')
73
- .then(done)
74
- .catch(done);
75
- }).not.toThrow();
76
- });
77
- it('should return undefined if a document id doesn\'t exists', async () => {
78
- expect(await model.findById('nonExistingId')).toBeUndefined();
79
- });
80
- it('should retrieve array fields', async () => {
81
- await model.save(testUser);
82
- const newUser = await model.findById(testUser.id);
83
- expect(Array.isArray(newUser?.skills)).toBeTruthy();
84
- expect(newUser?.skills).toEqual(expect.arrayContaining(['lazy', 'dirty']));
85
- });
86
- it('should retrieve object fields', async () => {
87
- await model.save(testUser);
88
- const newUser = await model.findById(testUser.id);
89
- expect(newUser?.name).toEqual({
90
- firstName: 'testUserFirstName',
91
- lastName: 'testUserLastName'
92
- });
93
- });
94
- describe('Generic find', () => {
95
- it('should query all admins with query object', async () => {
96
- testUser.admin = true;
97
- await model.save(testUser);
98
- const admins = await model.query({
99
- operations: [{
100
- property: 'admin',
101
- operator: '==',
102
- value: true
103
- }]
104
- });
105
- expect(admins.length).toBeGreaterThanOrEqual(1);
106
- expect(admins[0]).toBeInstanceOf(test_user_1.TestUser);
107
- });
108
- it('should find all admins with where methods', async () => {
109
- const admins = await model.find().where('admin', '==', true).get();
110
- expect(admins.length).toBeGreaterThanOrEqual(1);
111
- expect(admins[0]).toBeInstanceOf(test_user_1.TestUser);
112
- });
113
- it('should find admins with age less than 56', async () => {
114
- const admins = await model.find()
115
- .where('admin', '==', true)
116
- .where('age', '<', 50)
117
- .get();
118
- expect(admins.length).toBeGreaterThanOrEqual(1);
119
- expect(admins[0]?.age).toBeLessThan(50);
120
- });
121
- it('should query by subproperties', async () => {
122
- const users = await model.query({
123
- operations: [
124
- {
125
- property: 'name',
126
- operator: '==',
127
- value: { firstName: 'userFirstName3' }
128
- },
129
- { property: 'age', operator: '!=', value: 134 }
130
- ]
131
- });
132
- expect(users[0]?.id).toBe('user3');
133
- });
134
- it('should find by subproperties', async () => {
135
- const users = await model.find()
136
- .where('name', '==', { firstName: 'userFirstName3' })
137
- .get();
138
- expect(users[0]?.id).toBe('user3');
139
- });
140
- it('should find by property path', async () => {
141
- const users = await model.find()
142
- .whereDeepProp('name.firstName', '==', 'userFirstName3')
143
- .get();
144
- expect(users[0]?.id).toBe('user3');
145
- });
146
- it('should find by superdeep property path', async () => {
147
- const users = await model.find()
148
- .whereDeepProp('name.ancestorName.father', '==', 'user3Father')
149
- .get();
150
- expect(users[0]?.id).toEqual('user3');
151
- });
152
- it('should find by swallow property path', async () => {
153
- const users = await model.find()
154
- .whereDeepProp('age', '==', 21)
155
- .get();
156
- expect(users[0]?.id).toEqual('user2');
157
- });
158
- it('should count documents in collection', async () => {
159
- expect(await model.find().count()).toBe(6);
160
- });
161
- });
162
- describe('Compound queries', () => {
163
- it('should find documents using `AND` compound query', async () => {
164
- const admins = await model.find()
165
- .where('admin', '==', true)
166
- .where('age', '<', 50)
167
- .get();
168
- expect(admins).toHaveLength(1);
169
- expect(admins[0]?.age).toBeLessThan(50);
170
- });
171
- it('should find using `OR` query', async () => {
172
- const docs = await model.find().or('age', '==', 23).or('age', '==', 41).get();
173
- expect(docs).toHaveLength(2);
174
- expect(docs).toEqual(expect.arrayContaining([
175
- expect.objectContaining({ id: 'user1', age: 23 }),
176
- expect.objectContaining({ id: 'user5', age: 41 })
177
- ]));
178
- });
179
- it('should find combining `OR` query and `where` query', async () => {
180
- const docs = await model.find().where('age', '>', 50).or('age', '==', 23).or('age', '==', 41).get();
181
- expect(docs).toHaveLength(3);
182
- expect(docs).toEqual(expect.arrayContaining([
183
- expect.objectContaining({ id: 'user1', age: 23 }),
184
- expect.objectContaining({ id: 'user5', age: 41 }),
185
- expect.objectContaining({ id: 'user3', age: 56 })
186
- ]));
187
- });
188
- it('should find combining `OR` query and `where` query in a range', async () => {
189
- const docs = await model.find().where('age', '<', 22).or('age', '>', 50).get();
190
- expect(docs).toHaveLength(2);
191
- expect(docs).toEqual(expect.arrayContaining([
192
- expect.objectContaining({ id: 'user2', age: 21 }),
193
- expect.objectContaining({ id: 'user3', age: 56 })
194
- ]));
195
- });
196
- it('should throw if a `where` query is used after an `or` query', () => {
197
- expect(() => model.find().or('age', '==', 23).where('age', '>', 50)).toThrow(entropic_bond_1.Model.error.invalidQueryOrder);
198
- });
199
- });
200
- describe('Searchable array property', () => {
201
- it('should find documents using `containsAny` operator', async () => {
202
- const colleague1 = new test_user_1.TestUser('colleague1');
203
- const colleague2 = new test_user_1.TestUser('colleague2');
204
- const docs = await model.find().where('colleagues', 'containsAny', [colleague1, colleague2]).get();
205
- expect(docs).toHaveLength(3);
206
- expect(docs).toEqual(expect.arrayContaining([
207
- expect.objectContaining({ id: 'user2' }),
208
- expect.objectContaining({ id: 'user4' }),
209
- expect.objectContaining({ id: 'user6' })
210
- ]));
211
- });
212
- it('should find documents using `contains` operator', async () => {
213
- const colleague2 = new test_user_1.TestUser('colleague2');
214
- const docs = await model.find().where('colleagues', 'contains', colleague2).get();
215
- expect(docs).toHaveLength(2);
216
- expect(docs).toEqual([
217
- expect.objectContaining({ id: 'user4' }),
218
- expect.objectContaining({ id: 'user6' })
219
- ]);
220
- });
221
- });
222
- describe('Derived classes should fit on parent collection', () => {
223
- it('should save derived object in parent collection', async () => {
224
- const derived = new test_user_1.DerivedUser();
225
- derived.name = { firstName: 'Fulanito', lastName: 'Derived' };
226
- derived.salary = 3900;
227
- await model.save(derived);
228
- const newUser = await model.findById(derived.id);
229
- expect(newUser).toBeInstanceOf(test_user_1.DerivedUser);
230
- expect(newUser.salary).toBe(3900);
231
- expect(newUser.className).toEqual('DerivedUser');
232
- });
233
- });
234
- describe('References to documents', () => {
235
- let ref1, ref2;
236
- beforeEach(async () => {
237
- testUser.documentRef = new test_user_1.SubClass();
238
- testUser.documentRef.year = 2045;
239
- ref1 = new test_user_1.SubClass();
240
- ref1.year = 2081;
241
- ref2 = new test_user_1.SubClass();
242
- ref2.year = 2082;
243
- testUser.manyRefs.push(ref1);
244
- testUser.manyRefs.push(ref2);
245
- testUser.derived = new test_user_1.DerivedUser();
246
- testUser.derived.salary = 1350;
247
- testUser.manyDerived = [new test_user_1.DerivedUser(), new test_user_1.DerivedUser()];
248
- testUser.manyDerived[0].salary = 990;
249
- testUser.manyDerived[1].salary = 1990;
250
- await model.save(testUser);
251
- });
252
- it('should save a document as a reference', async () => {
253
- const subClassModel = entropic_bond_1.Store.getModel('SubClass');
254
- expect(subClassModel).toBeDefined();
255
- const newDocument = await subClassModel.findById(testUser.documentRef.id);
256
- expect(newDocument).toBeInstanceOf(test_user_1.SubClass);
257
- expect(newDocument.year).toBe(2045);
258
- });
259
- it('should read a swallow document reference', async () => {
260
- const loadedUser = await model.findById(testUser.id);
261
- expect(loadedUser?.documentRef).toBeInstanceOf(test_user_1.SubClass);
262
- expect(loadedUser?.documentRef?.id).toBeDefined();
263
- expect(loadedUser?.documentRef?.year).toBeUndefined();
264
- });
265
- it('should fill data of swallow document reference', async () => {
266
- const loadedUser = await model.findById(testUser.id);
267
- await entropic_bond_1.Store.populate(loadedUser.documentRef);
268
- expect(loadedUser?.documentRef?.id).toBeDefined();
269
- expect(loadedUser?.documentRef?.year).toBe(2045);
270
- });
271
- it('should save and array of references', async () => {
272
- const subClassModel = entropic_bond_1.Store.getModel('SubClass');
273
- const newDocument = await subClassModel.findById(testUser.documentRef.id);
274
- expect(newDocument).toBeInstanceOf(test_user_1.SubClass);
275
- expect(newDocument.year).toBe(2045);
276
- });
277
- it('should read an array of references', async () => {
278
- const loadedUser = await model.findById(testUser.id);
279
- expect(loadedUser?.manyRefs).toHaveLength(2);
280
- expect(loadedUser?.manyRefs[0]).toBeInstanceOf(test_user_1.SubClass);
281
- expect(loadedUser?.manyRefs[0]?.id).toEqual(testUser.manyRefs[0].id);
282
- expect(loadedUser?.manyRefs[0]?.year).toBeUndefined();
283
- expect(loadedUser?.manyRefs[1]).toBeInstanceOf(test_user_1.SubClass);
284
- expect(loadedUser?.manyRefs[1]?.id).toEqual(testUser.manyRefs[1].id);
285
- expect(loadedUser?.manyRefs[1]?.year).toBeUndefined();
286
- });
287
- it('should fill array of refs', async () => {
288
- const loadedUser = await model.findById(testUser.id);
289
- await entropic_bond_1.Store.populate(loadedUser.manyRefs);
290
- expect(loadedUser.manyRefs[0]?.year).toBe(2081);
291
- expect(loadedUser.manyRefs[1]?.year).toBe(2082);
292
- });
293
- it('should save a reference when declared @persistentAt', async () => {
294
- const loadedUser = await model.findById(testUser.id);
295
- expect(loadedUser?.derived?.id).toEqual(testUser.derived.id);
296
- expect(loadedUser?.derived?.salary).toBeUndefined();
297
- await entropic_bond_1.Store.populate(loadedUser.derived);
298
- expect(loadedUser?.derived?.salary).toBe(1350);
299
- expect(loadedUser?.derived?.id).toBe(testUser.derived.id);
300
- });
301
- it('should populate from special collection when declared with @persistentRefAt', async () => {
302
- const loadedUser = await model.findById('user6');
303
- await entropic_bond_1.Store.populate(loadedUser.derived);
304
- expect(loadedUser?.derived?.salary).toBe(2800);
305
- expect(loadedUser?.derived?.id).toBe('user4');
306
- });
307
- it('should save a reference when declared @persistentAt as array', async () => {
308
- const loadedUser = await model.findById(testUser.id);
309
- expect(loadedUser?.manyDerived?.[0]?.id).toEqual(testUser.manyDerived[0].id);
310
- expect(loadedUser?.manyDerived?.[0]?.salary).toBeUndefined();
311
- expect(loadedUser?.manyDerived?.[1]?.salary).toBeUndefined();
312
- await entropic_bond_1.Store.populate(loadedUser.manyDerived);
313
- expect(loadedUser?.manyDerived?.[0]?.salary).toBe(990);
314
- expect(loadedUser?.manyDerived?.[0]?.id).toBe(testUser.manyDerived[0].id);
315
- expect(loadedUser?.manyDerived?.[1]?.salary).toBe(1990);
316
- expect(loadedUser?.manyDerived?.[1]?.id).toBe(testUser.manyDerived[1].id);
317
- });
318
- it('should not overwrite not filled ref in collection', async () => {
319
- const loadedUser = await model.findById('user6');
320
- await model.save(loadedUser);
321
- const refInCollection = await model.findById('user4');
322
- expect(refInCollection?.salary).toBe(2800);
323
- });
324
- it('should save loaded ref with assigned new instance', async () => {
325
- const loadedUser = await model.findById('user6');
326
- loadedUser.derived = new test_user_1.DerivedUser();
327
- loadedUser.derived.salary = 345;
328
- await model.save(loadedUser);
329
- const refInCollection = await model.findById(loadedUser.derived.id);
330
- expect(refInCollection?.salary).toBe(345);
331
- });
332
- it('should save loaded ref with modified ref data', async () => {
333
- const loadedUser = await model.findById('user6');
334
- await entropic_bond_1.Store.populate(loadedUser.derived);
335
- loadedUser.derived.salary = 1623;
336
- await model.save(loadedUser);
337
- const refInCollection = await model.findById('user4');
338
- expect(refInCollection?.salary).toBe(1623);
339
- });
340
- });
341
- describe('Operations on queries', () => {
342
- it('should limit the result set', async () => {
343
- const unlimited = await model.find().get();
344
- const limited = await model.find().limit(2).get();
345
- expect(unlimited.length).not.toBe(limited.length);
346
- expect(limited).toHaveLength(2);
347
- });
348
- it('should sort ascending the result set', async () => {
349
- const docs = await model.find().orderBy('age').get();
350
- expect(docs[0]?.id).toEqual('user2');
351
- expect(docs[1]?.id).toEqual('user1');
352
- });
353
- it('should sort descending the result set', async () => {
354
- const docs = await model.find().orderBy('age', 'desc').get();
355
- expect(docs[0]?.id).toEqual('user3');
356
- expect(docs[1]?.id).toEqual('user5');
357
- });
358
- it('should sort by deep property path', async () => {
359
- const docs = await model.find().orderByDeepProp('name.firstName', 'desc').get();
360
- expect(docs[0]?.id).toEqual('user6');
361
- expect(docs[1]?.id).toEqual('user5');
362
- });
363
- it('should sort by swallow property path', async () => {
364
- const docs = await model.find().orderByDeepProp('age').get();
365
- expect(docs[0]?.id).toEqual('user2');
366
- expect(docs[1]?.id).toEqual('user1');
367
- });
368
- describe('Data Cursors', () => {
369
- beforeEach(async () => {
370
- await model.find().get(2);
371
- });
372
- it('should get next result set', async () => {
373
- const docs = await model.next();
374
- const mockDataArr = Object.values(mock_data_json_1.default.TestUser);
375
- expect(docs).toHaveLength(2);
376
- expect(docs[0]?.id).toEqual(mockDataArr[2].id);
377
- expect(docs[0]?.id).toEqual('user3');
378
- });
379
- it('should not go beyond the end of result set', async () => {
380
- await model.next();
381
- await model.next();
382
- const docs = await model.next();
383
- expect(docs).toHaveLength(0);
384
- });
385
- });
386
- });
387
- describe('SubCollections', () => {
388
- let model;
389
- beforeEach(() => {
390
- model = entropic_bond_1.Store.getModelForSubCollection(testUser, 'SubClass');
391
- });
392
- it('should retrieve from subcollection', async () => {
393
- const subClass = new test_user_1.SubClass();
394
- subClass.year = 3452;
395
- await model.save(subClass);
396
- const loaded = await model.findById(subClass.id);
397
- expect(loaded?.year).toBe(3452);
398
- });
399
- });
400
- });
401
- //# sourceMappingURL=firebase-admin-datasource.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"firebase-admin-datasource.spec.js","sourceRoot":"","sources":["../../src/store/firebase-admin-datasource.spec.ts"],"names":[],"mappings":"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"}