@volontariapp/workers 0.1.0-snap-a583677 → 0.1.0-snap-ee35df4
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/interfaces/bull-config.interface.d.ts +3 -6
- package/dist/interfaces/bull-config.interface.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/core/base.worker.unit.spec.d.ts +0 -2
- package/dist/core/base.worker.unit.spec.d.ts.map +0 -1
- package/dist/core/base.worker.unit.spec.js +0 -110
- package/dist/core/base.worker.unit.spec.js.map +0 -1
|
@@ -1,12 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
port: number;
|
|
4
|
-
password: string;
|
|
5
|
-
db: number;
|
|
1
|
+
import type { IRedisConfig } from '@volontariapp/config';
|
|
2
|
+
export type BullConnectionConfig = IRedisConfig & {
|
|
6
3
|
maxRetriesPerRequest: null;
|
|
7
4
|
enableReadyCheck: boolean;
|
|
8
5
|
enableOfflineQueue: boolean;
|
|
9
|
-
}
|
|
6
|
+
};
|
|
10
7
|
export interface BullDefaultJobOptions {
|
|
11
8
|
attempts: number;
|
|
12
9
|
backoff: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bull-config.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/bull-config.interface.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"bull-config.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/bull-config.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD,MAAM,MAAM,oBAAoB,GAAG,YAAY,GAAG;IAChD,oBAAoB,EAAE,IAAI,CAAC;IAC3B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,kBAAkB,EAAE,OAAO,CAAC;CAC7B,CAAC;AAEF,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACzC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,oBAAoB,CAAC;IACjC,iBAAiB,EAAE,qBAAqB,CAAC;CAC1C"}
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"base.worker.unit.spec.d.ts","sourceRoot":"","sources":["../../src/core/base.worker.unit.spec.ts"],"names":[],"mappings":""}
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, beforeEach, jest } from '@jest/globals';
|
|
2
|
-
const mockInfo = jest.fn();
|
|
3
|
-
const mockError = jest.fn();
|
|
4
|
-
jest.unstable_mockModule('@nestjs/bullmq', () => ({
|
|
5
|
-
WorkerHost: class WorkerHost {
|
|
6
|
-
},
|
|
7
|
-
}));
|
|
8
|
-
jest.unstable_mockModule('@volontariapp/logger', () => ({
|
|
9
|
-
Logger: jest.fn().mockImplementation(() => ({
|
|
10
|
-
info: mockInfo,
|
|
11
|
-
error: mockError,
|
|
12
|
-
})),
|
|
13
|
-
}));
|
|
14
|
-
const { BaseWorker } = await import('./base.worker.js');
|
|
15
|
-
const { JobMessagingType } = await import('@volontariapp/messaging');
|
|
16
|
-
class TestWorker extends BaseWorker {
|
|
17
|
-
processJob = jest.fn();
|
|
18
|
-
}
|
|
19
|
-
describe('BaseWorker', () => {
|
|
20
|
-
let worker;
|
|
21
|
-
let mockJob;
|
|
22
|
-
beforeEach(() => {
|
|
23
|
-
jest.clearAllMocks();
|
|
24
|
-
worker = new TestWorker();
|
|
25
|
-
mockJob = {
|
|
26
|
-
id: 'job-123',
|
|
27
|
-
name: JobMessagingType.SEND_WELCOME_EMAIL,
|
|
28
|
-
};
|
|
29
|
-
});
|
|
30
|
-
describe('process — success', () => {
|
|
31
|
-
it('should call processJob with the job', async () => {
|
|
32
|
-
worker.processJob.mockResolvedValue(undefined);
|
|
33
|
-
await worker.process(mockJob);
|
|
34
|
-
expect(worker.processJob).toHaveBeenCalledTimes(1);
|
|
35
|
-
expect(worker.processJob).toHaveBeenCalledWith(mockJob);
|
|
36
|
-
});
|
|
37
|
-
it('should log "Processing job" before execution', async () => {
|
|
38
|
-
worker.processJob.mockResolvedValue(undefined);
|
|
39
|
-
await worker.process(mockJob);
|
|
40
|
-
expect(mockInfo).toHaveBeenNthCalledWith(1, 'Processing job', {
|
|
41
|
-
jobId: 'job-123',
|
|
42
|
-
type: JobMessagingType.SEND_WELCOME_EMAIL,
|
|
43
|
-
workerId: expect.any(String),
|
|
44
|
-
});
|
|
45
|
-
});
|
|
46
|
-
it('should log "Job completed" after execution', async () => {
|
|
47
|
-
worker.processJob.mockResolvedValue(undefined);
|
|
48
|
-
await worker.process(mockJob);
|
|
49
|
-
expect(mockInfo).toHaveBeenCalledTimes(2);
|
|
50
|
-
expect(mockInfo).toHaveBeenNthCalledWith(2, 'Job completed', {
|
|
51
|
-
jobId: 'job-123',
|
|
52
|
-
type: JobMessagingType.SEND_WELCOME_EMAIL,
|
|
53
|
-
workerId: expect.any(String),
|
|
54
|
-
});
|
|
55
|
-
});
|
|
56
|
-
it('should not call logger.error on success', async () => {
|
|
57
|
-
worker.processJob.mockResolvedValue(undefined);
|
|
58
|
-
await worker.process(mockJob);
|
|
59
|
-
expect(mockError).not.toHaveBeenCalled();
|
|
60
|
-
});
|
|
61
|
-
it('should ignore the optional token parameter', async () => {
|
|
62
|
-
worker.processJob.mockResolvedValue(undefined);
|
|
63
|
-
await worker.process(mockJob, 'some-bullmq-token');
|
|
64
|
-
expect(worker.processJob).toHaveBeenCalledWith(mockJob);
|
|
65
|
-
});
|
|
66
|
-
});
|
|
67
|
-
describe('process — failure', () => {
|
|
68
|
-
it('should re-throw the error thrown by processJob', async () => {
|
|
69
|
-
const error = new Error('Processing failed');
|
|
70
|
-
worker.processJob.mockRejectedValue(error);
|
|
71
|
-
await expect(worker.process(mockJob)).rejects.toThrow(error);
|
|
72
|
-
});
|
|
73
|
-
it('should call logger.error with job metadata and the error', async () => {
|
|
74
|
-
const error = new Error('Processing failed');
|
|
75
|
-
worker.processJob.mockRejectedValue(error);
|
|
76
|
-
await expect(worker.process(mockJob)).rejects.toThrow();
|
|
77
|
-
expect(mockError).toHaveBeenCalledTimes(1);
|
|
78
|
-
expect(mockError).toHaveBeenCalledWith('Job failed', {
|
|
79
|
-
jobId: 'job-123',
|
|
80
|
-
type: JobMessagingType.SEND_WELCOME_EMAIL,
|
|
81
|
-
workerId: expect.any(String),
|
|
82
|
-
error,
|
|
83
|
-
});
|
|
84
|
-
});
|
|
85
|
-
it('should log "Processing job" but NOT "Job completed" on failure', async () => {
|
|
86
|
-
worker.processJob.mockRejectedValue(new Error('fail'));
|
|
87
|
-
await expect(worker.process(mockJob)).rejects.toThrow();
|
|
88
|
-
expect(mockInfo).toHaveBeenCalledTimes(1);
|
|
89
|
-
expect(mockInfo).toHaveBeenCalledWith('Processing job', expect.any(Object));
|
|
90
|
-
});
|
|
91
|
-
it('should propagate non-Error thrown values', async () => {
|
|
92
|
-
const thrown = 'string-error';
|
|
93
|
-
worker.processJob.mockRejectedValue(thrown);
|
|
94
|
-
await expect(worker.process(mockJob)).rejects.toBe(thrown);
|
|
95
|
-
expect(mockError).toHaveBeenCalledWith('Job failed', expect.objectContaining({ error: thrown }));
|
|
96
|
-
});
|
|
97
|
-
});
|
|
98
|
-
describe('typing', () => {
|
|
99
|
-
it('should pass Job typed with correct payload to processJob', async () => {
|
|
100
|
-
const typedJob = {
|
|
101
|
-
id: 'typed-job',
|
|
102
|
-
name: JobMessagingType.SEND_WELCOME_EMAIL,
|
|
103
|
-
};
|
|
104
|
-
worker.processJob.mockResolvedValue(undefined);
|
|
105
|
-
await worker.process(typedJob);
|
|
106
|
-
expect(worker.processJob).toHaveBeenCalledWith(typedJob);
|
|
107
|
-
});
|
|
108
|
-
});
|
|
109
|
-
});
|
|
110
|
-
//# sourceMappingURL=base.worker.unit.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"base.worker.unit.spec.js","sourceRoot":"","sources":["../../src/core/base.worker.unit.spec.ts"],"names":[],"mappings":"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"}
|