emberflow 1.0.8

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.
Files changed (85) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +40 -0
  3. package/lib/db-structure.d.ts +7 -0
  4. package/lib/db-structure.js +67 -0
  5. package/lib/db-structure.js.map +1 -0
  6. package/lib/index-utils.d.ts +20 -0
  7. package/lib/index-utils.js +324 -0
  8. package/lib/index-utils.js.map +1 -0
  9. package/lib/index.d.ts +23 -0
  10. package/lib/index.js +197 -0
  11. package/lib/index.js.map +1 -0
  12. package/lib/init-db-structure.d.ts +17 -0
  13. package/lib/init-db-structure.js +111 -0
  14. package/lib/init-db-structure.js.map +1 -0
  15. package/lib/logics/index.d.ts +2 -0
  16. package/lib/logics/index.js +77 -0
  17. package/lib/logics/index.js.map +1 -0
  18. package/lib/logics/view-logics.d.ts +3 -0
  19. package/lib/logics/view-logics.js +167 -0
  20. package/lib/logics/view-logics.js.map +1 -0
  21. package/lib/sample-custom/business-logics.d.ts +3 -0
  22. package/lib/sample-custom/business-logics.js +67 -0
  23. package/lib/sample-custom/business-logics.js.map +1 -0
  24. package/lib/sample-custom/db-structure.d.ts +29 -0
  25. package/lib/sample-custom/db-structure.js +36 -0
  26. package/lib/sample-custom/db-structure.js.map +1 -0
  27. package/lib/sample-custom/security.d.ts +2 -0
  28. package/lib/sample-custom/security.js +63 -0
  29. package/lib/sample-custom/security.js.map +1 -0
  30. package/lib/sample-custom/validators.d.ts +9 -0
  31. package/lib/sample-custom/validators.js +42 -0
  32. package/lib/sample-custom/validators.js.map +1 -0
  33. package/lib/tests/index-utils.test.d.ts +1 -0
  34. package/lib/tests/index-utils.test.js +600 -0
  35. package/lib/tests/index-utils.test.js.map +1 -0
  36. package/lib/tests/index.test.d.ts +1 -0
  37. package/lib/tests/index.test.js +496 -0
  38. package/lib/tests/index.test.js.map +1 -0
  39. package/lib/tests/init-db-structure.test.d.ts +1 -0
  40. package/lib/tests/init-db-structure.test.js +114 -0
  41. package/lib/tests/init-db-structure.test.js.map +1 -0
  42. package/lib/tests/logics/index.test.d.ts +1 -0
  43. package/lib/tests/logics/index.test.js +127 -0
  44. package/lib/tests/logics/index.test.js.map +1 -0
  45. package/lib/tests/logics/view-logics.test.d.ts +1 -0
  46. package/lib/tests/logics/view-logics.test.js +211 -0
  47. package/lib/tests/logics/view-logics.test.js.map +1 -0
  48. package/lib/tests/utils/misc.test.d.ts +1 -0
  49. package/lib/tests/utils/misc.test.js +31 -0
  50. package/lib/tests/utils/misc.test.js.map +1 -0
  51. package/lib/tests/utils/paths.test.d.ts +1 -0
  52. package/lib/tests/utils/paths.test.js +258 -0
  53. package/lib/tests/utils/paths.test.js.map +1 -0
  54. package/lib/tests/utils/query.test.d.ts +1 -0
  55. package/lib/tests/utils/query.test.js +72 -0
  56. package/lib/tests/utils/query.test.js.map +1 -0
  57. package/lib/tests/utils/sample.test.d.ts +1 -0
  58. package/lib/tests/utils/sample.test.js +52 -0
  59. package/lib/tests/utils/sample.test.js.map +1 -0
  60. package/lib/types.d.ts +78 -0
  61. package/lib/types.js +3 -0
  62. package/lib/types.js.map +1 -0
  63. package/lib/utils/db-structure.d.ts +2 -0
  64. package/lib/utils/db-structure.js +9 -0
  65. package/lib/utils/db-structure.js.map +1 -0
  66. package/lib/utils/misc.d.ts +1 -0
  67. package/lib/utils/misc.js +53 -0
  68. package/lib/utils/misc.js.map +1 -0
  69. package/lib/utils/paths.d.ts +16 -0
  70. package/lib/utils/paths.js +136 -0
  71. package/lib/utils/paths.js.map +1 -0
  72. package/lib/utils/query.d.ts +2 -0
  73. package/lib/utils/query.js +41 -0
  74. package/lib/utils/query.js.map +1 -0
  75. package/lib/utils/sample.d.ts +5 -0
  76. package/lib/utils/sample.js +37 -0
  77. package/lib/utils/sample.js.map +1 -0
  78. package/lib/utils.d.ts +12 -0
  79. package/lib/utils.js +67 -0
  80. package/lib/utils.js.map +1 -0
  81. package/package.json +37 -0
  82. package/src/sample-custom/business-logics.ts +51 -0
  83. package/src/sample-custom/db-structure.ts +33 -0
  84. package/src/sample-custom/security.ts +77 -0
  85. package/src/sample-custom/validators.ts +46 -0
@@ -0,0 +1,496 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ const index_1 = require("../index");
27
+ const indexutils = __importStar(require("../index-utils"));
28
+ const admin = __importStar(require("firebase-admin"));
29
+ const firebase_admin_1 = require("firebase-admin");
30
+ var Timestamp = firebase_admin_1.firestore.Timestamp;
31
+ const db_structure_1 = require("../sample-custom/db-structure");
32
+ admin.initializeApp();
33
+ (0, index_1.initializeEmberFlow)(admin, db_structure_1.dbStructure, db_structure_1.Entity, {}, {}, []);
34
+ function createDocumentSnapshot(data, refPath, exists = true) {
35
+ return {
36
+ exists,
37
+ id: "test-id",
38
+ ref: {
39
+ id: "test-id",
40
+ path: refPath,
41
+ set: jest.fn(),
42
+ update: jest.fn(),
43
+ delete: jest.fn(),
44
+ get: jest.fn(),
45
+ },
46
+ data: () => data,
47
+ get: jest.fn(),
48
+ isEqual: jest.fn(),
49
+ create_time: index_1._mockable.createNowTimestamp(),
50
+ update_time: index_1._mockable.createNowTimestamp(),
51
+ readTime: index_1._mockable.createNowTimestamp(),
52
+ };
53
+ }
54
+ function createChange(beforeData, afterData, refPath) {
55
+ return {
56
+ before: createDocumentSnapshot(beforeData, refPath),
57
+ after: createDocumentSnapshot(afterData, refPath),
58
+ };
59
+ }
60
+ describe("onDocChange", () => {
61
+ const entity = "user";
62
+ const refPath = "/example/test-id";
63
+ const contextWithoutAuth = {
64
+ auth: undefined,
65
+ authType: "ADMIN",
66
+ eventId: "test-event-id",
67
+ eventType: "test-event-type",
68
+ params: {},
69
+ resource: {
70
+ name: "projects/test-project/databases/(default)/documents/test",
71
+ service: "firestore.googleapis.com",
72
+ type: "type",
73
+ },
74
+ timestamp: "2022-03-15T18:52:04.369Z",
75
+ };
76
+ const contextWithAuth = {
77
+ auth: {
78
+ uid: "test-uid",
79
+ token: {
80
+ email: "test-email",
81
+ email_verified: true,
82
+ name: "test-name",
83
+ picture: "test-picture",
84
+ sub: "test-sub",
85
+ },
86
+ },
87
+ authType: "ADMIN",
88
+ eventId: "test-event-id",
89
+ eventType: "test-event-type",
90
+ params: {},
91
+ resource: {
92
+ name: "projects/test-project/databases/(default)/documents/test",
93
+ service: "firestore.googleapis.com",
94
+ type: "type",
95
+ },
96
+ timestamp: "2022-03-15T18:52:04.369Z",
97
+ };
98
+ beforeEach(() => {
99
+ // ...
100
+ jest.spyOn(admin, "initializeApp").mockImplementation();
101
+ const docMock = {
102
+ set: jest.fn(),
103
+ get: jest.fn(),
104
+ update: jest.fn(),
105
+ delete: jest.fn(),
106
+ parent: {},
107
+ path: "",
108
+ firestore: {},
109
+ id: "",
110
+ isEqual: jest.fn(),
111
+ // Add the missing properties and methods
112
+ collection: jest.fn(),
113
+ listCollections: jest.fn(),
114
+ create: jest.fn(),
115
+ onSnapshot: jest.fn(),
116
+ withConverter: jest.fn(),
117
+ // Add other required properties/methods as needed
118
+ };
119
+ const collectionMock = {
120
+ doc: jest.fn(() => docMock),
121
+ // Add other required properties/methods as needed
122
+ };
123
+ // Mock admin.firestore
124
+ const firestoreMock = jest.spyOn(admin, "firestore");
125
+ const firestoreInstance = {
126
+ collection: jest.fn(() => collectionMock),
127
+ settings: jest.fn(),
128
+ doc: jest.fn(),
129
+ collectionGroup: jest.fn(),
130
+ getAll: jest.fn(),
131
+ runTransaction: jest.fn(),
132
+ batch: jest.fn(),
133
+ terminate: jest.fn(),
134
+ // Add the missing methods
135
+ recursiveDelete: jest.fn(),
136
+ listCollections: jest.fn(),
137
+ bulkWriter: jest.fn(),
138
+ bundle: jest.fn(),
139
+ };
140
+ firestoreMock.mockImplementation(() => firestoreInstance);
141
+ // Add the spy for _mockable
142
+ jest.spyOn(index_1._mockable, "createNowTimestamp").mockReturnValue(Timestamp.now());
143
+ jest.spyOn(console, "log").mockImplementation();
144
+ });
145
+ afterEach(() => {
146
+ jest.restoreAllMocks();
147
+ });
148
+ it("should not execute when auth is null", async () => {
149
+ const change = createChange({}, {}, refPath);
150
+ await (0, index_1.onDocChange)(entity, change, contextWithoutAuth, "delete");
151
+ expect(console.log).toHaveBeenCalledWith("Auth is null, then this change is initiated by the service account and should be ignored");
152
+ expect(console.log).toHaveBeenCalledTimes(1);
153
+ });
154
+ it("should re-add deleted document", async () => {
155
+ const deletedDocumentData = {
156
+ field1: "value1",
157
+ field2: "value2",
158
+ };
159
+ const change = createChange(deletedDocumentData, null, refPath);
160
+ await (0, index_1.onDocChange)(entity, change, contextWithAuth, "delete");
161
+ expect(change.after.ref.set).toHaveBeenCalledWith(deletedDocumentData);
162
+ expect(change.after.ref.set).toHaveBeenCalledTimes(1);
163
+ expect(console.log).toHaveBeenCalledWith("Document re-added with ID test-id");
164
+ expect(console.log).toHaveBeenCalledTimes(4);
165
+ });
166
+ it("should revert modifications outside form", async () => {
167
+ const beforeData = {
168
+ field1: "oldValue",
169
+ field2: "oldValue",
170
+ field3: {
171
+ nestedField1: "oldValue",
172
+ nestedField2: "oldValue",
173
+ },
174
+ };
175
+ const afterData = {
176
+ "field1": "newValue",
177
+ "field2": "oldValue",
178
+ "field3": {
179
+ nestedField1: "newValue",
180
+ nestedField2: "oldValue",
181
+ },
182
+ "@form": {
183
+ "@actionType": "update",
184
+ "@status": "submit",
185
+ },
186
+ };
187
+ const change = createChange(beforeData, afterData, refPath);
188
+ // Mock validateForm to return a validation error
189
+ jest.spyOn(indexutils, "validateForm").mockResolvedValue([
190
+ true,
191
+ {
192
+ field1: ["error message 1"],
193
+ field2: ["error message 2"],
194
+ },
195
+ ]);
196
+ const revertModificationsOutsideFormMock = jest.spyOn(indexutils, "revertModificationsOutsideForm").mockResolvedValue();
197
+ await (0, index_1.onDocChange)("user", change, contextWithAuth, "update");
198
+ expect(revertModificationsOutsideFormMock).toHaveBeenCalledWith(afterData, beforeData, change.after);
199
+ expect(indexutils.validateForm).toHaveBeenCalledWith("user", afterData, refPath);
200
+ expect(change.after.ref.update).toHaveBeenCalledWith({
201
+ "@form.@status": "form-validation-failed",
202
+ "@form.@message": { "field1": ["error message 1"], "field2": ["error message 2"] },
203
+ });
204
+ expect(change.after.ref.update).toHaveBeenCalledTimes(1);
205
+ });
206
+ it("should return on security check failure", async () => {
207
+ const getSecurityFnMock = jest.spyOn(indexutils, "getSecurityFn");
208
+ const rejectedSecurityResult = {
209
+ status: "rejected",
210
+ message: "Unauthorized access",
211
+ };
212
+ const securityFnMock = jest.fn().mockResolvedValue(rejectedSecurityResult);
213
+ getSecurityFnMock.mockReturnValue(securityFnMock);
214
+ const beforeData = {
215
+ "field1": "oldValue",
216
+ "field2": "oldValue",
217
+ "field3": {
218
+ nestedField1: "oldValue",
219
+ nestedField2: "oldValue",
220
+ },
221
+ "@form": {
222
+ "field1": "oldValue",
223
+ "field2": "oldValue",
224
+ "@status": "submit",
225
+ },
226
+ };
227
+ const afterData = {
228
+ "field1": "oldValue",
229
+ "field2": "oldValue",
230
+ "field3": {
231
+ nestedField1: "oldValue",
232
+ nestedField2: "oldValue",
233
+ },
234
+ "@form": {
235
+ "field1": "newValue",
236
+ "field2": "oldValue",
237
+ "@actionType": "update",
238
+ "@status": "submit",
239
+ },
240
+ };
241
+ const change = createChange(beforeData, afterData, refPath);
242
+ const validateFormMock = jest.spyOn(indexutils, "validateForm");
243
+ validateFormMock.mockResolvedValue([false, {}]);
244
+ await (0, index_1.onDocChange)(entity, change, contextWithAuth, "update");
245
+ expect(getSecurityFnMock).toHaveBeenCalledWith(entity);
246
+ expect(validateFormMock).toHaveBeenCalledWith(entity, change.after.data(), refPath);
247
+ expect(securityFnMock).toHaveBeenCalledWith(entity, change.after.data(), "update", ["field1"]);
248
+ expect(change.after.ref.update).toHaveBeenCalledWith({
249
+ "@form.@status": "security-error",
250
+ "@form.@message": "Unauthorized access",
251
+ });
252
+ expect(console.log).toHaveBeenCalledWith(`Security check failed: ${rejectedSecurityResult.message}`);
253
+ });
254
+ it("should call delayFormSubmissionAndCheckIfCancelled with correct parameters", async () => {
255
+ jest.spyOn(indexutils, "revertModificationsOutsideForm").mockResolvedValue();
256
+ jest.spyOn(indexutils, "validateForm").mockResolvedValue([false, {}]);
257
+ jest.spyOn(indexutils, "getFormModifiedFields").mockReturnValue(["field1", "field2"]);
258
+ jest.spyOn(indexutils, "getSecurityFn").mockReturnValue(() => Promise.resolve({ status: "allowed" }));
259
+ const delayFormSubmissionAndCheckIfCancelledSpy = jest.spyOn(indexutils, "delayFormSubmissionAndCheckIfCancelled").mockResolvedValue(true);
260
+ const doc = {
261
+ "@form": {
262
+ "@delay": 1000,
263
+ "@status": "submit",
264
+ "@actionType": "create",
265
+ },
266
+ "someField": "exampleValue",
267
+ };
268
+ const change = createChange(null, doc, "/example/test-id");
269
+ const event = "create";
270
+ await (0, index_1.onDocChange)("user", change, contextWithAuth, event);
271
+ // Test that the delayFormSubmissionAndCheckIfCancelled function is called with the correct parameters
272
+ expect(delayFormSubmissionAndCheckIfCancelledSpy).toHaveBeenCalledWith(1000, change.after);
273
+ // Test that snapshot.ref.update is called with the correct parameters
274
+ expect(change.after.ref.update).toHaveBeenCalledWith({ "@form.@status": "cancelled" });
275
+ });
276
+ it("should not process the form if @form.@status is not 'submit'", async () => {
277
+ jest.spyOn(indexutils, "revertModificationsOutsideForm").mockResolvedValue();
278
+ jest.spyOn(indexutils, "validateForm").mockResolvedValue([false, {}]);
279
+ jest.spyOn(indexutils, "getFormModifiedFields").mockReturnValue(["field1", "field2"]);
280
+ jest.spyOn(indexutils, "getSecurityFn").mockReturnValue(() => Promise.resolve({ status: "allowed" }));
281
+ const delayFormSubmissionAndCheckIfCancelledSpy = jest.spyOn(indexutils, "delayFormSubmissionAndCheckIfCancelled").mockResolvedValue(true);
282
+ const doc = {
283
+ "@form": {
284
+ "@actionType": "create",
285
+ "@status": "not-submit",
286
+ "@delay": 1000,
287
+ },
288
+ "someField": "exampleValue",
289
+ };
290
+ const change = createChange(null, doc, "/example/test-id");
291
+ const event = "create";
292
+ await (0, index_1.onDocChange)("user", change, contextWithAuth, event);
293
+ // Test that the delayFormSubmissionAndCheckIfCancelled function is NOT called
294
+ expect(indexutils.revertModificationsOutsideForm).toHaveBeenCalled();
295
+ expect(indexutils.getFormModifiedFields).not.toHaveBeenCalled();
296
+ expect(indexutils.getSecurityFn).not.toHaveBeenCalled();
297
+ expect(delayFormSubmissionAndCheckIfCancelledSpy).not.toHaveBeenCalled();
298
+ // Test that snapshot.ref.update is NOT called
299
+ expect(change.after.ref.update).not.toHaveBeenCalled();
300
+ });
301
+ it("should set @form.@status to 'submitted' after passing all checks", async () => {
302
+ jest.spyOn(indexutils, "revertModificationsOutsideForm").mockResolvedValue();
303
+ jest.spyOn(indexutils, "validateForm").mockResolvedValue([false, {}]);
304
+ jest.spyOn(indexutils, "getFormModifiedFields").mockReturnValue(["field1", "field2"]);
305
+ jest.spyOn(indexutils, "getSecurityFn").mockReturnValue(() => Promise.resolve({ status: "allowed" }));
306
+ jest.spyOn(indexutils, "delayFormSubmissionAndCheckIfCancelled").mockResolvedValue(false);
307
+ const addActionSpy = jest.fn().mockResolvedValue({
308
+ update: jest.fn(),
309
+ });
310
+ jest.spyOn(admin.firestore(), "collection").mockReturnValue({
311
+ add: addActionSpy,
312
+ });
313
+ const doc = {
314
+ "@form": {
315
+ "@actionType": "create",
316
+ "name": "test",
317
+ "@status": "submit",
318
+ },
319
+ "someField": "exampleValue",
320
+ };
321
+ const change = createChange(null, doc, "/example/test-id");
322
+ const event = "create";
323
+ await (0, index_1.onDocChange)("user", change, contextWithAuth, event);
324
+ // Test that the snapshot.ref.update is called with the correct parameters
325
+ expect(change.after.ref.update).toHaveBeenCalledWith({ "@form.@status": "processing" });
326
+ expect(change.after.ref.update).toHaveBeenCalledWith({ "@form.@status": "submitted" });
327
+ // Test that addActionSpy is called with the correct parameters
328
+ expect(addActionSpy).toHaveBeenCalled();
329
+ });
330
+ it("should set @form.@status to 'logic-error' if there are logic error results", async () => {
331
+ jest.spyOn(indexutils, "revertModificationsOutsideForm").mockResolvedValue();
332
+ jest.spyOn(indexutils, "validateForm").mockResolvedValue([false, {}]);
333
+ jest.spyOn(indexutils, "getFormModifiedFields").mockReturnValue(["field1", "field2"]);
334
+ jest.spyOn(indexutils, "getSecurityFn").mockReturnValue(() => Promise.resolve({ status: "allowed" }));
335
+ jest.spyOn(indexutils, "delayFormSubmissionAndCheckIfCancelled").mockResolvedValue(false);
336
+ const errorMessage = "logic error message";
337
+ const runBusinessLogicsSpy = jest.spyOn(indexutils, "runBusinessLogics").mockResolvedValue([
338
+ {
339
+ name: "testLogic",
340
+ status: "error",
341
+ message: errorMessage,
342
+ timeFinished: index_1._mockable.createNowTimestamp(),
343
+ documents: [],
344
+ },
345
+ ]);
346
+ const actionRefUpdateSpy = jest.fn();
347
+ const collectionAddSpy = jest.fn().mockResolvedValue({
348
+ update: actionRefUpdateSpy,
349
+ collection: jest.fn().mockReturnValue({
350
+ add: jest.fn(),
351
+ }),
352
+ });
353
+ jest.spyOn(admin.firestore(), "collection").mockReturnValue({ add: collectionAddSpy });
354
+ const doc = {
355
+ "@form": {
356
+ "@actionType": "create",
357
+ "name": "test",
358
+ "@status": "submit",
359
+ },
360
+ "someField": "exampleValue",
361
+ };
362
+ const change = createChange(null, doc, "/example/test-id");
363
+ const event = "create";
364
+ await (0, index_1.onDocChange)("user", change, contextWithAuth, event);
365
+ // Test that the runBusinessLogics function was called with the correct parameters
366
+ expect(runBusinessLogicsSpy).toHaveBeenCalledWith("create", ["field1", "field2"], "user", expect.objectContaining({
367
+ actionType: "create",
368
+ document: {
369
+ "@form": {
370
+ "@actionType": "create",
371
+ "@status": "submit",
372
+ "name": "test",
373
+ },
374
+ "someField": "exampleValue",
375
+ },
376
+ modifiedFields: ["field1", "field2"],
377
+ path: "/example/test-id",
378
+ status: "processing",
379
+ // TimeCreated is not specified because it's dynamic
380
+ }));
381
+ // Test that the snapshot.ref.update is called with the correct parameters
382
+ expect(change.after.ref.update).toHaveBeenCalledTimes(3);
383
+ const updateMock = change.after.ref.update;
384
+ expect(updateMock.mock.calls[0][0]).toEqual({ "@form.@status": "processing" });
385
+ expect(updateMock.mock.calls[1][0]).toEqual({ "@form.@status": "submitted" });
386
+ expect(updateMock.mock.calls[2][0]).toEqual({ "@form.@status": "finished" });
387
+ // Test that collectionAddSpy is not called if there are logic errors
388
+ expect(collectionAddSpy).toHaveBeenCalledTimes(1);
389
+ expect(collectionAddSpy).toHaveBeenCalledWith(expect.objectContaining({
390
+ actionType: "create",
391
+ document: {
392
+ "@form": {
393
+ "@actionType": "create",
394
+ "@status": "submit",
395
+ "name": "test",
396
+ },
397
+ "someField": "exampleValue",
398
+ },
399
+ modifiedFields: ["field1", "field2"],
400
+ path: "/example/test-id",
401
+ status: "processing",
402
+ // TimeCreated is not specified because it's dynamic
403
+ }));
404
+ expect(actionRefUpdateSpy).toHaveBeenCalledTimes(2);
405
+ expect(actionRefUpdateSpy.mock.calls[0][0]).toEqual({ status: "finished-with-error", message: errorMessage });
406
+ });
407
+ // ... existing test code ...
408
+ it("should execute the sequence of operations correctly", async () => {
409
+ jest.spyOn(indexutils, "revertModificationsOutsideForm").mockResolvedValue();
410
+ jest.spyOn(indexutils, "validateForm").mockResolvedValue([false, {}]);
411
+ jest.spyOn(indexutils, "getFormModifiedFields").mockReturnValue(["field1", "field2"]);
412
+ jest.spyOn(indexutils, "getSecurityFn").mockReturnValue(() => Promise.resolve({ status: "allowed" }));
413
+ jest.spyOn(indexutils, "delayFormSubmissionAndCheckIfCancelled").mockResolvedValue(false);
414
+ const businessLogicResults = [
415
+ {
416
+ name: "testLogic",
417
+ status: "finished",
418
+ timeFinished: index_1._mockable.createNowTimestamp(),
419
+ documents: [],
420
+ },
421
+ ];
422
+ const runBusinessLogicsSpy = jest.spyOn(indexutils, "runBusinessLogics").mockResolvedValue(businessLogicResults);
423
+ const actionRefUpdateSpy = jest.fn();
424
+ const collectionAddSpy = jest.fn().mockResolvedValue({
425
+ update: actionRefUpdateSpy,
426
+ collection: jest.fn().mockReturnValue({
427
+ add: jest.fn(),
428
+ }),
429
+ });
430
+ jest.spyOn(admin.firestore(), "collection").mockReturnValue({ add: collectionAddSpy });
431
+ const doc = {
432
+ "@form": {
433
+ "@actionType": "create",
434
+ "name": "test",
435
+ "@status": "submit",
436
+ },
437
+ "someField": "exampleValue",
438
+ };
439
+ const change = createChange(null, doc, "/example/test-id");
440
+ const event = "create";
441
+ const consolidatedLogicResults = new Map();
442
+ const consolidatedViewLogicResults = new Map();
443
+ const consolidatedPeerSyncViewLogicResults = new Map();
444
+ const userDocsByDstPath = new Map();
445
+ const otherUsersDocsByDstPath = new Map();
446
+ const viewLogicResults = [];
447
+ const userViewDocsByDstPath = new Map();
448
+ const otherUsersViewDocsByDstPath = new Map();
449
+ const peerSyncViewLogicResults = [];
450
+ const otherUsersPeerSyncViewDocsByDstPath = new Map();
451
+ jest.spyOn(indexutils, "consolidateAndGroupByDstPath")
452
+ .mockReturnValueOnce(consolidatedLogicResults)
453
+ .mockReturnValueOnce(consolidatedViewLogicResults)
454
+ .mockReturnValue(consolidatedPeerSyncViewLogicResults);
455
+ jest.spyOn(indexutils, "groupDocsByUserAndDstPath")
456
+ .mockReturnValueOnce({
457
+ userDocsByDstPath,
458
+ otherUsersDocsByDstPath,
459
+ })
460
+ .mockReturnValueOnce({
461
+ userDocsByDstPath: userViewDocsByDstPath,
462
+ otherUsersDocsByDstPath: otherUsersViewDocsByDstPath,
463
+ })
464
+ .mockReturnValueOnce({
465
+ userDocsByDstPath: new Map(),
466
+ otherUsersDocsByDstPath: otherUsersPeerSyncViewDocsByDstPath,
467
+ });
468
+ jest.spyOn(indexutils, "runViewLogics").mockResolvedValue(viewLogicResults);
469
+ jest.spyOn(indexutils, "runPeerSyncViews").mockResolvedValue(peerSyncViewLogicResults);
470
+ jest.spyOn(indexutils, "distribute");
471
+ await (0, index_1.onDocChange)("user", change, contextWithAuth, event);
472
+ // Test that the runBusinessLogics function was called with the correct parameters
473
+ expect(runBusinessLogicsSpy).toHaveBeenCalled();
474
+ // Test that the snapshot.ref.update is called with the correct parameters
475
+ expect(change.after.ref.update).toHaveBeenCalledTimes(3);
476
+ expect(collectionAddSpy).toHaveBeenCalledTimes(1);
477
+ // Test that the functions are called in the correct sequence
478
+ expect(indexutils.consolidateAndGroupByDstPath).toHaveBeenNthCalledWith(1, businessLogicResults);
479
+ expect(indexutils.groupDocsByUserAndDstPath).toHaveBeenNthCalledWith(1, consolidatedLogicResults, "test-uid");
480
+ expect(indexutils.runViewLogics).toHaveBeenCalledWith(userDocsByDstPath);
481
+ expect(indexutils.consolidateAndGroupByDstPath).toHaveBeenNthCalledWith(2, viewLogicResults);
482
+ expect(indexutils.groupDocsByUserAndDstPath).toHaveBeenNthCalledWith(2, consolidatedViewLogicResults, "test-uid");
483
+ expect(indexutils.distribute).toHaveBeenNthCalledWith(1, userDocsByDstPath);
484
+ expect(indexutils.distribute).toHaveBeenNthCalledWith(2, userViewDocsByDstPath);
485
+ expect(change.after.ref.update).toHaveBeenCalledWith({ "@form.@status": "finished" });
486
+ expect(indexutils.runPeerSyncViews).toHaveBeenCalledWith(userDocsByDstPath);
487
+ expect(indexutils.consolidateAndGroupByDstPath).toHaveBeenNthCalledWith(3, peerSyncViewLogicResults);
488
+ expect(indexutils.groupDocsByUserAndDstPath).toHaveBeenNthCalledWith(3, consolidatedPeerSyncViewLogicResults, "test-uid");
489
+ expect(indexutils.distribute).toHaveBeenCalledWith(otherUsersDocsByDstPath);
490
+ expect(indexutils.distribute).toHaveBeenCalledWith(otherUsersViewDocsByDstPath);
491
+ expect(indexutils.distribute).toHaveBeenCalledWith(otherUsersPeerSyncViewDocsByDstPath);
492
+ expect(actionRefUpdateSpy).toHaveBeenCalledTimes(1);
493
+ expect(actionRefUpdateSpy.mock.calls[0][0]).toEqual({ status: "finished" });
494
+ });
495
+ });
496
+ //# sourceMappingURL=index.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/tests/index.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const init_db_structure_1 = require("../init-db-structure");
4
+ describe("traverseBFS", () => {
5
+ it("should traverse the object structure and return paths", () => {
6
+ const input = {
7
+ a: {
8
+ b: {
9
+ c: {},
10
+ d: {},
11
+ },
12
+ e: {
13
+ f: "View:b:prop1,prop2",
14
+ },
15
+ },
16
+ h: {
17
+ i: {
18
+ "View:b:prop1,prop2": {},
19
+ },
20
+ },
21
+ };
22
+ const expectedOutput = [
23
+ "a",
24
+ "h",
25
+ "a/b",
26
+ "a/e",
27
+ "h/i",
28
+ "a/b/c",
29
+ "a/b/d",
30
+ "a/e#f=View:b:prop1,prop2",
31
+ "h/i=View:b:prop1,prop2",
32
+ ];
33
+ const result = (0, init_db_structure_1.traverseBFS)(input);
34
+ expect(result).toEqual(expectedOutput);
35
+ });
36
+ });
37
+ describe("mapDocPaths", () => {
38
+ it("should map document paths based on the given entity object", () => {
39
+ const paths = [
40
+ "as",
41
+ "hs",
42
+ "as/a",
43
+ "hs/h",
44
+ "as/a/cs",
45
+ "as/a/cs/c",
46
+ "as/a/cs/c#f=View:a:prop1,prop2",
47
+ "hs/h=View:a:prop1,prop2",
48
+ ];
49
+ const Entity = {
50
+ Entity1: "a",
51
+ Entity2: "h",
52
+ Entity3: "c",
53
+ };
54
+ const expectedOutput = {
55
+ "a": "as/{aId}",
56
+ "h": "hs/{hId}",
57
+ "c": "as/{aId}/cs/{cId}",
58
+ };
59
+ const result = (0, init_db_structure_1.mapDocPaths)(paths, Entity);
60
+ expect(result).toEqual(expectedOutput);
61
+ });
62
+ });
63
+ describe("mapViewPaths", () => {
64
+ it("should map view paths based on the given paths and Entity object", () => {
65
+ const paths = [
66
+ "as",
67
+ "hs",
68
+ "as/a",
69
+ "as/a/bs/b",
70
+ "as/a/bs/b#f=View:a:prop1,prop2",
71
+ "as/a/ds/d=View:a:prop1,prop2",
72
+ ];
73
+ const Entity = {
74
+ Entity1: "a",
75
+ Entity2: "b",
76
+ Entity3: "d",
77
+ };
78
+ const docPaths = {
79
+ "a": "as/{aId}",
80
+ "b": "as/{aId}/bs/{bId}",
81
+ "d": "as/{aId}/ds/{dId}",
82
+ };
83
+ const expectedOutput = [
84
+ {
85
+ destEntity: "b",
86
+ destProp: "f",
87
+ srcProps: ["prop1", "prop2"],
88
+ srcEntity: "a",
89
+ },
90
+ {
91
+ destEntity: "d",
92
+ srcProps: ["prop1", "prop2"],
93
+ srcEntity: "a",
94
+ },
95
+ ];
96
+ const result = (0, init_db_structure_1.mapViewDefinitions)(paths, Entity, docPaths);
97
+ expect(result).toEqual(expectedOutput);
98
+ });
99
+ });
100
+ describe("mapColPaths", () => {
101
+ it("should map collection paths based on the given document paths", () => {
102
+ const docPathsMap = {
103
+ "c": "as/{aId}/bs/{bId}",
104
+ "d": "as/{aId/ds/{dId}",
105
+ };
106
+ const expectedOutput = {
107
+ "c": "as/{aId}/bs",
108
+ "d": "as/{aId/ds",
109
+ };
110
+ const result = (0, init_db_structure_1.mapColPaths)(docPathsMap);
111
+ expect(result).toEqual(expectedOutput);
112
+ });
113
+ });
114
+ //# sourceMappingURL=init-db-structure.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-db-structure.test.js","sourceRoot":"","sources":["../../src/tests/init-db-structure.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};