@powerhousedao/reactor 4.1.0-staging.1 → 5.0.0-staging.10
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/dist/bench/event-bus.bench.js +17 -27
- package/dist/bench/event-bus.bench.js.map +1 -1
- package/dist/bench/queue-only.bench.js +8 -2
- package/dist/bench/queue-only.bench.js.map +1 -1
- package/dist/bench/reactor-throughput.bench.js +42 -35
- package/dist/bench/reactor-throughput.bench.js.map +1 -1
- package/dist/src/events/event-bus.d.ts +3 -3
- package/dist/src/events/event-bus.d.ts.map +1 -1
- package/dist/src/events/event-bus.js.map +1 -1
- package/dist/src/events/interfaces.d.ts +1 -1
- package/dist/src/events/interfaces.d.ts.map +1 -1
- package/dist/src/events/types.d.ts +1 -1
- package/dist/src/events/types.d.ts.map +1 -1
- package/dist/src/events/types.js.map +1 -1
- package/dist/src/executor/interfaces.d.ts +31 -54
- package/dist/src/executor/interfaces.d.ts.map +1 -1
- package/dist/src/executor/simple-job-executor-manager.d.ts +27 -0
- package/dist/src/executor/simple-job-executor-manager.d.ts.map +1 -0
- package/dist/src/executor/simple-job-executor-manager.js +128 -0
- package/dist/src/executor/simple-job-executor-manager.js.map +1 -0
- package/dist/src/executor/simple-job-executor.d.ts +19 -0
- package/dist/src/executor/simple-job-executor.d.ts.map +1 -0
- package/dist/src/executor/simple-job-executor.js +69 -0
- package/dist/src/executor/simple-job-executor.js.map +1 -0
- package/dist/src/executor/types.d.ts +23 -8
- package/dist/src/executor/types.d.ts.map +1 -1
- package/dist/src/executor/types.js.map +1 -1
- package/dist/src/index.d.ts +9 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +8 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/interfaces/reactor.d.ts +121 -0
- package/dist/src/interfaces/reactor.d.ts.map +1 -0
- package/dist/src/interfaces/reactor.js +2 -0
- package/dist/src/interfaces/reactor.js.map +1 -0
- package/dist/src/queue/interfaces.d.ts +45 -5
- package/dist/src/queue/interfaces.d.ts.map +1 -1
- package/dist/src/queue/job-execution-handle.d.ts +24 -0
- package/dist/src/queue/job-execution-handle.d.ts.map +1 -0
- package/dist/src/queue/job-execution-handle.js +62 -0
- package/dist/src/queue/job-execution-handle.js.map +1 -0
- package/dist/src/queue/queue.d.ts +54 -5
- package/dist/src/queue/queue.d.ts.map +1 -1
- package/dist/src/queue/queue.js +237 -23
- package/dist/src/queue/queue.js.map +1 -1
- package/dist/src/queue/types.d.ts +26 -1
- package/dist/src/queue/types.d.ts.map +1 -1
- package/dist/src/queue/types.js +12 -0
- package/dist/src/queue/types.js.map +1 -1
- package/dist/src/reactor.d.ts +100 -0
- package/dist/src/reactor.d.ts.map +1 -0
- package/dist/src/reactor.js +591 -0
- package/dist/src/reactor.js.map +1 -0
- package/dist/src/registry/implementation.d.ts +62 -0
- package/dist/src/registry/implementation.d.ts.map +1 -0
- package/dist/src/registry/implementation.js +96 -0
- package/dist/src/registry/implementation.js.map +1 -0
- package/dist/src/registry/index.d.ts +3 -0
- package/dist/src/registry/index.d.ts.map +1 -0
- package/dist/src/registry/index.js +2 -0
- package/dist/src/registry/index.js.map +1 -0
- package/dist/src/registry/interfaces.d.ts +39 -0
- package/dist/src/registry/interfaces.d.ts.map +1 -0
- package/dist/src/registry/interfaces.js +2 -0
- package/dist/src/registry/interfaces.js.map +1 -0
- package/dist/src/shared/factories.d.ts +16 -0
- package/dist/src/shared/factories.d.ts.map +1 -0
- package/dist/src/shared/factories.js +33 -0
- package/dist/src/shared/factories.js.map +1 -0
- package/dist/src/shared/types.d.ts +83 -19
- package/dist/src/shared/types.d.ts.map +1 -1
- package/dist/src/shared/types.js +30 -1
- package/dist/src/shared/types.js.map +1 -1
- package/dist/src/shared/utils.d.ts +3 -0
- package/dist/src/shared/utils.d.ts.map +1 -0
- package/dist/src/shared/utils.js +8 -0
- package/dist/src/shared/utils.js.map +1 -0
- package/dist/src/utils.d.ts +11 -0
- package/dist/src/utils.d.ts.map +1 -0
- package/dist/src/utils.js +31 -0
- package/dist/src/utils.js.map +1 -0
- package/dist/test/event-bus.test.js +19 -10
- package/dist/test/event-bus.test.js.map +1 -1
- package/dist/test/executor/executor-integration.test.d.ts +2 -0
- package/dist/test/executor/executor-integration.test.d.ts.map +1 -0
- package/dist/test/executor/executor-integration.test.js +287 -0
- package/dist/test/executor/executor-integration.test.js.map +1 -0
- package/dist/test/executor/job-execution-handle.test.d.ts +2 -0
- package/dist/test/executor/job-execution-handle.test.d.ts.map +1 -0
- package/dist/test/executor/job-execution-handle.test.js +272 -0
- package/dist/test/executor/job-execution-handle.test.js.map +1 -0
- package/dist/test/executor/simple-job-executor-manager.test.d.ts +2 -0
- package/dist/test/executor/simple-job-executor-manager.test.d.ts.map +1 -0
- package/dist/test/executor/simple-job-executor-manager.test.js +132 -0
- package/dist/test/executor/simple-job-executor-manager.test.js.map +1 -0
- package/dist/test/executor/simple-job-executor.test.d.ts +2 -0
- package/dist/test/executor/simple-job-executor.test.d.ts.map +1 -0
- package/dist/test/executor/simple-job-executor.test.js +139 -0
- package/dist/test/executor/simple-job-executor.test.js.map +1 -0
- package/dist/test/factories.d.ts +123 -0
- package/dist/test/factories.d.ts.map +1 -0
- package/dist/test/factories.js +319 -0
- package/dist/test/factories.js.map +1 -0
- package/dist/test/integration/document-drive-integration.test.d.ts +2 -0
- package/dist/test/integration/document-drive-integration.test.d.ts.map +1 -0
- package/dist/test/integration/document-drive-integration.test.js +1102 -0
- package/dist/test/integration/document-drive-integration.test.js.map +1 -0
- package/dist/test/integration/reactor-read.test.d.ts +2 -0
- package/dist/test/integration/reactor-read.test.d.ts.map +1 -0
- package/dist/test/integration/reactor-read.test.js +291 -0
- package/dist/test/integration/reactor-read.test.js.map +1 -0
- package/dist/test/queue/queue-integration.test.d.ts +2 -0
- package/dist/test/queue/queue-integration.test.d.ts.map +1 -0
- package/dist/test/queue/queue-integration.test.js +322 -0
- package/dist/test/queue/queue-integration.test.js.map +1 -0
- package/dist/test/{queue.test.d.ts.map → queue/queue.test.d.ts.map} +1 -1
- package/dist/test/queue/queue.test.js +770 -0
- package/dist/test/queue/queue.test.js.map +1 -0
- package/dist/test/registry/registry.test.d.ts +2 -0
- package/dist/test/registry/registry.test.d.ts.map +1 -0
- package/dist/test/registry/registry.test.js +182 -0
- package/dist/test/registry/registry.test.js.map +1 -0
- package/dist/test/utils.test.d.ts +2 -0
- package/dist/test/utils.test.d.ts.map +1 -0
- package/dist/test/utils.test.js +66 -0
- package/dist/test/utils.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/vitest.config.d.ts +3 -0
- package/dist/vitest.config.d.ts.map +1 -0
- package/dist/vitest.config.js +11 -0
- package/dist/vitest.config.js.map +1 -0
- package/package.json +6 -1
- package/dist/bench/end-to-end-flow.bench.d.ts +0 -2
- package/dist/bench/end-to-end-flow.bench.d.ts.map +0 -1
- package/dist/bench/end-to-end-flow.bench.js +0 -256
- package/dist/bench/end-to-end-flow.bench.js.map +0 -1
- package/dist/src/executor/job-executor.d.ts +0 -62
- package/dist/src/executor/job-executor.d.ts.map +0 -1
- package/dist/src/executor/job-executor.js +0 -325
- package/dist/src/executor/job-executor.js.map +0 -1
- package/dist/test/job-executor.test.d.ts +0 -2
- package/dist/test/job-executor.test.d.ts.map +0 -1
- package/dist/test/job-executor.test.js +0 -581
- package/dist/test/job-executor.test.js.map +0 -1
- package/dist/test/queue.test.js +0 -396
- package/dist/test/queue.test.js.map +0 -1
- /package/dist/test/{queue.test.d.ts → queue/queue.test.d.ts} +0 -0
package/dist/test/queue.test.js
DELETED
|
@@ -1,396 +0,0 @@
|
|
|
1
|
-
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
2
|
-
import { EventBus } from "../src/events/event-bus.js";
|
|
3
|
-
import { InMemoryQueue } from "../src/queue/queue.js";
|
|
4
|
-
import { QueueEventTypes, } from "../src/queue/types.js";
|
|
5
|
-
describe("InMemoryQueue", () => {
|
|
6
|
-
let queue;
|
|
7
|
-
let eventBus;
|
|
8
|
-
let mockEventBusEmit;
|
|
9
|
-
const createTestOperation = (overrides = {}) => ({
|
|
10
|
-
index: 1,
|
|
11
|
-
timestampUtcMs: new Date().toISOString(),
|
|
12
|
-
hash: "test-hash",
|
|
13
|
-
skip: 0,
|
|
14
|
-
type: "test-operation",
|
|
15
|
-
input: { test: "data" },
|
|
16
|
-
id: "op-1",
|
|
17
|
-
...overrides,
|
|
18
|
-
});
|
|
19
|
-
const createTestJob = (overrides = {}) => ({
|
|
20
|
-
id: "job-1",
|
|
21
|
-
documentId: "doc-1",
|
|
22
|
-
scope: "global",
|
|
23
|
-
branch: "main",
|
|
24
|
-
operation: createTestOperation(),
|
|
25
|
-
createdAt: new Date().toISOString(),
|
|
26
|
-
retryCount: 0,
|
|
27
|
-
maxRetries: 3,
|
|
28
|
-
...overrides,
|
|
29
|
-
});
|
|
30
|
-
beforeEach(() => {
|
|
31
|
-
eventBus = new EventBus();
|
|
32
|
-
mockEventBusEmit = vi.fn().mockResolvedValue(undefined);
|
|
33
|
-
eventBus.emit = mockEventBusEmit;
|
|
34
|
-
queue = new InMemoryQueue(eventBus);
|
|
35
|
-
});
|
|
36
|
-
describe("enqueue", () => {
|
|
37
|
-
it("should add a job to the queue", async () => {
|
|
38
|
-
const job = createTestJob();
|
|
39
|
-
await queue.enqueue(job);
|
|
40
|
-
const size = await queue.size(job.documentId, job.scope, job.branch);
|
|
41
|
-
expect(size).toBe(1);
|
|
42
|
-
});
|
|
43
|
-
it("should emit a jobAvailable event when a job is enqueued", async () => {
|
|
44
|
-
const job = createTestJob();
|
|
45
|
-
await queue.enqueue(job);
|
|
46
|
-
expect(mockEventBusEmit).toHaveBeenCalledWith(QueueEventTypes.JOB_AVAILABLE, {
|
|
47
|
-
documentId: job.documentId,
|
|
48
|
-
scope: job.scope,
|
|
49
|
-
branch: job.branch,
|
|
50
|
-
jobId: job.id,
|
|
51
|
-
});
|
|
52
|
-
});
|
|
53
|
-
it("should organize jobs by documentId, scope, and branch", async () => {
|
|
54
|
-
const job1 = createTestJob({ id: "job-1", documentId: "doc-1" });
|
|
55
|
-
const job2 = createTestJob({ id: "job-2", documentId: "doc-2" });
|
|
56
|
-
const job3 = createTestJob({
|
|
57
|
-
id: "job-3",
|
|
58
|
-
documentId: "doc-1",
|
|
59
|
-
scope: "local",
|
|
60
|
-
});
|
|
61
|
-
await queue.enqueue(job1);
|
|
62
|
-
await queue.enqueue(job2);
|
|
63
|
-
await queue.enqueue(job3);
|
|
64
|
-
expect(await queue.size("doc-1", "global", "main")).toBe(1);
|
|
65
|
-
expect(await queue.size("doc-2", "global", "main")).toBe(1);
|
|
66
|
-
expect(await queue.size("doc-1", "local", "main")).toBe(1);
|
|
67
|
-
});
|
|
68
|
-
it("should maintain FIFO order within the same queue", async () => {
|
|
69
|
-
const job1 = createTestJob({ id: "job-1" });
|
|
70
|
-
const job2 = createTestJob({ id: "job-2" });
|
|
71
|
-
const job3 = createTestJob({ id: "job-3" });
|
|
72
|
-
await queue.enqueue(job1);
|
|
73
|
-
await queue.enqueue(job2);
|
|
74
|
-
await queue.enqueue(job3);
|
|
75
|
-
const dequeuedJob1 = await queue.dequeue(job1.documentId, job1.scope, job1.branch);
|
|
76
|
-
const dequeuedJob2 = await queue.dequeue(job1.documentId, job1.scope, job1.branch);
|
|
77
|
-
const dequeuedJob3 = await queue.dequeue(job1.documentId, job1.scope, job1.branch);
|
|
78
|
-
expect(dequeuedJob1?.id).toBe("job-1");
|
|
79
|
-
expect(dequeuedJob2?.id).toBe("job-2");
|
|
80
|
-
expect(dequeuedJob3?.id).toBe("job-3");
|
|
81
|
-
});
|
|
82
|
-
});
|
|
83
|
-
describe("dequeue", () => {
|
|
84
|
-
it("should return null when queue is empty", async () => {
|
|
85
|
-
const job = await queue.dequeue("doc-1", "global", "main");
|
|
86
|
-
expect(job).toBeNull();
|
|
87
|
-
});
|
|
88
|
-
it("should return and remove the first job from the queue", async () => {
|
|
89
|
-
const testJob = createTestJob();
|
|
90
|
-
await queue.enqueue(testJob);
|
|
91
|
-
const dequeuedJob = await queue.dequeue(testJob.documentId, testJob.scope, testJob.branch);
|
|
92
|
-
expect(dequeuedJob).toEqual(testJob);
|
|
93
|
-
expect(await queue.size(testJob.documentId, testJob.scope, testJob.branch)).toBe(0);
|
|
94
|
-
});
|
|
95
|
-
it("should only dequeue from the specified document/scope/branch", async () => {
|
|
96
|
-
const job1 = createTestJob({ id: "job-1", documentId: "doc-1" });
|
|
97
|
-
const job2 = createTestJob({ id: "job-2", documentId: "doc-2" });
|
|
98
|
-
await queue.enqueue(job1);
|
|
99
|
-
await queue.enqueue(job2);
|
|
100
|
-
const dequeuedJob = await queue.dequeue("doc-1", "global", "main");
|
|
101
|
-
expect(dequeuedJob?.id).toBe("job-1");
|
|
102
|
-
expect(await queue.size("doc-2", "global", "main")).toBe(1);
|
|
103
|
-
});
|
|
104
|
-
it("should clean up empty queues after dequeuing", async () => {
|
|
105
|
-
const job = createTestJob();
|
|
106
|
-
await queue.enqueue(job);
|
|
107
|
-
await queue.dequeue(job.documentId, job.scope, job.branch);
|
|
108
|
-
// Verify queue is cleaned up by checking total size
|
|
109
|
-
expect(await queue.totalSize()).toBe(0);
|
|
110
|
-
});
|
|
111
|
-
});
|
|
112
|
-
describe("dequeueNext", () => {
|
|
113
|
-
it("should return null when no jobs are available", async () => {
|
|
114
|
-
const job = await queue.dequeueNext();
|
|
115
|
-
expect(job).toBeNull();
|
|
116
|
-
});
|
|
117
|
-
it("should return a job from any available queue", async () => {
|
|
118
|
-
const job1 = createTestJob({ id: "job-1", documentId: "doc-1" });
|
|
119
|
-
const job2 = createTestJob({ id: "job-2", documentId: "doc-2" });
|
|
120
|
-
await queue.enqueue(job1);
|
|
121
|
-
await queue.enqueue(job2);
|
|
122
|
-
const dequeuedJob = await queue.dequeueNext();
|
|
123
|
-
expect(dequeuedJob).toBeDefined();
|
|
124
|
-
expect([job1.id, job2.id]).toContain(dequeuedJob?.id);
|
|
125
|
-
expect(await queue.totalSize()).toBe(1);
|
|
126
|
-
});
|
|
127
|
-
it("should clean up empty queues after dequeuing", async () => {
|
|
128
|
-
const job = createTestJob();
|
|
129
|
-
await queue.enqueue(job);
|
|
130
|
-
await queue.dequeueNext();
|
|
131
|
-
expect(await queue.totalSize()).toBe(0);
|
|
132
|
-
});
|
|
133
|
-
});
|
|
134
|
-
describe("size", () => {
|
|
135
|
-
it("should return 0 for non-existent queue", async () => {
|
|
136
|
-
const size = await queue.size("doc-1", "global", "main");
|
|
137
|
-
expect(size).toBe(0);
|
|
138
|
-
});
|
|
139
|
-
it("should return correct size for existing queue", async () => {
|
|
140
|
-
const job1 = createTestJob({ id: "job-1" });
|
|
141
|
-
const job2 = createTestJob({ id: "job-2" });
|
|
142
|
-
await queue.enqueue(job1);
|
|
143
|
-
await queue.enqueue(job2);
|
|
144
|
-
const size = await queue.size(job1.documentId, job1.scope, job1.branch);
|
|
145
|
-
expect(size).toBe(2);
|
|
146
|
-
});
|
|
147
|
-
it("should return size for specific queue only", async () => {
|
|
148
|
-
const job1 = createTestJob({ id: "job-1", documentId: "doc-1" });
|
|
149
|
-
const job2 = createTestJob({ id: "job-2", documentId: "doc-2" });
|
|
150
|
-
await queue.enqueue(job1);
|
|
151
|
-
await queue.enqueue(job2);
|
|
152
|
-
expect(await queue.size("doc-1", "global", "main")).toBe(1);
|
|
153
|
-
expect(await queue.size("doc-2", "global", "main")).toBe(1);
|
|
154
|
-
});
|
|
155
|
-
});
|
|
156
|
-
describe("totalSize", () => {
|
|
157
|
-
it("should return 0 when no jobs are queued", async () => {
|
|
158
|
-
const totalSize = await queue.totalSize();
|
|
159
|
-
expect(totalSize).toBe(0);
|
|
160
|
-
});
|
|
161
|
-
it("should return total count across all queues", async () => {
|
|
162
|
-
const job1 = createTestJob({ id: "job-1", documentId: "doc-1" });
|
|
163
|
-
const job2 = createTestJob({ id: "job-2", documentId: "doc-2" });
|
|
164
|
-
const job3 = createTestJob({
|
|
165
|
-
id: "job-3",
|
|
166
|
-
documentId: "doc-1",
|
|
167
|
-
scope: "local",
|
|
168
|
-
});
|
|
169
|
-
await queue.enqueue(job1);
|
|
170
|
-
await queue.enqueue(job2);
|
|
171
|
-
await queue.enqueue(job3);
|
|
172
|
-
const totalSize = await queue.totalSize();
|
|
173
|
-
expect(totalSize).toBe(3);
|
|
174
|
-
});
|
|
175
|
-
});
|
|
176
|
-
describe("remove", () => {
|
|
177
|
-
it("should return false when job does not exist", async () => {
|
|
178
|
-
const removed = await queue.remove("non-existent-job");
|
|
179
|
-
expect(removed).toBe(false);
|
|
180
|
-
});
|
|
181
|
-
it("should remove and return true when job exists", async () => {
|
|
182
|
-
const job = createTestJob();
|
|
183
|
-
await queue.enqueue(job);
|
|
184
|
-
const removed = await queue.remove(job.id);
|
|
185
|
-
expect(removed).toBe(true);
|
|
186
|
-
expect(await queue.size(job.documentId, job.scope, job.branch)).toBe(0);
|
|
187
|
-
});
|
|
188
|
-
it("should remove job from middle of queue", async () => {
|
|
189
|
-
const job1 = createTestJob({ id: "job-1" });
|
|
190
|
-
const job2 = createTestJob({ id: "job-2" });
|
|
191
|
-
const job3 = createTestJob({ id: "job-3" });
|
|
192
|
-
await queue.enqueue(job1);
|
|
193
|
-
await queue.enqueue(job2);
|
|
194
|
-
await queue.enqueue(job3);
|
|
195
|
-
const removed = await queue.remove(job2.id);
|
|
196
|
-
expect(removed).toBe(true);
|
|
197
|
-
expect(await queue.size(job1.documentId, job1.scope, job1.branch)).toBe(2);
|
|
198
|
-
// Verify correct jobs remain
|
|
199
|
-
const dequeuedJob1 = await queue.dequeue(job1.documentId, job1.scope, job1.branch);
|
|
200
|
-
const dequeuedJob2 = await queue.dequeue(job1.documentId, job1.scope, job1.branch);
|
|
201
|
-
expect(dequeuedJob1?.id).toBe("job-1");
|
|
202
|
-
expect(dequeuedJob2?.id).toBe("job-3");
|
|
203
|
-
});
|
|
204
|
-
it("should clean up empty queue after removing last job", async () => {
|
|
205
|
-
const job = createTestJob();
|
|
206
|
-
await queue.enqueue(job);
|
|
207
|
-
await queue.remove(job.id);
|
|
208
|
-
expect(await queue.totalSize()).toBe(0);
|
|
209
|
-
});
|
|
210
|
-
it("should handle orphaned job index entries gracefully", async () => {
|
|
211
|
-
const job = createTestJob();
|
|
212
|
-
await queue.enqueue(job);
|
|
213
|
-
// Manually corrupt the state to simulate orphaned index
|
|
214
|
-
const queueInstance = queue;
|
|
215
|
-
// @ts-ignore - accessing private property for testing
|
|
216
|
-
queueInstance.queues.clear();
|
|
217
|
-
const removed = await queue.remove(job.id);
|
|
218
|
-
expect(removed).toBe(false);
|
|
219
|
-
});
|
|
220
|
-
});
|
|
221
|
-
describe("clear", () => {
|
|
222
|
-
it("should clear specific queue", async () => {
|
|
223
|
-
const job1 = createTestJob({ id: "job-1", documentId: "doc-1" });
|
|
224
|
-
const job2 = createTestJob({ id: "job-2", documentId: "doc-2" });
|
|
225
|
-
await queue.enqueue(job1);
|
|
226
|
-
await queue.enqueue(job2);
|
|
227
|
-
await queue.clear("doc-1", "global", "main");
|
|
228
|
-
expect(await queue.size("doc-1", "global", "main")).toBe(0);
|
|
229
|
-
expect(await queue.size("doc-2", "global", "main")).toBe(1);
|
|
230
|
-
});
|
|
231
|
-
it("should handle clearing non-existent queue", async () => {
|
|
232
|
-
await expect(queue.clear("non-existent", "global", "main")).resolves.not.toThrow();
|
|
233
|
-
});
|
|
234
|
-
it("should clean up job indices when clearing", async () => {
|
|
235
|
-
const job1 = createTestJob({ id: "job-1" });
|
|
236
|
-
const job2 = createTestJob({ id: "job-2" });
|
|
237
|
-
await queue.enqueue(job1);
|
|
238
|
-
await queue.enqueue(job2);
|
|
239
|
-
await queue.clear(job1.documentId, job1.scope, job1.branch);
|
|
240
|
-
// Verify jobs can't be removed (they're no longer indexed)
|
|
241
|
-
expect(await queue.remove(job1.id)).toBe(false);
|
|
242
|
-
expect(await queue.remove(job2.id)).toBe(false);
|
|
243
|
-
});
|
|
244
|
-
});
|
|
245
|
-
describe("clearAll", () => {
|
|
246
|
-
it("should clear all queues", async () => {
|
|
247
|
-
const job1 = createTestJob({ id: "job-1", documentId: "doc-1" });
|
|
248
|
-
const job2 = createTestJob({ id: "job-2", documentId: "doc-2" });
|
|
249
|
-
const job3 = createTestJob({
|
|
250
|
-
id: "job-3",
|
|
251
|
-
documentId: "doc-1",
|
|
252
|
-
scope: "local",
|
|
253
|
-
});
|
|
254
|
-
await queue.enqueue(job1);
|
|
255
|
-
await queue.enqueue(job2);
|
|
256
|
-
await queue.enqueue(job3);
|
|
257
|
-
await queue.clearAll();
|
|
258
|
-
expect(await queue.totalSize()).toBe(0);
|
|
259
|
-
expect(await queue.size("doc-1", "global", "main")).toBe(0);
|
|
260
|
-
expect(await queue.size("doc-2", "global", "main")).toBe(0);
|
|
261
|
-
expect(await queue.size("doc-1", "local", "main")).toBe(0);
|
|
262
|
-
});
|
|
263
|
-
it("should clean up all job indices", async () => {
|
|
264
|
-
const job1 = createTestJob({ id: "job-1" });
|
|
265
|
-
const job2 = createTestJob({ id: "job-2" });
|
|
266
|
-
await queue.enqueue(job1);
|
|
267
|
-
await queue.enqueue(job2);
|
|
268
|
-
await queue.clearAll();
|
|
269
|
-
// Verify jobs can't be removed (they're no longer indexed)
|
|
270
|
-
expect(await queue.remove(job1.id)).toBe(false);
|
|
271
|
-
expect(await queue.remove(job2.id)).toBe(false);
|
|
272
|
-
});
|
|
273
|
-
it("should handle clearing when already empty", async () => {
|
|
274
|
-
await expect(queue.clearAll()).resolves.not.toThrow();
|
|
275
|
-
expect(await queue.totalSize()).toBe(0);
|
|
276
|
-
});
|
|
277
|
-
});
|
|
278
|
-
describe("event bus integration", () => {
|
|
279
|
-
it("should emit events with correct data structure", async () => {
|
|
280
|
-
const job = createTestJob({
|
|
281
|
-
id: "test-job-id",
|
|
282
|
-
documentId: "test-doc-id",
|
|
283
|
-
scope: "test-scope",
|
|
284
|
-
branch: "test-branch",
|
|
285
|
-
});
|
|
286
|
-
await queue.enqueue(job);
|
|
287
|
-
expect(mockEventBusEmit).toHaveBeenCalledWith(QueueEventTypes.JOB_AVAILABLE, {
|
|
288
|
-
documentId: "test-doc-id",
|
|
289
|
-
scope: "test-scope",
|
|
290
|
-
branch: "test-branch",
|
|
291
|
-
jobId: "test-job-id",
|
|
292
|
-
});
|
|
293
|
-
});
|
|
294
|
-
it("should handle event bus errors gracefully", async () => {
|
|
295
|
-
mockEventBusEmit.mockRejectedValue(new Error("Event bus error"));
|
|
296
|
-
const job = createTestJob();
|
|
297
|
-
await expect(queue.enqueue(job)).rejects.toThrow("Event bus error");
|
|
298
|
-
});
|
|
299
|
-
it("should emit event for each job enqueued", async () => {
|
|
300
|
-
const job1 = createTestJob({ id: "job-1" });
|
|
301
|
-
const job2 = createTestJob({ id: "job-2" });
|
|
302
|
-
await queue.enqueue(job1);
|
|
303
|
-
await queue.enqueue(job2);
|
|
304
|
-
expect(mockEventBusEmit).toHaveBeenCalledTimes(2);
|
|
305
|
-
});
|
|
306
|
-
});
|
|
307
|
-
describe("queue key generation", () => {
|
|
308
|
-
it("should create unique keys for different document/scope/branch combinations", async () => {
|
|
309
|
-
const job1 = createTestJob({
|
|
310
|
-
id: "job-1",
|
|
311
|
-
documentId: "doc-1",
|
|
312
|
-
scope: "global",
|
|
313
|
-
branch: "main",
|
|
314
|
-
});
|
|
315
|
-
const job2 = createTestJob({
|
|
316
|
-
id: "job-2",
|
|
317
|
-
documentId: "doc-1",
|
|
318
|
-
scope: "global",
|
|
319
|
-
branch: "feature",
|
|
320
|
-
});
|
|
321
|
-
const job3 = createTestJob({
|
|
322
|
-
id: "job-3",
|
|
323
|
-
documentId: "doc-1",
|
|
324
|
-
scope: "local",
|
|
325
|
-
branch: "main",
|
|
326
|
-
});
|
|
327
|
-
const job4 = createTestJob({
|
|
328
|
-
id: "job-4",
|
|
329
|
-
documentId: "doc-2",
|
|
330
|
-
scope: "global",
|
|
331
|
-
branch: "main",
|
|
332
|
-
});
|
|
333
|
-
await queue.enqueue(job1);
|
|
334
|
-
await queue.enqueue(job2);
|
|
335
|
-
await queue.enqueue(job3);
|
|
336
|
-
await queue.enqueue(job4);
|
|
337
|
-
expect(await queue.size("doc-1", "global", "main")).toBe(1);
|
|
338
|
-
expect(await queue.size("doc-1", "global", "feature")).toBe(1);
|
|
339
|
-
expect(await queue.size("doc-1", "local", "main")).toBe(1);
|
|
340
|
-
expect(await queue.size("doc-2", "global", "main")).toBe(1);
|
|
341
|
-
});
|
|
342
|
-
it("should handle special characters in identifiers", async () => {
|
|
343
|
-
const job = createTestJob({
|
|
344
|
-
documentId: "doc:with:colons",
|
|
345
|
-
scope: "scope-with-dashes",
|
|
346
|
-
branch: "branch_with_underscores",
|
|
347
|
-
});
|
|
348
|
-
await queue.enqueue(job);
|
|
349
|
-
expect(await queue.size("doc:with:colons", "scope-with-dashes", "branch_with_underscores")).toBe(1);
|
|
350
|
-
});
|
|
351
|
-
});
|
|
352
|
-
describe("job properties", () => {
|
|
353
|
-
it("should preserve all job properties", async () => {
|
|
354
|
-
const operation = createTestOperation({
|
|
355
|
-
index: 42,
|
|
356
|
-
timestampUtcMs: "2023-01-01T00:00:00.000Z",
|
|
357
|
-
hash: "custom-hash",
|
|
358
|
-
skip: 5,
|
|
359
|
-
type: "custom-operation",
|
|
360
|
-
input: { custom: "input" },
|
|
361
|
-
error: "test error",
|
|
362
|
-
id: "custom-op-id",
|
|
363
|
-
});
|
|
364
|
-
const job = createTestJob({
|
|
365
|
-
id: "custom-job-id",
|
|
366
|
-
documentId: "custom-doc-id",
|
|
367
|
-
scope: "custom-scope",
|
|
368
|
-
branch: "custom-branch",
|
|
369
|
-
operation,
|
|
370
|
-
createdAt: "2023-01-01T00:00:00.000Z",
|
|
371
|
-
retryCount: 2,
|
|
372
|
-
maxRetries: 5,
|
|
373
|
-
});
|
|
374
|
-
await queue.enqueue(job);
|
|
375
|
-
const dequeuedJob = await queue.dequeue(job.documentId, job.scope, job.branch);
|
|
376
|
-
expect(dequeuedJob).toEqual(job);
|
|
377
|
-
});
|
|
378
|
-
it("should handle jobs with optional properties", async () => {
|
|
379
|
-
const job = {
|
|
380
|
-
id: "minimal-job",
|
|
381
|
-
documentId: "doc-1",
|
|
382
|
-
scope: "global",
|
|
383
|
-
branch: "main",
|
|
384
|
-
operation: createTestOperation(),
|
|
385
|
-
createdAt: new Date().toISOString(),
|
|
386
|
-
// retryCount and maxRetries are optional
|
|
387
|
-
};
|
|
388
|
-
await queue.enqueue(job);
|
|
389
|
-
const dequeuedJob = await queue.dequeue(job.documentId, job.scope, job.branch);
|
|
390
|
-
expect(dequeuedJob).toEqual(job);
|
|
391
|
-
expect(dequeuedJob?.retryCount).toBeUndefined();
|
|
392
|
-
expect(dequeuedJob?.maxRetries).toBeUndefined();
|
|
393
|
-
});
|
|
394
|
-
});
|
|
395
|
-
});
|
|
396
|
-
//# sourceMappingURL=queue.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"queue.test.js","sourceRoot":"","sources":["../../test/queue.test.ts"],"names":[],"mappings":"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"}
|
|
File without changes
|