@volontariapp/post-processors 1.0.0-snap-856af13
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/CHANGELOG.md +15 -0
- package/dist/core/base.post-processor.d.ts +27 -0
- package/dist/core/base.post-processor.d.ts.map +1 -0
- package/dist/core/base.post-processor.js +206 -0
- package/dist/core/base.post-processor.js.map +1 -0
- package/dist/core/batch.post-processor.d.ts +13 -0
- package/dist/core/batch.post-processor.d.ts.map +1 -0
- package/dist/core/batch.post-processor.js +92 -0
- package/dist/core/batch.post-processor.js.map +1 -0
- package/dist/core/index.d.ts +5 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +5 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/redis-stream.helper.d.ts +12 -0
- package/dist/core/redis-stream.helper.d.ts.map +1 -0
- package/dist/core/redis-stream.helper.js +44 -0
- package/dist/core/redis-stream.helper.js.map +1 -0
- package/dist/core/single.post-processor.d.ts +12 -0
- package/dist/core/single.post-processor.d.ts.map +1 -0
- package/dist/core/single.post-processor.js +58 -0
- package/dist/core/single.post-processor.js.map +1 -0
- package/dist/data-source.d.ts +5 -0
- package/dist/data-source.d.ts.map +1 -0
- package/dist/data-source.js +33 -0
- package/dist/data-source.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces/batch-event-item.interface.d.ts +7 -0
- package/dist/interfaces/batch-event-item.interface.d.ts.map +1 -0
- package/dist/interfaces/batch-event-item.interface.js +2 -0
- package/dist/interfaces/batch-event-item.interface.js.map +1 -0
- package/dist/interfaces/index.d.ts +4 -0
- package/dist/interfaces/index.d.ts.map +1 -0
- package/dist/interfaces/index.js +2 -0
- package/dist/interfaces/index.js.map +1 -0
- package/dist/interfaces/pending-message-info.interface.d.ts +7 -0
- package/dist/interfaces/pending-message-info.interface.d.ts.map +1 -0
- package/dist/interfaces/pending-message-info.interface.js +2 -0
- package/dist/interfaces/pending-message-info.interface.js.map +1 -0
- package/dist/interfaces/post-processor-options.interface.d.ts +11 -0
- package/dist/interfaces/post-processor-options.interface.d.ts.map +1 -0
- package/dist/interfaces/post-processor-options.interface.js +2 -0
- package/dist/interfaces/post-processor-options.interface.js.map +1 -0
- package/dist/migrations/1776783577425-CreateJobsOutbox.d.ts +7 -0
- package/dist/migrations/1776783577425-CreateJobsOutbox.d.ts.map +1 -0
- package/dist/migrations/1776783577425-CreateJobsOutbox.js +25 -0
- package/dist/migrations/1776783577425-CreateJobsOutbox.js.map +1 -0
- package/dist/migrations/1778328780881-InitialSchemaJobAudit.d.ts +6 -0
- package/dist/migrations/1778328780881-InitialSchemaJobAudit.d.ts.map +1 -0
- package/dist/migrations/1778328780881-InitialSchemaJobAudit.js +93 -0
- package/dist/migrations/1778328780881-InitialSchemaJobAudit.js.map +1 -0
- package/dist/test/global-setup.d.ts +3 -0
- package/dist/test/global-setup.d.ts.map +1 -0
- package/dist/test/global-setup.js +34 -0
- package/dist/test/global-setup.js.map +1 -0
- package/dist/test/redis-config.d.ts +3 -0
- package/dist/test/redis-config.d.ts.map +1 -0
- package/dist/test/redis-config.js +8 -0
- package/dist/test/redis-config.js.map +1 -0
- package/dist/test/setup.d.ts +2 -0
- package/dist/test/setup.d.ts.map +1 -0
- package/dist/test/setup.js +2 -0
- package/dist/test/setup.js.map +1 -0
- package/dist/test/specs/batch-post-processor/batch-post-processor.int.spec.d.ts +2 -0
- package/dist/test/specs/batch-post-processor/batch-post-processor.int.spec.d.ts.map +1 -0
- package/dist/test/specs/batch-post-processor/batch-post-processor.int.spec.js +87 -0
- package/dist/test/specs/batch-post-processor/batch-post-processor.int.spec.js.map +1 -0
- package/dist/test/specs/batch-post-processor/batch-post-processor.unit.spec.d.ts +2 -0
- package/dist/test/specs/batch-post-processor/batch-post-processor.unit.spec.d.ts.map +1 -0
- package/dist/test/specs/batch-post-processor/batch-post-processor.unit.spec.js +62 -0
- package/dist/test/specs/batch-post-processor/batch-post-processor.unit.spec.js.map +1 -0
- package/dist/test/specs/single-post-processor/single-post-processor.int.spec.d.ts +2 -0
- package/dist/test/specs/single-post-processor/single-post-processor.int.spec.d.ts.map +1 -0
- package/dist/test/specs/single-post-processor/single-post-processor.int.spec.js +89 -0
- package/dist/test/specs/single-post-processor/single-post-processor.int.spec.js.map +1 -0
- package/dist/test/specs/single-post-processor/single-post-processor.unit.spec.d.ts +2 -0
- package/dist/test/specs/single-post-processor/single-post-processor.unit.spec.d.ts.map +1 -0
- package/dist/test/specs/single-post-processor/single-post-processor.unit.spec.js +131 -0
- package/dist/test/specs/single-post-processor/single-post-processor.unit.spec.js.map +1 -0
- package/dist/test/utils/classes/test-batch-post-processor.class.d.ts +11 -0
- package/dist/test/utils/classes/test-batch-post-processor.class.d.ts.map +1 -0
- package/dist/test/utils/classes/test-batch-post-processor.class.js +20 -0
- package/dist/test/utils/classes/test-batch-post-processor.class.js.map +1 -0
- package/dist/test/utils/classes/test-post-processor.class.d.ts +12 -0
- package/dist/test/utils/classes/test-post-processor.class.d.ts.map +1 -0
- package/dist/test/utils/classes/test-post-processor.class.js +20 -0
- package/dist/test/utils/classes/test-post-processor.class.js.map +1 -0
- package/dist/test/utils/enums/test-messaging.enum.d.ts +16 -0
- package/dist/test/utils/enums/test-messaging.enum.d.ts.map +1 -0
- package/dist/test/utils/enums/test-messaging.enum.js +20 -0
- package/dist/test/utils/enums/test-messaging.enum.js.map +1 -0
- package/dist/test/utils/factories/test-event.factory.d.ts +5 -0
- package/dist/test/utils/factories/test-event.factory.d.ts.map +1 -0
- package/dist/test/utils/factories/test-event.factory.js +49 -0
- package/dist/test/utils/factories/test-event.factory.js.map +1 -0
- package/dist/test/utils/index.d.ts +7 -0
- package/dist/test/utils/index.d.ts.map +1 -0
- package/dist/test/utils/index.js +7 -0
- package/dist/test/utils/index.js.map +1 -0
- package/dist/test/utils/mocks/redis-call.mock.d.ts +21 -0
- package/dist/test/utils/mocks/redis-call.mock.d.ts.map +1 -0
- package/dist/test/utils/mocks/redis-call.mock.js +73 -0
- package/dist/test/utils/mocks/redis-call.mock.js.map +1 -0
- package/dist/test/utils/types/test-messaging.types.d.ts +9 -0
- package/dist/test/utils/types/test-messaging.types.d.ts.map +1 -0
- package/dist/test/utils/types/test-messaging.types.js +2 -0
- package/dist/test/utils/types/test-messaging.types.js.map +1 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/post-processor.types.d.ts +14 -0
- package/dist/types/post-processor.types.d.ts.map +1 -0
- package/dist/types/post-processor.types.js +2 -0
- package/dist/types/post-processor.types.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"single-post-processor.int.spec.js","sourceRoot":"","sources":["../../../../src/test/specs/single-post-processor/single-post-processor.int.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"single-post-processor.unit.spec.d.ts","sourceRoot":"","sources":["../../../../src/test/specs/single-post-processor/single-post-processor.unit.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, afterEach, jest } from '@jest/globals';
|
|
2
|
+
import { EventMessagingType } from '@volontariapp/messaging';
|
|
3
|
+
import { createMock } from '@volontariapp/testing';
|
|
4
|
+
import { TestPostProcessor, makeTestEvent, TestMessagingStream, TestMessagingGroup, TestMessagingConsumer, TestEventId, mockRedisCall, mockRedisXreadgroup, } from '../../utils/index.js';
|
|
5
|
+
describe('SinglePostProcessor', () => {
|
|
6
|
+
let redisMock;
|
|
7
|
+
let processor;
|
|
8
|
+
let callMock;
|
|
9
|
+
beforeEach(() => {
|
|
10
|
+
jest.clearAllMocks();
|
|
11
|
+
redisMock = createMock();
|
|
12
|
+
callMock = mockRedisCall(redisMock);
|
|
13
|
+
processor = new TestPostProcessor(redisMock, {
|
|
14
|
+
streamName: TestMessagingStream.TEST_STREAM,
|
|
15
|
+
groupName: TestMessagingGroup.TEST_GROUP,
|
|
16
|
+
consumerName: TestMessagingConsumer.TEST_CONSUMER,
|
|
17
|
+
claimIntervalMs: 50,
|
|
18
|
+
claimMinIdleTimeMs: 100,
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
afterEach(async () => {
|
|
22
|
+
await processor.stop();
|
|
23
|
+
});
|
|
24
|
+
describe('start/stop', () => {
|
|
25
|
+
it('should ensure consumer group on start', async () => {
|
|
26
|
+
await processor.start();
|
|
27
|
+
expect(callMock).toHaveBeenCalledWith('XGROUP', 'CREATE', TestMessagingStream.TEST_STREAM, TestMessagingGroup.TEST_GROUP, '0', 'MKSTREAM');
|
|
28
|
+
});
|
|
29
|
+
it('should ignore BUSYGROUP error', async () => {
|
|
30
|
+
callMock.mockImplementation(async (command, ..._args) => {
|
|
31
|
+
if (command === 'XGROUP') {
|
|
32
|
+
throw new Error('BUSYGROUP Consumer Group name already exists');
|
|
33
|
+
}
|
|
34
|
+
if (command === 'XREADGROUP') {
|
|
35
|
+
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
36
|
+
return [];
|
|
37
|
+
}
|
|
38
|
+
return [];
|
|
39
|
+
});
|
|
40
|
+
await expect(processor.start()).resolves.toBeUndefined();
|
|
41
|
+
});
|
|
42
|
+
it('should throw other group creation errors', async () => {
|
|
43
|
+
const error = new Error('Some connection error');
|
|
44
|
+
callMock.mockImplementation(async (command, ..._args) => {
|
|
45
|
+
if (command === 'XGROUP') {
|
|
46
|
+
throw error;
|
|
47
|
+
}
|
|
48
|
+
if (command === 'XREADGROUP') {
|
|
49
|
+
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
50
|
+
return [];
|
|
51
|
+
}
|
|
52
|
+
return [];
|
|
53
|
+
});
|
|
54
|
+
await expect(processor.start()).rejects.toThrow(error);
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
describe('runLoop', () => {
|
|
58
|
+
it('should read pending messages and then new messages', async () => {
|
|
59
|
+
const mockEvent = makeTestEvent(TestEventId.DEFAULT);
|
|
60
|
+
mockRedisXreadgroup(callMock, TestMessagingStream.TEST_STREAM, [
|
|
61
|
+
{ messageId: TestEventId.MSG_PENDING, event: mockEvent },
|
|
62
|
+
]);
|
|
63
|
+
const processSpy = jest.spyOn(processor, 'processEvent');
|
|
64
|
+
const shouldProcessSpy = jest.spyOn(processor, 'shouldProcess');
|
|
65
|
+
const acknowledgeSpy = jest.spyOn(processor, 'acknowledge');
|
|
66
|
+
await processor.start();
|
|
67
|
+
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
68
|
+
expect(processSpy).toHaveBeenCalledTimes(1);
|
|
69
|
+
expect(processSpy).toHaveBeenCalledWith(expect.objectContaining({ id: TestEventId.DEFAULT }), TestEventId.MSG_PENDING);
|
|
70
|
+
expect(shouldProcessSpy).toHaveBeenCalledWith(EventMessagingType.EVENT_CHANGED);
|
|
71
|
+
expect(acknowledgeSpy).toHaveBeenCalledWith(TestEventId.MSG_PENDING);
|
|
72
|
+
expect(callMock).toHaveBeenCalledWith('XREADGROUP', 'GROUP', TestMessagingGroup.TEST_GROUP, TestMessagingConsumer.TEST_CONSUMER, 'COUNT', 10, 'STREAMS', TestMessagingStream.TEST_STREAM, '0');
|
|
73
|
+
});
|
|
74
|
+
it('should not acknowledge if processEvent throws', async () => {
|
|
75
|
+
const mockEvent = makeTestEvent(TestEventId.DEFAULT);
|
|
76
|
+
mockRedisXreadgroup(callMock, TestMessagingStream.TEST_STREAM, [
|
|
77
|
+
{ messageId: TestEventId.MSG_PENDING, event: mockEvent },
|
|
78
|
+
]);
|
|
79
|
+
const processSpy = jest.spyOn(processor, 'processEvent');
|
|
80
|
+
const shouldProcessSpy = jest.spyOn(processor, 'shouldProcess');
|
|
81
|
+
const acknowledgeSpy = jest.spyOn(processor, 'acknowledge');
|
|
82
|
+
processor.processError = new Error('Process failed');
|
|
83
|
+
await processor.start();
|
|
84
|
+
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
85
|
+
expect(processSpy).toHaveBeenCalledTimes(1);
|
|
86
|
+
expect(shouldProcessSpy).toHaveBeenCalledWith(EventMessagingType.EVENT_CHANGED);
|
|
87
|
+
expect(acknowledgeSpy).not.toHaveBeenCalled();
|
|
88
|
+
});
|
|
89
|
+
it('should skip messages with unregistered types', async () => {
|
|
90
|
+
const mockEvent = makeTestEvent(TestEventId.DEFAULT);
|
|
91
|
+
const unregisteredEvent = {
|
|
92
|
+
...mockEvent,
|
|
93
|
+
type: 'unregistered.type',
|
|
94
|
+
};
|
|
95
|
+
mockRedisXreadgroup(callMock, TestMessagingStream.TEST_STREAM, [
|
|
96
|
+
{ messageId: TestEventId.MSG_PENDING, event: unregisteredEvent },
|
|
97
|
+
]);
|
|
98
|
+
const processSpy = jest.spyOn(processor, 'processEvent');
|
|
99
|
+
const shouldProcessSpy = jest.spyOn(processor, 'shouldProcess');
|
|
100
|
+
const acknowledgeSpy = jest.spyOn(processor, 'acknowledge');
|
|
101
|
+
processor.shouldProcessVal = false;
|
|
102
|
+
await processor.start();
|
|
103
|
+
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
104
|
+
expect(processSpy).not.toHaveBeenCalled();
|
|
105
|
+
expect(shouldProcessSpy).toHaveBeenCalledWith('unregistered.type');
|
|
106
|
+
expect(acknowledgeSpy).toHaveBeenCalledWith(TestEventId.MSG_PENDING);
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
describe('claim loop', () => {
|
|
110
|
+
it('should scan and claim long-idle pending messages from other consumers', async () => {
|
|
111
|
+
callMock.mockImplementation(async (command, ..._args) => {
|
|
112
|
+
if (command === 'XPENDING') {
|
|
113
|
+
return [
|
|
114
|
+
[TestEventId.MSG_CLAIMABLE, 'other-consumer', 150, 2],
|
|
115
|
+
[TestEventId.MSG_OWN_PENDING, TestMessagingConsumer.TEST_CONSUMER, 200, 1],
|
|
116
|
+
];
|
|
117
|
+
}
|
|
118
|
+
if (command === 'XREADGROUP') {
|
|
119
|
+
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
120
|
+
}
|
|
121
|
+
return [];
|
|
122
|
+
});
|
|
123
|
+
await processor.start();
|
|
124
|
+
await new Promise((resolve) => setTimeout(resolve, 80));
|
|
125
|
+
expect(callMock).toHaveBeenCalledWith('XPENDING', TestMessagingStream.TEST_STREAM, TestMessagingGroup.TEST_GROUP, '-', '+', 10);
|
|
126
|
+
expect(callMock).toHaveBeenCalledWith('XCLAIM', TestMessagingStream.TEST_STREAM, TestMessagingGroup.TEST_GROUP, TestMessagingConsumer.TEST_CONSUMER, '100', TestEventId.MSG_CLAIMABLE, 'JUSTID');
|
|
127
|
+
expect(callMock).not.toHaveBeenCalledWith('XCLAIM', TestMessagingStream.TEST_STREAM, TestMessagingGroup.TEST_GROUP, TestMessagingConsumer.TEST_CONSUMER, '100', TestEventId.MSG_OWN_PENDING, 'JUSTID');
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
//# sourceMappingURL=single-post-processor.unit.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"single-post-processor.unit.spec.js","sourceRoot":"","sources":["../../../../src/test/specs/single-post-processor/single-post-processor.unit.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { BatchPostProcessor } from '../../../core/batch.post-processor.js';
|
|
2
|
+
import type { BatchEventItem } from '../../../interfaces/index.js';
|
|
3
|
+
export declare class TestBatchPostProcessor extends BatchPostProcessor {
|
|
4
|
+
processedBatches: BatchEventItem[][];
|
|
5
|
+
processError: Error | null;
|
|
6
|
+
shouldProcessVal: boolean;
|
|
7
|
+
processEvents(events: BatchEventItem[]): Promise<void>;
|
|
8
|
+
shouldProcess(_eventType: string): boolean;
|
|
9
|
+
acknowledge(messageId: string): Promise<void>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=test-batch-post-processor.class.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-batch-post-processor.class.d.ts","sourceRoot":"","sources":["../../../../src/test/utils/classes/test-batch-post-processor.class.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAEnE,qBAAa,sBAAuB,SAAQ,kBAAkB;IACrD,gBAAgB,EAAE,cAAc,EAAE,EAAE,CAAM;IAC1C,YAAY,EAAE,KAAK,GAAG,IAAI,CAAQ;IAClC,gBAAgB,UAAQ;IAET,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ5D,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAIpC,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGpE"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { BatchPostProcessor } from '../../../core/batch.post-processor.js';
|
|
2
|
+
export class TestBatchPostProcessor extends BatchPostProcessor {
|
|
3
|
+
processedBatches = [];
|
|
4
|
+
processError = null;
|
|
5
|
+
shouldProcessVal = true;
|
|
6
|
+
async processEvents(events) {
|
|
7
|
+
if (this.processError) {
|
|
8
|
+
throw this.processError;
|
|
9
|
+
}
|
|
10
|
+
await Promise.resolve();
|
|
11
|
+
this.processedBatches.push(events);
|
|
12
|
+
}
|
|
13
|
+
shouldProcess(_eventType) {
|
|
14
|
+
return this.shouldProcessVal;
|
|
15
|
+
}
|
|
16
|
+
async acknowledge(messageId) {
|
|
17
|
+
return super.acknowledge(messageId);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=test-batch-post-processor.class.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-batch-post-processor.class.js","sourceRoot":"","sources":["../../../../src/test/utils/classes/test-batch-post-processor.class.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAG3E,MAAM,OAAO,sBAAuB,SAAQ,kBAAkB;IACrD,gBAAgB,GAAuB,EAAE,CAAC;IAC1C,YAAY,GAAiB,IAAI,CAAC;IAClC,gBAAgB,GAAG,IAAI,CAAC;IAEf,KAAK,CAAC,aAAa,CAAC,MAAwB;QAC1D,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,MAAM,IAAI,CAAC,YAAY,CAAC;QAC1B,CAAC;QACD,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAEe,aAAa,CAAC,UAAkB;QAC9C,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAEe,KAAK,CAAC,WAAW,CAAC,SAAiB;QACjD,OAAO,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;CACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { SinglePostProcessor } from '../../../core/single.post-processor.js';
|
|
2
|
+
import type { EventMessagingType, EventRegistry, StreamEvent } from '@volontariapp/messaging';
|
|
3
|
+
import type { ExtractPayload } from '../types/test-messaging.types.js';
|
|
4
|
+
export declare class TestPostProcessor extends SinglePostProcessor {
|
|
5
|
+
processedEvents: StreamEvent<ExtractPayload<EventRegistry[EventMessagingType]>>[];
|
|
6
|
+
processError: Error | null;
|
|
7
|
+
shouldProcessVal: boolean;
|
|
8
|
+
processEvent(event: StreamEvent<ExtractPayload<EventRegistry[EventMessagingType]>>, _messageId: string): Promise<void>;
|
|
9
|
+
shouldProcess(_eventType: string): boolean;
|
|
10
|
+
acknowledge(messageId: string): Promise<void>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=test-post-processor.class.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-post-processor.class.d.ts","sourceRoot":"","sources":["../../../../src/test/utils/classes/test-post-processor.class.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC9F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAEvE,qBAAa,iBAAkB,SAAQ,mBAAmB;IACjD,eAAe,EAAE,WAAW,CAAC,cAAc,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAM;IACvF,YAAY,EAAE,KAAK,GAAG,IAAI,CAAQ;IAClC,gBAAgB,UAAQ;IAET,YAAY,CAChC,KAAK,EAAE,WAAW,CAAC,cAAc,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC,CAAC,EACrE,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC;IAQA,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAIpC,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGpE"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { SinglePostProcessor } from '../../../core/single.post-processor.js';
|
|
2
|
+
export class TestPostProcessor extends SinglePostProcessor {
|
|
3
|
+
processedEvents = [];
|
|
4
|
+
processError = null;
|
|
5
|
+
shouldProcessVal = true;
|
|
6
|
+
async processEvent(event, _messageId) {
|
|
7
|
+
if (this.processError) {
|
|
8
|
+
throw this.processError;
|
|
9
|
+
}
|
|
10
|
+
await Promise.resolve();
|
|
11
|
+
this.processedEvents.push(event);
|
|
12
|
+
}
|
|
13
|
+
shouldProcess(_eventType) {
|
|
14
|
+
return this.shouldProcessVal;
|
|
15
|
+
}
|
|
16
|
+
async acknowledge(messageId) {
|
|
17
|
+
return super.acknowledge(messageId);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=test-post-processor.class.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-post-processor.class.js","sourceRoot":"","sources":["../../../../src/test/utils/classes/test-post-processor.class.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAI7E,MAAM,OAAO,iBAAkB,SAAQ,mBAAmB;IACjD,eAAe,GAAqE,EAAE,CAAC;IACvF,YAAY,GAAiB,IAAI,CAAC;IAClC,gBAAgB,GAAG,IAAI,CAAC;IAEf,KAAK,CAAC,YAAY,CAChC,KAAqE,EACrE,UAAkB;QAElB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,MAAM,IAAI,CAAC,YAAY,CAAC;QAC1B,CAAC;QACD,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAEe,aAAa,CAAC,UAAkB;QAC9C,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAEe,KAAK,CAAC,WAAW,CAAC,SAAiB;QACjD,OAAO,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;CACF"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare enum TestMessagingStream {
|
|
2
|
+
TEST_STREAM = "stream:test"
|
|
3
|
+
}
|
|
4
|
+
export declare enum TestMessagingGroup {
|
|
5
|
+
TEST_GROUP = "group:test"
|
|
6
|
+
}
|
|
7
|
+
export declare enum TestMessagingConsumer {
|
|
8
|
+
TEST_CONSUMER = "our-consumer"
|
|
9
|
+
}
|
|
10
|
+
export declare enum TestEventId {
|
|
11
|
+
DEFAULT = "evt-123",
|
|
12
|
+
MSG_PENDING = "1-0",
|
|
13
|
+
MSG_CLAIMABLE = "2-0",
|
|
14
|
+
MSG_OWN_PENDING = "3-0"
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=test-messaging.enum.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-messaging.enum.d.ts","sourceRoot":"","sources":["../../../../src/test/utils/enums/test-messaging.enum.ts"],"names":[],"mappings":"AAAA,oBAAY,mBAAmB;IAC7B,WAAW,gBAAgB;CAC5B;AAED,oBAAY,kBAAkB;IAC5B,UAAU,eAAe;CAC1B;AAED,oBAAY,qBAAqB;IAC/B,aAAa,iBAAiB;CAC/B;AAED,oBAAY,WAAW;IACrB,OAAO,YAAY;IACnB,WAAW,QAAQ;IACnB,aAAa,QAAQ;IACrB,eAAe,QAAQ;CACxB"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export var TestMessagingStream;
|
|
2
|
+
(function (TestMessagingStream) {
|
|
3
|
+
TestMessagingStream["TEST_STREAM"] = "stream:test";
|
|
4
|
+
})(TestMessagingStream || (TestMessagingStream = {}));
|
|
5
|
+
export var TestMessagingGroup;
|
|
6
|
+
(function (TestMessagingGroup) {
|
|
7
|
+
TestMessagingGroup["TEST_GROUP"] = "group:test";
|
|
8
|
+
})(TestMessagingGroup || (TestMessagingGroup = {}));
|
|
9
|
+
export var TestMessagingConsumer;
|
|
10
|
+
(function (TestMessagingConsumer) {
|
|
11
|
+
TestMessagingConsumer["TEST_CONSUMER"] = "our-consumer";
|
|
12
|
+
})(TestMessagingConsumer || (TestMessagingConsumer = {}));
|
|
13
|
+
export var TestEventId;
|
|
14
|
+
(function (TestEventId) {
|
|
15
|
+
TestEventId["DEFAULT"] = "evt-123";
|
|
16
|
+
TestEventId["MSG_PENDING"] = "1-0";
|
|
17
|
+
TestEventId["MSG_CLAIMABLE"] = "2-0";
|
|
18
|
+
TestEventId["MSG_OWN_PENDING"] = "3-0";
|
|
19
|
+
})(TestEventId || (TestEventId = {}));
|
|
20
|
+
//# sourceMappingURL=test-messaging.enum.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-messaging.enum.js","sourceRoot":"","sources":["../../../../src/test/utils/enums/test-messaging.enum.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,mBAEX;AAFD,WAAY,mBAAmB;IAC7B,kDAA2B,CAAA;AAC7B,CAAC,EAFW,mBAAmB,KAAnB,mBAAmB,QAE9B;AAED,MAAM,CAAN,IAAY,kBAEX;AAFD,WAAY,kBAAkB;IAC5B,+CAAyB,CAAA;AAC3B,CAAC,EAFW,kBAAkB,KAAlB,kBAAkB,QAE7B;AAED,MAAM,CAAN,IAAY,qBAEX;AAFD,WAAY,qBAAqB;IAC/B,uDAA8B,CAAA;AAChC,CAAC,EAFW,qBAAqB,KAArB,qBAAqB,QAEhC;AAED,MAAM,CAAN,IAAY,WAKX;AALD,WAAY,WAAW;IACrB,kCAAmB,CAAA;IACnB,kCAAmB,CAAA;IACnB,oCAAqB,CAAA;IACrB,sCAAuB,CAAA;AACzB,CAAC,EALW,WAAW,KAAX,WAAW,QAKtB"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type EventRegistry, type StreamEvent } from '@volontariapp/messaging';
|
|
2
|
+
import type { Redis } from 'ioredis';
|
|
3
|
+
export declare function makeTestEvent(id: string): StreamEvent<EventRegistry['event.changed']>;
|
|
4
|
+
export declare function pushTestEventToStream(redis: Redis, streamName: string, id: string, eventPayload?: StreamEvent<import("@volontariapp/messaging").EventChangedPayload<import("@volontariapp/messaging").IEventPayload>>): Promise<string>;
|
|
5
|
+
//# sourceMappingURL=test-event.factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-event.factory.d.ts","sourceRoot":"","sources":["../../../../src/test/utils/factories/test-event.factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,aAAa,EAAE,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEnG,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAErC,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC,CA4BrF;AAED,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,MAAM,EAClB,EAAE,EAAE,MAAM,EACV,YAAY,sHAAoB,GAC/B,OAAO,CAAC,MAAM,CAAC,CAgBjB"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { EventMessagingType } from '@volontariapp/messaging';
|
|
2
|
+
import { EventType, EventState } from '@volontariapp/contracts';
|
|
3
|
+
export function makeTestEvent(id) {
|
|
4
|
+
return {
|
|
5
|
+
id,
|
|
6
|
+
type: EventMessagingType.EVENT_CHANGED,
|
|
7
|
+
emitter: 'test-emitter',
|
|
8
|
+
version: 1,
|
|
9
|
+
payload: {
|
|
10
|
+
after: {
|
|
11
|
+
before: null,
|
|
12
|
+
after: {
|
|
13
|
+
id,
|
|
14
|
+
name: 'Test Event Name',
|
|
15
|
+
description: 'Test Event Description',
|
|
16
|
+
startAt: new Date('2026-05-19T10:00:00.000Z'),
|
|
17
|
+
endAt: new Date('2026-05-19T12:00:00.000Z'),
|
|
18
|
+
type: EventType.EVENT_TYPE_SOCIAL,
|
|
19
|
+
state: EventState.EVENT_STATE_DRAFT,
|
|
20
|
+
awardedImpactScore: 10,
|
|
21
|
+
maxParticipants: 10,
|
|
22
|
+
organizerId: 'org-id',
|
|
23
|
+
localisationName: 'Paris',
|
|
24
|
+
createdAt: new Date('2026-05-19T08:00:00.000Z'),
|
|
25
|
+
updatedAt: new Date('2026-05-19T08:00:00.000Z'),
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
createdAt: new Date('2026-05-19T08:00:00.000Z').toISOString(),
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
export async function pushTestEventToStream(redis, streamName, id, eventPayload = makeTestEvent(id)) {
|
|
33
|
+
const fields = [
|
|
34
|
+
'id',
|
|
35
|
+
id,
|
|
36
|
+
'type',
|
|
37
|
+
eventPayload.type,
|
|
38
|
+
'emitter',
|
|
39
|
+
eventPayload.emitter,
|
|
40
|
+
'version',
|
|
41
|
+
eventPayload.version.toString(),
|
|
42
|
+
'createdAt',
|
|
43
|
+
eventPayload.createdAt,
|
|
44
|
+
'event',
|
|
45
|
+
JSON.stringify(eventPayload),
|
|
46
|
+
];
|
|
47
|
+
return (await redis.call('XADD', streamName, '*', ...fields));
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=test-event.factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-event.factory.js","sourceRoot":"","sources":["../../../../src/test/utils/factories/test-event.factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAwC,MAAM,yBAAyB,CAAC;AACnG,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAGhE,MAAM,UAAU,aAAa,CAAC,EAAU;IACtC,OAAO;QACL,EAAE;QACF,IAAI,EAAE,kBAAkB,CAAC,aAAa;QACtC,OAAO,EAAE,cAAc;QACvB,OAAO,EAAE,CAAC;QACV,OAAO,EAAE;YACP,KAAK,EAAE;gBACL,MAAM,EAAE,IAAI;gBACZ,KAAK,EAAE;oBACL,EAAE;oBACF,IAAI,EAAE,iBAAiB;oBACvB,WAAW,EAAE,wBAAwB;oBACrC,OAAO,EAAE,IAAI,IAAI,CAAC,0BAA0B,CAAC;oBAC7C,KAAK,EAAE,IAAI,IAAI,CAAC,0BAA0B,CAAC;oBAC3C,IAAI,EAAE,SAAS,CAAC,iBAAiB;oBACjC,KAAK,EAAE,UAAU,CAAC,iBAAiB;oBACnC,kBAAkB,EAAE,EAAE;oBACtB,eAAe,EAAE,EAAE;oBACnB,WAAW,EAAE,QAAQ;oBACrB,gBAAgB,EAAE,OAAO;oBACzB,SAAS,EAAE,IAAI,IAAI,CAAC,0BAA0B,CAAC;oBAC/C,SAAS,EAAE,IAAI,IAAI,CAAC,0BAA0B,CAAC;iBAChD;aACF;SACF;QACD,SAAS,EAAE,IAAI,IAAI,CAAC,0BAA0B,CAAC,CAAC,WAAW,EAAE;KAC9D,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,KAAY,EACZ,UAAkB,EAClB,EAAU,EACV,YAAY,GAAG,aAAa,CAAC,EAAE,CAAC;IAEhC,MAAM,MAAM,GAAG;QACb,IAAI;QACJ,EAAE;QACF,MAAM;QACN,YAAY,CAAC,IAAI;QACjB,SAAS;QACT,YAAY,CAAC,OAAO;QACpB,SAAS;QACT,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE;QAC/B,WAAW;QACX,YAAY,CAAC,SAAS;QACtB,OAAO;QACP,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;KAC7B,CAAC;IACF,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,CAAW,CAAC;AAC1E,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from './types/test-messaging.types.js';
|
|
2
|
+
export * from './classes/test-post-processor.class.js';
|
|
3
|
+
export * from './classes/test-batch-post-processor.class.js';
|
|
4
|
+
export * from './factories/test-event.factory.js';
|
|
5
|
+
export * from './enums/test-messaging.enum.js';
|
|
6
|
+
export * from './mocks/redis-call.mock.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/test/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAC;AAChD,cAAc,wCAAwC,CAAC;AACvD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,mCAAmC,CAAC;AAClD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from './types/test-messaging.types.js';
|
|
2
|
+
export * from './classes/test-post-processor.class.js';
|
|
3
|
+
export * from './classes/test-batch-post-processor.class.js';
|
|
4
|
+
export * from './factories/test-event.factory.js';
|
|
5
|
+
export * from './enums/test-messaging.enum.js';
|
|
6
|
+
export * from './mocks/redis-call.mock.js';
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/test/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAC;AAChD,cAAc,wCAAwC,CAAC;AACvD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,mCAAmC,CAAC;AAClD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Redis } from 'ioredis';
|
|
2
|
+
import { jest } from '@jest/globals';
|
|
3
|
+
import type { StreamEvent } from '@volontariapp/messaging';
|
|
4
|
+
import { TestPostProcessor } from '../classes/test-post-processor.class.js';
|
|
5
|
+
export type RedisMockCallReturn = string | number | null | RedisMockCallReturn[];
|
|
6
|
+
export declare function mockRedisCall(redisMock: jest.Mocked<Redis>): jest.MockedFunction<(command: string, ...args: (string | number)[]) => Promise<RedisMockCallReturn>>;
|
|
7
|
+
export declare function formatEventsToXreadgroupResponse(streamName: string, entries: Array<{
|
|
8
|
+
messageId: string;
|
|
9
|
+
event: StreamEvent;
|
|
10
|
+
}>): RedisMockCallReturn;
|
|
11
|
+
export declare function mockRedisXreadgroup(callMock: ReturnType<typeof mockRedisCall>, streamName: string, entries: Array<{
|
|
12
|
+
messageId: string;
|
|
13
|
+
event: StreamEvent;
|
|
14
|
+
}>): void;
|
|
15
|
+
export interface TestProcessorSetup {
|
|
16
|
+
redisMock: jest.Mocked<Redis>;
|
|
17
|
+
processor: TestPostProcessor;
|
|
18
|
+
callMock: jest.MockedFunction<(command: string, ...args: (string | number)[]) => Promise<RedisMockCallReturn>>;
|
|
19
|
+
}
|
|
20
|
+
export declare function setupTestProcessor(): TestProcessorSetup;
|
|
21
|
+
//# sourceMappingURL=redis-call.mock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redis-call.mock.d.ts","sourceRoot":"","sources":["../../../../src/test/utils/mocks/redis-call.mock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAO5E,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,mBAAmB,EAAE,CAAC;AAEjF,wBAAgB,aAAa,CAC3B,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAC5B,IAAI,CAAC,cAAc,CACpB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAChF,CAoBA;AAED,wBAAgB,gCAAgC,CAC9C,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,KAAK,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,WAAW,CAAA;CAAE,CAAC,GACxD,mBAAmB,CAUrB;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,EAC1C,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,KAAK,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,WAAW,CAAA;CAAE,CAAC,GACxD,IAAI,CAiBN;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9B,SAAS,EAAE,iBAAiB,CAAC;IAC7B,QAAQ,EAAE,IAAI,CAAC,cAAc,CAC3B,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAChF,CAAC;CACH;AAED,wBAAgB,kBAAkB,IAAI,kBAAkB,CAavD"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { createMock } from '@volontariapp/testing';
|
|
2
|
+
import { jest } from '@jest/globals';
|
|
3
|
+
import { TestPostProcessor } from '../classes/test-post-processor.class.js';
|
|
4
|
+
import { TestMessagingStream, TestMessagingGroup, TestMessagingConsumer, } from '../enums/test-messaging.enum.js';
|
|
5
|
+
export function mockRedisCall(redisMock) {
|
|
6
|
+
const callMock = jest.spyOn(redisMock, 'call');
|
|
7
|
+
callMock.mockImplementation(async (command, ..._args) => {
|
|
8
|
+
if (command === 'XGROUP')
|
|
9
|
+
return 'OK';
|
|
10
|
+
if (command === 'XACK')
|
|
11
|
+
return 1;
|
|
12
|
+
if (command === 'XPENDING')
|
|
13
|
+
return [];
|
|
14
|
+
if (command === 'XCLAIM')
|
|
15
|
+
return [];
|
|
16
|
+
if (command === 'SET')
|
|
17
|
+
return 'OK';
|
|
18
|
+
if (command === 'DEL')
|
|
19
|
+
return 1;
|
|
20
|
+
if (command === 'XREADGROUP') {
|
|
21
|
+
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
22
|
+
return [];
|
|
23
|
+
}
|
|
24
|
+
return null;
|
|
25
|
+
});
|
|
26
|
+
return callMock;
|
|
27
|
+
}
|
|
28
|
+
export function formatEventsToXreadgroupResponse(streamName, entries) {
|
|
29
|
+
return [
|
|
30
|
+
[
|
|
31
|
+
streamName,
|
|
32
|
+
entries.map(({ messageId, event }) => [
|
|
33
|
+
messageId,
|
|
34
|
+
['id', event.id, 'type', event.type, 'event', JSON.stringify(event)],
|
|
35
|
+
]),
|
|
36
|
+
],
|
|
37
|
+
];
|
|
38
|
+
}
|
|
39
|
+
export function mockRedisXreadgroup(callMock, streamName, entries) {
|
|
40
|
+
let xreadgroupCount = 0;
|
|
41
|
+
callMock.mockImplementation(async (command, ..._args) => {
|
|
42
|
+
if (command === 'XGROUP')
|
|
43
|
+
return 'OK';
|
|
44
|
+
if (command === 'XACK')
|
|
45
|
+
return 1;
|
|
46
|
+
if (command === 'SET')
|
|
47
|
+
return 'OK';
|
|
48
|
+
if (command === 'DEL')
|
|
49
|
+
return 1;
|
|
50
|
+
if (command === 'XREADGROUP') {
|
|
51
|
+
xreadgroupCount++;
|
|
52
|
+
if (xreadgroupCount === 1) {
|
|
53
|
+
return formatEventsToXreadgroupResponse(streamName, entries);
|
|
54
|
+
}
|
|
55
|
+
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
56
|
+
return [];
|
|
57
|
+
}
|
|
58
|
+
return null;
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
export function setupTestProcessor() {
|
|
62
|
+
const redisMock = createMock();
|
|
63
|
+
const callMock = mockRedisCall(redisMock);
|
|
64
|
+
const processor = new TestPostProcessor(redisMock, {
|
|
65
|
+
streamName: TestMessagingStream.TEST_STREAM,
|
|
66
|
+
groupName: TestMessagingGroup.TEST_GROUP,
|
|
67
|
+
consumerName: TestMessagingConsumer.TEST_CONSUMER,
|
|
68
|
+
claimIntervalMs: 50,
|
|
69
|
+
claimMinIdleTimeMs: 100,
|
|
70
|
+
});
|
|
71
|
+
return { redisMock, processor, callMock };
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=redis-call.mock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redis-call.mock.js","sourceRoot":"","sources":["../../../../src/test/utils/mocks/redis-call.mock.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { EventChangedPayload } from '@volontariapp/messaging';
|
|
2
|
+
export type ExtractPayload<T> = T extends EventChangedPayload<infer P> ? P : T;
|
|
3
|
+
export type RedisXPendingSummary = [
|
|
4
|
+
pendingCount: number,
|
|
5
|
+
smallestId: string | null,
|
|
6
|
+
greatestId: string | null,
|
|
7
|
+
consumers: Array<[consumerName: string, pendingCount: string]>
|
|
8
|
+
];
|
|
9
|
+
//# sourceMappingURL=test-messaging.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-messaging.types.d.ts","sourceRoot":"","sources":["../../../../src/test/utils/types/test-messaging.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAEnE,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,CAAC,SAAS,mBAAmB,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAM/E,MAAM,MAAM,oBAAoB,GAAG;IACjC,YAAY,EAAE,MAAM;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI;IACzB,SAAS,EAAE,KAAK,CAAC,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;CAC/D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-messaging.types.js","sourceRoot":"","sources":["../../../../src/test/utils/types/test-messaging.types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,sBAAsB,EACtB,gBAAgB,EAChB,mBAAmB,EACnB,sBAAsB,EACtB,WAAW,EACX,cAAc,GACf,MAAM,2BAA2B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { EventChangedPayload } from '@volontariapp/messaging';
|
|
2
|
+
export type RedisStreamFieldsArray = string[];
|
|
3
|
+
export interface RedisStreamEntry {
|
|
4
|
+
id: string;
|
|
5
|
+
fields: Record<string, string | undefined>;
|
|
6
|
+
}
|
|
7
|
+
export type RedisStreamRawEntry = [string, RedisStreamFieldsArray];
|
|
8
|
+
export type RedisStreamRawResponse = [string, RedisStreamRawEntry[]][];
|
|
9
|
+
export interface ClaimResult {
|
|
10
|
+
claimedCount: number;
|
|
11
|
+
errorCount: number;
|
|
12
|
+
}
|
|
13
|
+
export type ExtractPayload<T> = T extends EventChangedPayload<infer P> ? P : T;
|
|
14
|
+
//# sourceMappingURL=post-processor.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"post-processor.types.d.ts","sourceRoot":"","sources":["../../src/types/post-processor.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAEnE,MAAM,MAAM,sBAAsB,GAAG,MAAM,EAAE,CAAC;AAE9C,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC5C;AAED,MAAM,MAAM,mBAAmB,GAAG,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;AAEnE,MAAM,MAAM,sBAAsB,GAAG,CAAC,MAAM,EAAE,mBAAmB,EAAE,CAAC,EAAE,CAAC;AAEvE,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,CAAC,SAAS,mBAAmB,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"post-processor.types.js","sourceRoot":"","sources":["../../src/types/post-processor.types.ts"],"names":[],"mappings":""}
|