emberflow 1.3.7 → 1.3.9

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 (44) hide show
  1. package/lib/db-structure.d.ts +2 -7
  2. package/lib/db-structure.js +1 -6
  3. package/lib/db-structure.js.map +1 -1
  4. package/lib/index-utils.d.ts +4 -3
  5. package/lib/index-utils.js +83 -118
  6. package/lib/index-utils.js.map +1 -1
  7. package/lib/index.d.ts +7 -0
  8. package/lib/index.js +70 -38
  9. package/lib/index.js.map +1 -1
  10. package/lib/logics/view-logics.d.ts +22 -2
  11. package/lib/logics/view-logics.js +107 -53
  12. package/lib/logics/view-logics.js.map +1 -1
  13. package/lib/tests/index-utils.test.js +233 -137
  14. package/lib/tests/index-utils.test.js.map +1 -1
  15. package/lib/tests/index.test.js +21 -17
  16. package/lib/tests/index.test.js.map +1 -1
  17. package/lib/tests/logics/view-logics.test.js +203 -24
  18. package/lib/tests/logics/view-logics.test.js.map +1 -1
  19. package/lib/tests/utils/distribution.test.d.ts +1 -0
  20. package/lib/tests/utils/distribution.test.js +206 -0
  21. package/lib/tests/utils/distribution.test.js.map +1 -0
  22. package/lib/tests/utils/forms.test.d.ts +1 -0
  23. package/lib/tests/utils/forms.test.js +113 -0
  24. package/lib/tests/utils/forms.test.js.map +1 -0
  25. package/lib/tests/utils/misc.test.js +138 -0
  26. package/lib/tests/utils/misc.test.js.map +1 -1
  27. package/lib/tests/utils/paths.test.js.map +1 -1
  28. package/lib/tests/utils/pubsub.test.d.ts +1 -0
  29. package/lib/tests/utils/pubsub.test.js +109 -0
  30. package/lib/tests/utils/pubsub.test.js.map +1 -0
  31. package/lib/types.d.ts +7 -1
  32. package/lib/utils/distribution.d.ts +9 -0
  33. package/lib/utils/distribution.js +119 -0
  34. package/lib/utils/distribution.js.map +1 -0
  35. package/lib/utils/forms.d.ts +4 -2
  36. package/lib/utils/forms.js +32 -101
  37. package/lib/utils/forms.js.map +1 -1
  38. package/lib/utils/misc.d.ts +17 -0
  39. package/lib/utils/misc.js +81 -1
  40. package/lib/utils/misc.js.map +1 -1
  41. package/lib/utils/pubsub.d.ts +9 -0
  42. package/lib/utils/pubsub.js +32 -0
  43. package/lib/utils/pubsub.js.map +1 -0
  44. package/package.json +3 -2
@@ -23,8 +23,21 @@ var __importStar = (this && this.__importStar) || function (mod) {
23
23
  return result;
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- const view_logics_1 = require("../../logics/view-logics");
26
+ const pubsub_1 = require("@google-cloud/pubsub");
27
27
  const pathsutils = __importStar(require("../../utils/paths"));
28
+ const viewLogics = __importStar(require("../../logics/view-logics"));
29
+ const indexUtils = __importStar(require("../../index-utils"));
30
+ const firebase_admin_1 = require("firebase-admin");
31
+ const index_1 = require("../../index");
32
+ jest.mock("../../index", () => {
33
+ const originalModule = jest.requireActual("../../index");
34
+ return Object.assign(Object.assign({}, originalModule), { docPaths: {
35
+ user: "users/{userId}",
36
+ friend: "users/{userId}/friends/{friendId}",
37
+ post: "users/{userId}/posts/{postId}",
38
+ comment: "users/{userId}/posts/{postId}/comments/{commentId}",
39
+ }, pubsub: new pubsub_1.PubSub(), VIEW_LOGICS_TOPIC_NAME: "view-logics-queue", PEER_SYNC_TOPIC_NAME: "peer-sync-queue" });
40
+ });
28
41
  const vd1 = {
29
42
  srcEntity: "user",
30
43
  srcProps: ["name", "avatar", "age"],
@@ -63,20 +76,6 @@ const testLogicResultDocDelete = {
63
76
  dstPath: "users/1234",
64
77
  priority: "normal",
65
78
  };
66
- jest.mock("../../index", () => {
67
- const originalModule = jest.requireActual("../../index");
68
- return Object.assign(Object.assign({}, originalModule), { docPaths: {
69
- user: "users/{userId}",
70
- friend: "users/{userId}/friends/{friendId}",
71
- post: "users/{userId}/posts/{postId}",
72
- comment: "users/{userId}/posts/{postId}/comments/{commentId}",
73
- }, docPathsRegex: {
74
- user: /^users\/([^/]+)$/,
75
- friend: /^users\/([^/]+)\/friends\/([^/]+)$/,
76
- post: /^users\/([^/]+)\/posts\/([^/]+)$/,
77
- comment: /^users\/([^/]+)\/posts\/([^/]+)\/comments\/([^/]+)$/,
78
- } });
79
- });
80
79
  describe("createViewLogicFn", () => {
81
80
  it("should create a logic function that processes the given logicResultDoc and view definition", async () => {
82
81
  const hydrateDocPathSpy = jest.spyOn(pathsutils, "hydrateDocPath");
@@ -97,7 +96,7 @@ describe("createViewLogicFn", () => {
97
96
  "users/789/friends/1234",
98
97
  ]));
99
98
  // Create the logic function using the viewDefinition
100
- const logicFn = (0, view_logics_1.createViewLogicFn)(vd1);
99
+ const logicFn = viewLogics.createViewLogicFn(vd1);
101
100
  // Call the logic function with the test action
102
101
  const result = await logicFn(testLogicResultDoc);
103
102
  expect(result).toBeDefined();
@@ -116,7 +115,7 @@ describe("createViewLogicFn", () => {
116
115
  expect(hydrateDocPathSpy.mock.calls[0][0]).toEqual("users/{userId}/friends/1234");
117
116
  expect(hydrateDocPathSpy.mock.calls[0][1]).toEqual({});
118
117
  // Create the logic function using the viewDefinition
119
- const logicFn2 = (0, view_logics_1.createViewLogicFn)(vd2);
118
+ const logicFn2 = viewLogics.createViewLogicFn(vd2);
120
119
  // Call the logic function with the test action
121
120
  const result2 = await logicFn2(testLogicResultDoc);
122
121
  // Add your expectations here, e.g., result.documents should have the correct properties and values
@@ -142,7 +141,7 @@ describe("createViewLogicFn", () => {
142
141
  expect(hydrateDocPathSpy.mock.calls[1][0]).toEqual("users/{userId}/posts/{postId}");
143
142
  expect(hydrateDocPathSpy.mock.calls[1][1]).toEqual({
144
143
  post: {
145
- fieldName: "postedBy.id",
144
+ fieldName: "postedBy.@id",
146
145
  operator: "==",
147
146
  value: "1234",
148
147
  },
@@ -176,7 +175,7 @@ describe("syncPeerViews", () => {
176
175
  .mockReturnValue({ entity: "comment", regex: /^users\/([^/]+)\/posts\/([^/]+)\/comments\/([^/]+)$/ });
177
176
  // Call the syncPeerViews function with the test logic result doc
178
177
  // users/1234/posts/5678/comments/9876
179
- const result = await (0, view_logics_1.syncPeerViews)(testPeerLogicResultDoc);
178
+ const result = await viewLogics.syncPeerViews(testPeerLogicResultDoc);
180
179
  // Add your expectations here, e.g., result.documents should have the correct properties and values
181
180
  expect(result).toBeDefined();
182
181
  expect(result.documents).toBeDefined();
@@ -196,19 +195,199 @@ describe("syncPeerViews", () => {
196
195
  expect(document).toHaveProperty("dstPath", "users/890/posts/5678/comments/9876");
197
196
  expect(document.doc).toEqual({ "title": "I like it" });
198
197
  expect(document.instructions).toEqual({ "likes": "++" });
199
- expect(hydrateDocPathSpy.mock.calls[0][0]).toEqual("users/{userId}/posts/5678/comments/{commentId}");
198
+ expect(hydrateDocPathSpy.mock.calls[0][0]).toEqual("users/{userId}/posts/5678/comments/9876");
200
199
  expect(hydrateDocPathSpy.mock.calls[0][1]).toEqual({
201
200
  "user": {
202
201
  fieldName: "@id",
203
202
  operator: "!=",
204
203
  value: "1234",
205
204
  },
206
- "comment": {
207
- fieldName: "@id",
208
- operator: "==",
209
- value: "9876",
205
+ });
206
+ });
207
+ });
208
+ describe("queueRunViewLogics", () => {
209
+ let publishMessageMock;
210
+ let topicSpy;
211
+ beforeEach(() => {
212
+ jest.restoreAllMocks();
213
+ publishMessageMock = jest.fn().mockResolvedValue("message-id");
214
+ topicSpy = jest.spyOn(pubsub_1.PubSub.prototype, "topic").mockImplementation(() => {
215
+ return {
216
+ publishMessage: publishMessageMock,
217
+ };
218
+ });
219
+ });
220
+ it("should queue docs to run view logics", async () => {
221
+ const doc1 = {
222
+ action: "merge",
223
+ priority: "normal",
224
+ doc: { name: "test-doc-name-merge" },
225
+ dstPath: "users/test-user-id/documents/doc1",
226
+ };
227
+ const logicResultDocs = [doc1];
228
+ await viewLogics.queueRunViewLogics(logicResultDocs);
229
+ expect(topicSpy).toHaveBeenCalledWith(index_1.VIEW_LOGICS_TOPIC_NAME);
230
+ expect(publishMessageMock).toHaveBeenCalledWith({ json: doc1 });
231
+ });
232
+ it("should not queue view logics when action is create", async () => {
233
+ const doc1 = {
234
+ action: "create",
235
+ priority: "normal",
236
+ doc: { name: "test-doc-name-created" },
237
+ dstPath: "users/test-user-id/documents/doc1",
238
+ };
239
+ const logicResultDocs = [doc1];
240
+ await viewLogics.queueRunViewLogics(logicResultDocs);
241
+ expect(topicSpy).toHaveBeenCalledWith(index_1.VIEW_LOGICS_TOPIC_NAME);
242
+ expect(publishMessageMock).not.toHaveBeenCalled();
243
+ });
244
+ });
245
+ describe("onMessageViewLogicsQueue", () => {
246
+ let runViewLogicsSpy;
247
+ let expandConsolidateAndGroupByDstPathSpy;
248
+ let groupDocsByUserAndDstPathSpy;
249
+ let distributeSpy;
250
+ let distributeLaterSpy;
251
+ let queueForPeerSyncSpy;
252
+ const viewLogicsResult = [
253
+ {
254
+ name: "logic 1",
255
+ timeFinished: firebase_admin_1.firestore.Timestamp.now(),
256
+ status: "finished",
257
+ documents: [
258
+ { action: "merge", priority: "normal", dstPath: "users/doc1", doc: { field1: "value1" }, instructions: { field2: "++" } },
259
+ { action: "delete", priority: "normal", dstPath: "users/doc2" },
260
+ ],
261
+ },
262
+ {
263
+ name: "logic 2",
264
+ timeFinished: firebase_admin_1.firestore.Timestamp.now(),
265
+ status: "finished",
266
+ documents: [
267
+ { action: "merge", priority: "normal", dstPath: "users/doc1", doc: { field1: "value1a" }, instructions: { field2: "--" } },
268
+ { action: "merge", priority: "normal", dstPath: "users/doc1", doc: { field3: "value3" }, instructions: { field4: "--" } },
269
+ { action: "copy", priority: "normal", srcPath: "users/doc3", dstPath: "users/doc4" },
270
+ { action: "merge", priority: "normal", dstPath: "users/doc2", doc: { field4: "value4" } },
271
+ { action: "merge", priority: "normal", dstPath: "users/doc7", doc: { field6: "value7" } },
272
+ ],
273
+ },
274
+ ];
275
+ const expandConsolidateResult = new Map([
276
+ ["users/doc1", [{ action: "merge", priority: "normal", dstPath: "users/doc1", doc: { field1: "value1a", field3: "value3" }, instructions: { field2: "--", field4: "--" } }]],
277
+ ["users/doc2", [{ action: "delete", priority: "normal", dstPath: "users/doc2" }]],
278
+ ["users/doc4", [{ action: "merge", priority: "normal", dstPath: "users/doc4", doc: {}, instructions: {} }]],
279
+ ["users/doc7", [{ action: "delete", priority: "normal", dstPath: "users/doc7" }]],
280
+ ["users/doc6", [{ action: "merge", priority: "normal", dstPath: "users/doc6", doc: {} }]],
281
+ ]);
282
+ const groupDocsByUserResult = {
283
+ userDocsByDstPath: new Map([
284
+ ["users/doc1", [{ action: "merge", priority: "normal", dstPath: "users/doc1", doc: { field1: "value1a", field3: "value3" }, instructions: { field2: "--", field4: "--" } }]],
285
+ ]),
286
+ otherUsersDocsByDstPath: new Map([
287
+ ["users/doc2", [{ action: "delete", priority: "normal", dstPath: "users/doc2" }]],
288
+ ["users/doc4", [{ action: "merge", priority: "normal", dstPath: "users/doc4", doc: {}, instructions: {} }]],
289
+ ["users/doc7", [{ action: "delete", priority: "normal", dstPath: "users/doc7" }]],
290
+ ["users/doc6", [{ action: "merge", priority: "normal", dstPath: "users/doc6", doc: {} }]],
291
+ ]),
292
+ };
293
+ beforeEach(() => {
294
+ runViewLogicsSpy = jest.spyOn(indexUtils, "runViewLogics").mockResolvedValue(viewLogicsResult);
295
+ expandConsolidateAndGroupByDstPathSpy = jest.spyOn(indexUtils, "expandConsolidateAndGroupByDstPath").mockResolvedValue(expandConsolidateResult);
296
+ groupDocsByUserAndDstPathSpy = jest.spyOn(indexUtils, "groupDocsByUserAndDstPath").mockReturnValue(groupDocsByUserResult);
297
+ distributeSpy = jest.spyOn(indexUtils, "distribute").mockResolvedValue();
298
+ distributeLaterSpy = jest.spyOn(indexUtils, "distributeLater").mockResolvedValue();
299
+ queueForPeerSyncSpy = jest.spyOn(viewLogics, "queueForPeerSync").mockResolvedValue();
300
+ });
301
+ it("should distribute queued view logics", async () => {
302
+ const userId = "doc1";
303
+ const doc1 = {
304
+ action: "merge",
305
+ priority: "normal",
306
+ doc: { name: "test-doc-name-updated" },
307
+ dstPath: `users/${userId}`,
308
+ };
309
+ const event = {
310
+ data: {
311
+ message: {
312
+ json: doc1,
313
+ },
210
314
  },
315
+ };
316
+ const viewLogicsResultDocs = viewLogicsResult.map((logicResult) => logicResult.documents).flat();
317
+ await viewLogics.onMessageViewLogicsQueue(event);
318
+ expect(runViewLogicsSpy).toHaveBeenCalledWith(doc1);
319
+ expect(expandConsolidateAndGroupByDstPathSpy).toHaveBeenCalledWith(viewLogicsResultDocs);
320
+ expect(groupDocsByUserAndDstPathSpy).toHaveBeenCalledWith(expandConsolidateResult, userId);
321
+ expect(distributeSpy).toHaveBeenCalledWith(groupDocsByUserResult.userDocsByDstPath);
322
+ expect(distributeLaterSpy).toHaveBeenCalledWith(groupDocsByUserResult.otherUsersDocsByDstPath);
323
+ expect(queueForPeerSyncSpy).toHaveBeenCalledWith(doc1);
324
+ });
325
+ });
326
+ describe("queueForPeerSync", () => {
327
+ let publishMessageMock;
328
+ let topicSpy;
329
+ beforeEach(() => {
330
+ jest.restoreAllMocks();
331
+ publishMessageMock = jest.fn().mockResolvedValue("message-id");
332
+ topicSpy = jest.spyOn(pubsub_1.PubSub.prototype, "topic").mockImplementation(() => {
333
+ return {
334
+ publishMessage: publishMessageMock,
335
+ };
211
336
  });
212
337
  });
338
+ it("should queue docs for peer syncing", async () => {
339
+ const doc1 = {
340
+ action: "merge",
341
+ priority: "normal",
342
+ doc: { name: "test-doc-name-updated" },
343
+ dstPath: "users/test-user-id/documents/doc1",
344
+ };
345
+ await viewLogics.queueForPeerSync(doc1);
346
+ expect(topicSpy).toHaveBeenCalledWith(index_1.PEER_SYNC_TOPIC_NAME);
347
+ expect(publishMessageMock).toHaveBeenCalledWith({ json: doc1 });
348
+ });
349
+ });
350
+ describe("onMessagePeerSyncQueue", () => {
351
+ let syncPeerViewsSpy;
352
+ let expandConsolidateAndGroupByDstPathSpy;
353
+ let distributeLaterSpy;
354
+ const syncPeerViewsResult = {
355
+ name: "SyncPeerViews",
356
+ status: "finished",
357
+ timeFinished: firebase_admin_1.firestore.Timestamp.now(),
358
+ documents: [
359
+ { action: "merge", priority: "normal", dstPath: "users/random-user-id1/documents/doc1", doc: { name: "test-doc-name-updated" }, instructions: {} },
360
+ { action: "merge", priority: "normal", dstPath: "users/random-user-id2/documents/doc1", doc: { name: "test-doc-name-updated" }, instructions: {} },
361
+ ],
362
+ };
363
+ const expandConsolidateResult = new Map([
364
+ ["users/random-user-id1/documents/doc1", [{ action: "merge", priority: "normal", dstPath: "users/random-user-id1/documents/doc1", doc: { name: "test-doc-name-updated" } }]],
365
+ ["users/random-user-id2/documents/doc1", [{ action: "merge", priority: "normal", dstPath: "users/random-user-id1/documents/doc1", doc: { name: "test-doc-name-updated" } }]],
366
+ ]);
367
+ beforeEach(() => {
368
+ syncPeerViewsSpy = jest.spyOn(viewLogics, "syncPeerViews").mockResolvedValue(syncPeerViewsResult);
369
+ expandConsolidateAndGroupByDstPathSpy = jest.spyOn(indexUtils, "expandConsolidateAndGroupByDstPath").mockResolvedValue(expandConsolidateResult);
370
+ distributeLaterSpy = jest.spyOn(indexUtils, "distributeLater").mockResolvedValue();
371
+ });
372
+ it("should distribute queued view logics", async () => {
373
+ const doc1 = {
374
+ action: "merge",
375
+ priority: "normal",
376
+ doc: { name: "test-doc-name-updated" },
377
+ dstPath: "users/test-user-id/documents/doc1",
378
+ };
379
+ const event = {
380
+ data: {
381
+ message: {
382
+ json: doc1,
383
+ },
384
+ },
385
+ };
386
+ const result = await viewLogics.onMessagePeerSyncQueue(event);
387
+ expect(syncPeerViewsSpy).toHaveBeenCalledWith(doc1);
388
+ expect(expandConsolidateAndGroupByDstPathSpy).toHaveBeenCalledWith(syncPeerViewsResult.documents);
389
+ expect(distributeLaterSpy).toHaveBeenCalledWith(expandConsolidateResult);
390
+ expect(result).toEqual("Processed peer sync");
391
+ });
213
392
  });
214
393
  //# sourceMappingURL=view-logics.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"view-logics.test.js","sourceRoot":"","sources":["../../../src/tests/logics/view-logics.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"view-logics.test.js","sourceRoot":"","sources":["../../../src/tests/logics/view-logics.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,206 @@
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 pubsub_1 = require("@google-cloud/pubsub");
27
+ const isProcessedMock = jest.fn();
28
+ const trackProcessedIdsMock = jest.fn();
29
+ const distribution = __importStar(require("../../utils/distribution"));
30
+ const indexUtils = __importStar(require("../../index-utils"));
31
+ const index_1 = require("../../index");
32
+ const admin = __importStar(require("firebase-admin"));
33
+ const db_structure_1 = require("../../sample-custom/db-structure");
34
+ const security_1 = require("../../sample-custom/security");
35
+ const validators_1 = require("../../sample-custom/validators");
36
+ const projectConfig = {
37
+ projectId: "your-project-id",
38
+ region: "asia-southeast1",
39
+ rtdbName: "your-rtdb-name",
40
+ budgetAlertTopicName: "budget-alerts",
41
+ maxCostLimitPerFunction: 100,
42
+ specialCostLimitPerFunction: {
43
+ function1: 50,
44
+ function2: 75,
45
+ function3: 120,
46
+ },
47
+ };
48
+ admin.initializeApp({
49
+ databaseURL: "https://test-project.firebaseio.com",
50
+ });
51
+ (0, index_1.initializeEmberFlow)(projectConfig, admin, db_structure_1.dbStructure, db_structure_1.Entity, security_1.securityConfig, validators_1.validatorConfig, []);
52
+ jest.mock("../../utils/pubsub", () => {
53
+ return {
54
+ pubsubUtils: {
55
+ isProcessed: isProcessedMock,
56
+ trackProcessedIds: trackProcessedIdsMock,
57
+ },
58
+ };
59
+ });
60
+ describe("queueForDistributionLater", () => {
61
+ let publishMessageMock;
62
+ let topicSpy;
63
+ beforeEach(() => {
64
+ jest.restoreAllMocks();
65
+ publishMessageMock = jest.fn().mockResolvedValue("message-id");
66
+ topicSpy = jest.spyOn(pubsub_1.PubSub.prototype, "topic").mockImplementation(() => {
67
+ return {
68
+ publishMessage: publishMessageMock,
69
+ };
70
+ });
71
+ });
72
+ it("should queue docs for distribution later", async () => {
73
+ const doc1 = {
74
+ action: "merge",
75
+ priority: "normal",
76
+ doc: { name: "test-doc-name-updated" },
77
+ dstPath: "/users/test-user-id/documents/doc1",
78
+ };
79
+ await distribution.queueForDistributionLater(doc1);
80
+ expect(topicSpy).toHaveBeenCalledWith(index_1.FOR_DISTRIBUTION_TOPIC_NAME);
81
+ expect(publishMessageMock).toHaveBeenCalledWith({ json: doc1 });
82
+ });
83
+ });
84
+ describe("onMessageForDistributionQueue", () => {
85
+ let distributeDocSpy;
86
+ let queueForDistributionLaterSpy;
87
+ beforeEach(() => {
88
+ distributeDocSpy = jest.spyOn(indexUtils, "distributeDoc").mockResolvedValue();
89
+ queueForDistributionLaterSpy = jest.spyOn(distribution, "queueForDistributionLater").mockResolvedValue();
90
+ });
91
+ it("should distribute high priority doc", async () => {
92
+ const doc1 = {
93
+ action: "merge",
94
+ priority: "high",
95
+ doc: { name: "test-doc-name-updated" },
96
+ dstPath: "/users/test-user-id/documents/doc1",
97
+ };
98
+ const event = {
99
+ data: {
100
+ message: {
101
+ json: doc1,
102
+ },
103
+ },
104
+ };
105
+ const result = await distribution.onMessageForDistributionQueue(event);
106
+ expect(distributeDocSpy).toHaveBeenCalledWith(doc1);
107
+ expect(result).toEqual("Processed for distribution later");
108
+ });
109
+ it("should update priority from normal to high and queue for distribution", async () => {
110
+ const doc1 = {
111
+ action: "merge",
112
+ priority: "normal",
113
+ doc: { name: "test-doc-name-updated" },
114
+ dstPath: "/users/test-user-id/documents/doc1",
115
+ };
116
+ const event = {
117
+ data: {
118
+ message: {
119
+ json: doc1,
120
+ },
121
+ },
122
+ };
123
+ const result = await distribution.onMessageForDistributionQueue(event);
124
+ expect(queueForDistributionLaterSpy).toHaveBeenCalledWith(Object.assign(Object.assign({}, doc1), { priority: "high" }));
125
+ expect(result).toEqual("Processed for distribution later");
126
+ });
127
+ });
128
+ describe("queueInstructions", () => {
129
+ let publishMessageMock;
130
+ let topicSpy;
131
+ beforeEach(() => {
132
+ jest.restoreAllMocks();
133
+ publishMessageMock = jest.fn().mockResolvedValue("message-id");
134
+ topicSpy = jest.spyOn(pubsub_1.PubSub.prototype, "topic").mockImplementation(() => {
135
+ return {
136
+ publishMessage: publishMessageMock,
137
+ };
138
+ });
139
+ });
140
+ it("should queue instructions", async () => {
141
+ const dstPath = "/users/test-user-id/documents/test-doc-id";
142
+ const instructions = {
143
+ "count": "++",
144
+ "score": "+5",
145
+ "minusCount": "--",
146
+ "minusScore": "-3",
147
+ };
148
+ await distribution.queueInstructions(dstPath, instructions);
149
+ expect(topicSpy).toHaveBeenCalledWith(index_1.INSTRUCTIONS_TOPIC_NAME);
150
+ expect(publishMessageMock).toHaveBeenCalledWith({ json: { dstPath, instructions } });
151
+ });
152
+ });
153
+ describe("onMessageInstructionsQueue", () => {
154
+ let dbSpy;
155
+ let docSetMock;
156
+ const event = {
157
+ id: "test-event",
158
+ data: {
159
+ message: {
160
+ json: {
161
+ dstPath: "/users/test-user-id/documents/test-doc-id",
162
+ instructions: {
163
+ "count": "++",
164
+ "score": "+5",
165
+ "minusCount": "--",
166
+ "minusScore": "-3",
167
+ },
168
+ },
169
+ },
170
+ },
171
+ };
172
+ beforeEach(() => {
173
+ docSetMock = jest.fn().mockResolvedValue({});
174
+ const dbDoc = {
175
+ set: docSetMock,
176
+ id: "test-doc-id",
177
+ };
178
+ dbSpy = jest.spyOn(admin.firestore(), "doc").mockReturnValue(dbDoc);
179
+ });
180
+ afterEach(() => {
181
+ dbSpy.mockRestore();
182
+ });
183
+ it("should skip duplicate message", async () => {
184
+ isProcessedMock.mockResolvedValueOnce(true);
185
+ jest.spyOn(console, "log").mockImplementation();
186
+ await distribution.onMessageInstructionsQueue(event);
187
+ expect(isProcessedMock).toHaveBeenCalledWith(index_1.INSTRUCTIONS_TOPIC_NAME, event.id);
188
+ expect(console.log).toHaveBeenCalledWith("Skipping duplicate message");
189
+ });
190
+ it("should distribute high priority doc", async () => {
191
+ isProcessedMock.mockResolvedValueOnce(false);
192
+ const expectedData = {
193
+ "count": admin.firestore.FieldValue.increment(1),
194
+ "score": admin.firestore.FieldValue.increment(5),
195
+ "minusCount": admin.firestore.FieldValue.increment(-1),
196
+ "minusScore": admin.firestore.FieldValue.increment(-3),
197
+ };
198
+ const result = await distribution.onMessageInstructionsQueue(event);
199
+ expect(admin.firestore().doc).toHaveBeenCalledTimes(1);
200
+ expect(admin.firestore().doc).toHaveBeenCalledWith("/users/test-user-id/documents/test-doc-id");
201
+ expect(docSetMock).toHaveBeenCalledTimes(1);
202
+ expect(docSetMock).toHaveBeenCalledWith(expectedData, { merge: true });
203
+ expect(result).toEqual("Processed instructions");
204
+ });
205
+ });
206
+ //# sourceMappingURL=distribution.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"distribution.test.js","sourceRoot":"","sources":["../../../src/tests/utils/distribution.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};