pp-command-bus 1.5.0 → 2.0.0
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/README.md +400 -1219
- package/dist/command-bus/command-bus.spec.js +138 -359
- package/dist/command-bus/command-bus.spec.js.map +1 -1
- package/dist/command-bus/command.d.ts +3 -4
- package/dist/command-bus/command.js +3 -32
- package/dist/command-bus/command.js.map +1 -1
- package/dist/command-bus/config/command-bus-config.d.ts +75 -21
- package/dist/command-bus/config/command-bus-config.js +99 -58
- package/dist/command-bus/config/command-bus-config.js.map +1 -1
- package/dist/command-bus/config/command-bus-config.spec.js +174 -100
- package/dist/command-bus/config/command-bus-config.spec.js.map +1 -1
- package/dist/command-bus/index.d.ts +39 -52
- package/dist/command-bus/index.js +133 -126
- package/dist/command-bus/index.js.map +1 -1
- package/dist/command-bus/logging/command-logger.d.ts +2 -0
- package/dist/command-bus/logging/command-logger.js +7 -0
- package/dist/command-bus/logging/command-logger.js.map +1 -1
- package/dist/command-bus/logging/command-logger.spec.js +36 -0
- package/dist/command-bus/logging/command-logger.spec.js.map +1 -1
- package/dist/command-bus/serialization/index.d.ts +6 -0
- package/dist/command-bus/serialization/index.js +9 -0
- package/dist/command-bus/serialization/index.js.map +1 -0
- package/dist/command-bus/serialization/msgpack-serializer.d.ts +26 -0
- package/dist/command-bus/serialization/msgpack-serializer.js +70 -0
- package/dist/command-bus/serialization/msgpack-serializer.js.map +1 -0
- package/dist/command-bus/serialization/msgpack-serializer.spec.js +223 -0
- package/dist/command-bus/serialization/msgpack-serializer.spec.js.map +1 -0
- package/dist/command-bus/serialization/serializer.interface.d.ts +21 -0
- package/dist/command-bus/serialization/serializer.interface.js +3 -0
- package/dist/command-bus/serialization/serializer.interface.js.map +1 -0
- package/dist/command-bus/transport/consumer-loop.d.ts +45 -0
- package/dist/command-bus/transport/consumer-loop.js +90 -0
- package/dist/command-bus/transport/consumer-loop.js.map +1 -0
- package/dist/command-bus/transport/consumer-loop.spec.js +216 -0
- package/dist/command-bus/transport/consumer-loop.spec.js.map +1 -0
- package/dist/command-bus/transport/index.d.ts +21 -0
- package/dist/command-bus/transport/index.js +23 -0
- package/dist/command-bus/transport/index.js.map +1 -0
- package/dist/command-bus/transport/message-processor.d.ts +59 -0
- package/dist/command-bus/transport/message-processor.js +111 -0
- package/dist/command-bus/transport/message-processor.js.map +1 -0
- package/dist/command-bus/transport/message-processor.spec.js +185 -0
- package/dist/command-bus/transport/message-processor.spec.js.map +1 -0
- package/dist/command-bus/transport/pending-recovery.d.ts +54 -0
- package/dist/command-bus/transport/pending-recovery.js +139 -0
- package/dist/command-bus/transport/pending-recovery.js.map +1 -0
- package/dist/command-bus/transport/pending-recovery.spec.js +176 -0
- package/dist/command-bus/transport/pending-recovery.spec.js.map +1 -0
- package/dist/command-bus/transport/redis-codec.d.ts +24 -0
- package/dist/command-bus/transport/redis-codec.js +33 -0
- package/dist/command-bus/transport/redis-codec.js.map +1 -0
- package/dist/command-bus/transport/redis-codec.spec.js +53 -0
- package/dist/command-bus/transport/redis-codec.spec.js.map +1 -0
- package/dist/command-bus/transport/redis-streams-transport.d.ts +91 -0
- package/dist/command-bus/transport/redis-streams-transport.js +134 -0
- package/dist/command-bus/transport/redis-streams-transport.js.map +1 -0
- package/dist/command-bus/transport/redis-streams-transport.spec.js +420 -0
- package/dist/command-bus/transport/redis-streams-transport.spec.js.map +1 -0
- package/dist/command-bus/transport/rpc-handler.d.ts +39 -0
- package/dist/command-bus/transport/rpc-handler.js +87 -0
- package/dist/command-bus/transport/rpc-handler.js.map +1 -0
- package/dist/command-bus/transport/rpc-handler.spec.js +157 -0
- package/dist/command-bus/transport/rpc-handler.spec.js.map +1 -0
- package/dist/command-bus/transport/stream-consumer.d.ts +89 -0
- package/dist/command-bus/transport/stream-consumer.js +181 -0
- package/dist/command-bus/transport/stream-consumer.js.map +1 -0
- package/dist/command-bus/transport/stream-consumer.spec.js +284 -0
- package/dist/command-bus/transport/stream-consumer.spec.js.map +1 -0
- package/dist/command-bus/transport/stream-producer.d.ts +23 -0
- package/dist/command-bus/transport/stream-producer.js +70 -0
- package/dist/command-bus/transport/stream-producer.js.map +1 -0
- package/dist/command-bus/transport/stream-producer.spec.js +125 -0
- package/dist/command-bus/transport/stream-producer.spec.js.map +1 -0
- package/dist/command-bus/transport/transport.interface.d.ts +87 -0
- package/dist/command-bus/transport/transport.interface.js +3 -0
- package/dist/command-bus/transport/transport.interface.js.map +1 -0
- package/dist/command-bus/types/index.d.ts +0 -84
- package/dist/examples/rpc.demo.js +1 -1
- package/dist/examples/rpc.demo.js.map +1 -1
- package/dist/index.d.ts +8 -5
- package/dist/index.js +6 -4
- package/dist/index.js.map +1 -1
- package/dist/pp-command-bus-2.0.0.tgz +0 -0
- package/dist/shared/redis/connection-pool.d.ts +54 -0
- package/dist/shared/redis/connection-pool.js +117 -0
- package/dist/shared/redis/connection-pool.js.map +1 -0
- package/dist/shared/redis/connection-pool.spec.js +114 -0
- package/dist/shared/redis/connection-pool.spec.js.map +1 -0
- package/dist/shared/redis/index.d.ts +5 -3
- package/dist/shared/redis/index.js +6 -4
- package/dist/shared/redis/index.js.map +1 -1
- package/dist/shared/redis/rpc-connection-pool.d.ts +61 -0
- package/dist/shared/redis/rpc-connection-pool.js +154 -0
- package/dist/shared/redis/rpc-connection-pool.js.map +1 -0
- package/dist/shared/redis/rpc-connection-pool.spec.d.ts +1 -0
- package/dist/shared/redis/rpc-connection-pool.spec.js +173 -0
- package/dist/shared/redis/rpc-connection-pool.spec.js.map +1 -0
- package/dist/shared/types.d.ts +0 -4
- package/dist/shared/utils/error-utils.d.ts +8 -0
- package/dist/shared/utils/error-utils.js +14 -0
- package/dist/shared/utils/error-utils.js.map +1 -0
- package/package.json +12 -12
- package/dist/command-bus/config/auto-config-optimizer.d.ts +0 -35
- package/dist/command-bus/config/auto-config-optimizer.js +0 -52
- package/dist/command-bus/config/auto-config-optimizer.js.map +0 -1
- package/dist/command-bus/config/auto-config-optimizer.spec.js +0 -42
- package/dist/command-bus/config/auto-config-optimizer.spec.js.map +0 -1
- package/dist/command-bus/job/index.d.ts +0 -6
- package/dist/command-bus/job/index.js +0 -15
- package/dist/command-bus/job/index.js.map +0 -1
- package/dist/command-bus/job/job-options-builder.d.ts +0 -21
- package/dist/command-bus/job/job-options-builder.js +0 -58
- package/dist/command-bus/job/job-options-builder.js.map +0 -1
- package/dist/command-bus/job/job-options-builder.spec.js +0 -156
- package/dist/command-bus/job/job-options-builder.spec.js.map +0 -1
- package/dist/command-bus/job/job-processor.d.ts +0 -39
- package/dist/command-bus/job/job-processor.js +0 -203
- package/dist/command-bus/job/job-processor.js.map +0 -1
- package/dist/command-bus/job/job-processor.spec.js +0 -436
- package/dist/command-bus/job/job-processor.spec.js.map +0 -1
- package/dist/command-bus/queue/index.d.ts +0 -5
- package/dist/command-bus/queue/index.js +0 -13
- package/dist/command-bus/queue/index.js.map +0 -1
- package/dist/command-bus/queue/queue-manager.d.ts +0 -56
- package/dist/command-bus/queue/queue-manager.js +0 -163
- package/dist/command-bus/queue/queue-manager.js.map +0 -1
- package/dist/command-bus/queue/queue-manager.spec.js +0 -371
- package/dist/command-bus/queue/queue-manager.spec.js.map +0 -1
- package/dist/command-bus/rpc/index.d.ts +0 -11
- package/dist/command-bus/rpc/index.js +0 -19
- package/dist/command-bus/rpc/index.js.map +0 -1
- package/dist/command-bus/rpc/payload-compression.service.d.ts +0 -50
- package/dist/command-bus/rpc/payload-compression.service.js +0 -215
- package/dist/command-bus/rpc/payload-compression.service.js.map +0 -1
- package/dist/command-bus/rpc/payload-compression.service.spec.js +0 -376
- package/dist/command-bus/rpc/payload-compression.service.spec.js.map +0 -1
- package/dist/command-bus/rpc/rpc-coordinator.d.ts +0 -96
- package/dist/command-bus/rpc/rpc-coordinator.js +0 -500
- package/dist/command-bus/rpc/rpc-coordinator.js.map +0 -1
- package/dist/command-bus/rpc/rpc-coordinator.spec.js +0 -621
- package/dist/command-bus/rpc/rpc-coordinator.spec.js.map +0 -1
- package/dist/command-bus/rpc/rpc-job-cancellation.service.d.ts +0 -82
- package/dist/command-bus/rpc/rpc-job-cancellation.service.js +0 -180
- package/dist/command-bus/rpc/rpc-job-cancellation.service.js.map +0 -1
- package/dist/command-bus/rpc/rpc-job-cancellation.service.spec.js +0 -286
- package/dist/command-bus/rpc/rpc-job-cancellation.service.spec.js.map +0 -1
- package/dist/command-bus/worker/index.d.ts +0 -10
- package/dist/command-bus/worker/index.js +0 -19
- package/dist/command-bus/worker/index.js.map +0 -1
- package/dist/command-bus/worker/worker-benchmark.d.ts +0 -71
- package/dist/command-bus/worker/worker-benchmark.js +0 -202
- package/dist/command-bus/worker/worker-benchmark.js.map +0 -1
- package/dist/command-bus/worker/worker-benchmark.spec.js +0 -310
- package/dist/command-bus/worker/worker-benchmark.spec.js.map +0 -1
- package/dist/command-bus/worker/worker-metrics-collector.d.ts +0 -98
- package/dist/command-bus/worker/worker-metrics-collector.js +0 -242
- package/dist/command-bus/worker/worker-metrics-collector.js.map +0 -1
- package/dist/command-bus/worker/worker-orchestrator.d.ts +0 -70
- package/dist/command-bus/worker/worker-orchestrator.js +0 -339
- package/dist/command-bus/worker/worker-orchestrator.js.map +0 -1
- package/dist/command-bus/worker/worker-orchestrator.spec.js +0 -712
- package/dist/command-bus/worker/worker-orchestrator.spec.js.map +0 -1
- package/dist/examples/auto-config.demo.d.ts +0 -9
- package/dist/examples/auto-config.demo.js +0 -106
- package/dist/examples/auto-config.demo.js.map +0 -1
- package/dist/examples/rpc-compression.demo.d.ts +0 -5
- package/dist/examples/rpc-compression.demo.js +0 -358
- package/dist/examples/rpc-compression.demo.js.map +0 -1
- package/dist/examples/rpc-resilience.demo.d.ts +0 -15
- package/dist/examples/rpc-resilience.demo.js +0 -233
- package/dist/examples/rpc-resilience.demo.js.map +0 -1
- package/dist/pp-command-bus-1.5.0.tgz +0 -0
- package/dist/shared/config/base-config.d.ts +0 -54
- package/dist/shared/config/base-config.js +0 -114
- package/dist/shared/config/base-config.js.map +0 -1
- package/dist/shared/config/base-config.spec.js +0 -204
- package/dist/shared/config/base-config.spec.js.map +0 -1
- package/dist/shared/config/index.d.ts +0 -1
- package/dist/shared/config/index.js +0 -9
- package/dist/shared/config/index.js.map +0 -1
- package/dist/shared/redis/redis-connection-factory.d.ts +0 -66
- package/dist/shared/redis/redis-connection-factory.js +0 -113
- package/dist/shared/redis/redis-connection-factory.js.map +0 -1
- /package/dist/command-bus/{config/auto-config-optimizer.spec.d.ts → serialization/msgpack-serializer.spec.d.ts} +0 -0
- /package/dist/command-bus/{job/job-options-builder.spec.d.ts → transport/consumer-loop.spec.d.ts} +0 -0
- /package/dist/command-bus/{job/job-processor.spec.d.ts → transport/message-processor.spec.d.ts} +0 -0
- /package/dist/command-bus/{queue/queue-manager.spec.d.ts → transport/pending-recovery.spec.d.ts} +0 -0
- /package/dist/command-bus/{rpc/payload-compression.service.spec.d.ts → transport/redis-codec.spec.d.ts} +0 -0
- /package/dist/command-bus/{rpc/rpc-coordinator.spec.d.ts → transport/redis-streams-transport.spec.d.ts} +0 -0
- /package/dist/command-bus/{rpc/rpc-job-cancellation.service.spec.d.ts → transport/rpc-handler.spec.d.ts} +0 -0
- /package/dist/command-bus/{worker/worker-benchmark.spec.d.ts → transport/stream-consumer.spec.d.ts} +0 -0
- /package/dist/command-bus/{worker/worker-orchestrator.spec.d.ts → transport/stream-producer.spec.d.ts} +0 -0
- /package/dist/shared/{config/base-config.spec.d.ts → redis/connection-pool.spec.d.ts} +0 -0
|
@@ -12,444 +12,223 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
12
12
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
const bullmq_1 = require("bullmq");
|
|
16
15
|
const index_1 = __importDefault(require("./index"));
|
|
17
|
-
const command_bus_config_1 = __importDefault(require("./config/command-bus-config"));
|
|
18
16
|
const command_1 = __importDefault(require("./command"));
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
// Mock ioredis
|
|
17
|
+
const command_bus_config_1 = __importDefault(require("./config/command-bus-config"));
|
|
18
|
+
// Mock ioredis — disconnect() przerywa blocking XREADGROUP (jak prawdziwy Redis)
|
|
22
19
|
jest.mock('ioredis', () => {
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
.fn()
|
|
28
|
-
.mockImplementation((
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
if (event === 'ready') {
|
|
40
|
-
setImmediate(() => handler());
|
|
41
|
-
}
|
|
42
|
-
return mockSubscriber;
|
|
43
|
-
}),
|
|
44
|
-
off: jest.fn().mockReturnThis(),
|
|
45
|
-
removeAllListeners: jest.fn().mockReturnThis(),
|
|
46
|
-
quit: jest.fn().mockResolvedValue(undefined),
|
|
47
|
-
};
|
|
48
|
-
return {
|
|
49
|
-
Redis: jest.fn().mockImplementation(() => ({
|
|
50
|
-
quit: jest.fn().mockResolvedValue(undefined),
|
|
51
|
-
ping: jest.fn().mockResolvedValue('PONG'),
|
|
52
|
-
set: jest.fn().mockResolvedValue('OK'),
|
|
53
|
-
get: jest.fn().mockResolvedValue('test-value'),
|
|
20
|
+
const mockRedis = jest.fn().mockImplementation(() => {
|
|
21
|
+
/** Rejecty pending blocking operations — disconnect() je wywołuje */
|
|
22
|
+
const pendingRejects = [];
|
|
23
|
+
return {
|
|
24
|
+
xadd: jest.fn().mockResolvedValue('1700000000000-0'),
|
|
25
|
+
xreadgroup: jest.fn().mockImplementation(() => new Promise((_resolve, reject) => {
|
|
26
|
+
pendingRejects.push(reject);
|
|
27
|
+
})),
|
|
28
|
+
xack: jest.fn().mockResolvedValue(1),
|
|
29
|
+
xgroup: jest.fn().mockResolvedValue('OK'),
|
|
30
|
+
xpending: jest.fn().mockResolvedValue([]),
|
|
31
|
+
xclaim: jest.fn().mockResolvedValue([]),
|
|
32
|
+
xtrim: jest.fn().mockResolvedValue(0),
|
|
33
|
+
brpop: jest.fn().mockResolvedValue(null),
|
|
34
|
+
lpush: jest.fn().mockResolvedValue(1),
|
|
35
|
+
expire: jest.fn().mockResolvedValue(1),
|
|
54
36
|
del: jest.fn().mockResolvedValue(1),
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
37
|
+
quit: jest.fn().mockResolvedValue('OK'),
|
|
38
|
+
on: jest.fn(),
|
|
39
|
+
disconnect: jest.fn().mockImplementation(() => {
|
|
40
|
+
// Przerwij wszystkie pending blocking operations — symuluje zamknięcie socketa
|
|
41
|
+
const disconnectError = new Error('Connection is closed.');
|
|
42
|
+
while (pendingRejects.length > 0) {
|
|
43
|
+
const reject = pendingRejects.shift();
|
|
44
|
+
if (reject)
|
|
45
|
+
reject(disconnectError);
|
|
46
|
+
}
|
|
47
|
+
}),
|
|
48
|
+
pipeline: jest.fn().mockReturnValue({
|
|
49
|
+
xadd: jest.fn().mockReturnThis(),
|
|
50
|
+
xack: jest.fn().mockReturnThis(),
|
|
51
|
+
xtrim: jest.fn().mockReturnThis(),
|
|
52
|
+
lpush: jest.fn().mockReturnThis(),
|
|
53
|
+
expire: jest.fn().mockReturnThis(),
|
|
54
|
+
exec: jest.fn().mockResolvedValue([
|
|
55
|
+
[null, '1700000000000-0'],
|
|
56
|
+
[null, '1700000000001-0'],
|
|
57
|
+
]),
|
|
58
|
+
}),
|
|
59
|
+
};
|
|
60
|
+
});
|
|
61
|
+
return { Redis: mockRedis };
|
|
63
62
|
});
|
|
64
|
-
//
|
|
63
|
+
// Klasa testowa komendy
|
|
65
64
|
class TestCommand extends command_1.default {
|
|
66
65
|
constructor(payload) {
|
|
67
66
|
super(payload);
|
|
68
67
|
}
|
|
69
68
|
}
|
|
70
|
-
|
|
71
|
-
class AnotherTestCommand extends command_1.default {
|
|
69
|
+
class AnotherCommand extends command_1.default {
|
|
72
70
|
constructor(payload) {
|
|
73
71
|
super(payload);
|
|
74
72
|
}
|
|
75
73
|
}
|
|
76
|
-
// Komenda do testowania RPC
|
|
77
74
|
class CalculateCommand extends command_1.default {
|
|
78
75
|
constructor(payload) {
|
|
79
76
|
super(payload);
|
|
80
77
|
}
|
|
81
78
|
}
|
|
82
|
-
/**
|
|
83
|
-
* Helper: czeka aż worker zostanie zarejestrowany asynchronicznie
|
|
84
|
-
* Potrzebne bo registerWorker() uruchamia benchmark przed utworzeniem workera
|
|
85
|
-
*/
|
|
86
|
-
const waitForWorkerRegistration = () => new Promise((resolve) => setTimeout(resolve, 150));
|
|
87
79
|
describe('CommandBus', () => {
|
|
88
|
-
let
|
|
89
|
-
let config;
|
|
90
|
-
let mockQueue;
|
|
91
|
-
let mockWorker;
|
|
80
|
+
let bus;
|
|
92
81
|
beforeEach(() => {
|
|
93
|
-
// Reset wszystkich mocków
|
|
94
82
|
jest.clearAllMocks();
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
83
|
+
const config = new command_bus_config_1.default({
|
|
84
|
+
concurrency: 1,
|
|
85
|
+
poolSize: 2,
|
|
86
|
+
maxConcurrentRpc: 5,
|
|
99
87
|
});
|
|
100
|
-
|
|
101
|
-
mockQueue = {
|
|
102
|
-
add: jest.fn().mockResolvedValue({ id: 'test-job-id' }),
|
|
103
|
-
close: jest.fn().mockResolvedValue(undefined),
|
|
104
|
-
obliterate: jest.fn().mockResolvedValue(undefined),
|
|
105
|
-
};
|
|
106
|
-
// Mock Worker
|
|
107
|
-
mockWorker = {
|
|
108
|
-
close: jest.fn().mockResolvedValue(undefined),
|
|
109
|
-
on: jest.fn().mockReturnThis(),
|
|
110
|
-
removeAllListeners: jest.fn().mockReturnThis(),
|
|
111
|
-
};
|
|
112
|
-
// Mock konstruktorów
|
|
113
|
-
bullmq_1.Queue.mockImplementation(() => mockQueue);
|
|
114
|
-
bullmq_1.Worker.mockImplementation(() => mockWorker);
|
|
115
|
-
commandBus = new index_1.default(config);
|
|
88
|
+
bus = new index_1.default(config);
|
|
116
89
|
});
|
|
117
90
|
afterEach(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
118
|
-
|
|
119
|
-
jest.clearAllTimers();
|
|
120
|
-
// Dodaj timeout aby uniknąć unhandled rejections podczas close()
|
|
121
|
-
try {
|
|
122
|
-
yield commandBus.close();
|
|
123
|
-
// Zwiększyć grace period z 100ms do 200ms dla pełnego zamknięcia
|
|
124
|
-
yield new Promise((resolve) => setTimeout(resolve, 200));
|
|
125
|
-
}
|
|
126
|
-
catch (error) {
|
|
127
|
-
// Ignoruj błędy związane z zamykaniem podczas testów RPC
|
|
128
|
-
if (!(error instanceof Error) || !error.message.includes('CommandBus is closing')) {
|
|
129
|
-
throw error;
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
// Ostateczne czyszczenie pending operations
|
|
133
|
-
yield new Promise((resolve) => setImmediate(resolve));
|
|
91
|
+
yield bus.close();
|
|
134
92
|
}));
|
|
135
|
-
describe('
|
|
136
|
-
it('
|
|
137
|
-
|
|
138
|
-
const command = new TestCommand({ data: 'test data' });
|
|
139
|
-
// When
|
|
140
|
-
yield commandBus.dispatch(command);
|
|
141
|
-
// Then - sprawdź że Queue został utworzony z Redis connection
|
|
142
|
-
expect(bullmq_1.Queue).toHaveBeenCalledWith('{TestCommand}', expect.objectContaining({
|
|
143
|
-
connection: expect.any(Object),
|
|
144
|
-
}));
|
|
145
|
-
expect(mockQueue.add).toHaveBeenCalledWith('TestCommand', expect.objectContaining({
|
|
146
|
-
__name: 'TestCommand',
|
|
147
|
-
__id: command.__id,
|
|
148
|
-
__time: command.__time,
|
|
149
|
-
__compressed: false, // Mała komenda nie powinna być skompresowana
|
|
150
|
-
__payload: { data: 'test data' },
|
|
151
|
-
}), expect.objectContaining({
|
|
152
|
-
attempts: 1,
|
|
153
|
-
backoff: expect.objectContaining({
|
|
154
|
-
type: 'exponential',
|
|
155
|
-
delay: 2000,
|
|
156
|
-
}),
|
|
157
|
-
}));
|
|
158
|
-
}));
|
|
159
|
-
it('powinno używać tej samej kolejki dla tego samego typu komendy', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
160
|
-
// Given
|
|
161
|
-
const command1 = new TestCommand({ data: 'data 1' });
|
|
162
|
-
const command2 = new TestCommand({ data: 'data 2' });
|
|
163
|
-
// When
|
|
164
|
-
yield commandBus.dispatch(command1);
|
|
165
|
-
yield commandBus.dispatch(command2);
|
|
166
|
-
// Then
|
|
167
|
-
// Obie komendy powinny zostać dodane do tej samej kolejki
|
|
168
|
-
expect(mockQueue.add).toHaveBeenCalledTimes(2);
|
|
169
|
-
expect(mockQueue.add).toHaveBeenNthCalledWith(1, expect.any(String), expect.objectContaining({
|
|
170
|
-
__name: 'TestCommand',
|
|
171
|
-
__payload: { data: 'data 1' },
|
|
172
|
-
}), expect.any(Object));
|
|
173
|
-
expect(mockQueue.add).toHaveBeenNthCalledWith(2, expect.any(String), expect.objectContaining({
|
|
174
|
-
__name: 'TestCommand',
|
|
175
|
-
__payload: { data: 'data 2' },
|
|
176
|
-
}), expect.any(Object));
|
|
177
|
-
}));
|
|
178
|
-
it('powinno tworzyć osobne kolejki dla różnych typów komend', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
179
|
-
// Given
|
|
180
|
-
const testCommand = new TestCommand({ data: 'test' });
|
|
181
|
-
const anotherCommand = new AnotherTestCommand({ value: 42 });
|
|
182
|
-
// When
|
|
183
|
-
yield commandBus.dispatch(testCommand);
|
|
184
|
-
yield commandBus.dispatch(anotherCommand);
|
|
185
|
-
// Then
|
|
186
|
-
// Obie komendy powinny zostać dodane (każda do swojej kolejki)
|
|
187
|
-
expect(mockQueue.add).toHaveBeenCalledTimes(2);
|
|
188
|
-
expect(mockQueue.add).toHaveBeenNthCalledWith(1, expect.any(String), expect.objectContaining({
|
|
189
|
-
__name: 'TestCommand',
|
|
190
|
-
__payload: { data: 'test' },
|
|
191
|
-
}), expect.any(Object));
|
|
192
|
-
expect(mockQueue.add).toHaveBeenNthCalledWith(2, expect.any(String), expect.objectContaining({
|
|
193
|
-
__name: 'AnotherTestCommand',
|
|
194
|
-
__payload: { value: 42 },
|
|
195
|
-
}), expect.any(Object));
|
|
196
|
-
}));
|
|
197
|
-
});
|
|
198
|
-
describe('handle', () => {
|
|
199
|
-
it('powinno utworzyć workera dla komendy', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
200
|
-
// Given
|
|
201
|
-
const handler = jest.fn();
|
|
202
|
-
// When
|
|
203
|
-
commandBus.handle(TestCommand, handler);
|
|
204
|
-
yield waitForWorkerRegistration();
|
|
205
|
-
// Then
|
|
206
|
-
expect(bullmq_1.Worker).toHaveBeenCalledWith('{TestCommand}', expect.any(Function), expect.objectContaining({
|
|
207
|
-
connection: expect.any(Object),
|
|
208
|
-
concurrency: expect.any(Number), // Wartość ustalana przez benchmark
|
|
209
|
-
}));
|
|
210
|
-
}));
|
|
211
|
-
it('powinno przetworzyć komendę przez handler', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
212
|
-
// Given
|
|
213
|
-
const handler = jest.fn().mockResolvedValue(undefined);
|
|
214
|
-
const command = new TestCommand({ data: 'test data' });
|
|
215
|
-
let workerProcessor;
|
|
216
|
-
bullmq_1.Worker.mockImplementation((_name, processor) => {
|
|
217
|
-
workerProcessor = processor;
|
|
218
|
-
return mockWorker;
|
|
219
|
-
});
|
|
220
|
-
// When
|
|
221
|
-
commandBus.handle(TestCommand, handler);
|
|
222
|
-
yield waitForWorkerRegistration();
|
|
223
|
-
// Symulacja przetworzenia zadania
|
|
224
|
-
yield workerProcessor({
|
|
225
|
-
data: command,
|
|
226
|
-
id: 'job-id',
|
|
227
|
-
name: 'TestCommand',
|
|
228
|
-
});
|
|
229
|
-
// Then
|
|
230
|
-
expect(handler).toHaveBeenCalledWith(command);
|
|
231
|
-
}));
|
|
232
|
-
it('powinno zezwalać tylko na jeden handler per komenda', () => {
|
|
233
|
-
// Given
|
|
234
|
-
const handler1 = jest.fn();
|
|
235
|
-
const handler2 = jest.fn();
|
|
236
|
-
// When
|
|
237
|
-
commandBus.handle(TestCommand, handler1);
|
|
238
|
-
// Then - drugi handler powinien rzucić błąd
|
|
239
|
-
expect(() => commandBus.handle(TestCommand, handler2)).toThrow('Handler dla komendy TestCommand już istnieje');
|
|
93
|
+
describe('konstruktor', () => {
|
|
94
|
+
it('powinien utworzyć CommandBus z konfiguracją', () => {
|
|
95
|
+
expect(bus).toBeDefined();
|
|
240
96
|
});
|
|
241
|
-
it('
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
workerProcessor = processor;
|
|
248
|
-
return mockWorker;
|
|
97
|
+
it('powinien używać Logger wrapper z CommandBusConfig', () => {
|
|
98
|
+
const testConfig = new command_bus_config_1.default({
|
|
99
|
+
logLevel: 'error',
|
|
100
|
+
concurrency: 1,
|
|
101
|
+
poolSize: 2,
|
|
102
|
+
maxConcurrentRpc: 5,
|
|
249
103
|
});
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
const commandHandlers = commandBus.commandHandlers;
|
|
255
|
-
delete commandHandlers['TestCommand'];
|
|
256
|
-
// When & Then
|
|
257
|
-
yield expect(workerProcessor({
|
|
258
|
-
data: command,
|
|
259
|
-
id: 'job-id',
|
|
260
|
-
name: 'TestCommand',
|
|
261
|
-
})).rejects.toThrow('Brak handlera dla komendy TestCommand');
|
|
262
|
-
}));
|
|
104
|
+
const testBus = new index_1.default(testConfig);
|
|
105
|
+
expect(testBus['logger']).toBe(testConfig.logger);
|
|
106
|
+
void testBus.close();
|
|
107
|
+
});
|
|
263
108
|
});
|
|
264
|
-
describe('
|
|
265
|
-
it('
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
expect(
|
|
109
|
+
describe('dispatch()', () => {
|
|
110
|
+
it('powinien wysłać komendę do strumienia (T3: z assertions)', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
111
|
+
const cmd = new TestCommand({ name: 'Jan Kowalski' });
|
|
112
|
+
yield bus.dispatch(cmd);
|
|
113
|
+
// T3: Sprawdź że transport.enqueue() (XADD) został wywołany
|
|
114
|
+
const { Redis } = require('ioredis');
|
|
115
|
+
const allInstances = Redis.mock.results
|
|
116
|
+
.filter((r) => r.type === 'return')
|
|
117
|
+
.map((r) => r.value);
|
|
118
|
+
const xaddCalls = allInstances.flatMap((inst) => { var _a, _b, _c; return (_c = (_b = (_a = inst.xadd) === null || _a === void 0 ? void 0 : _a.mock) === null || _b === void 0 ? void 0 : _b.calls) !== null && _c !== void 0 ? _c : []; });
|
|
119
|
+
expect(xaddCalls.length).toBeGreaterThan(0);
|
|
120
|
+
expect(xaddCalls[0][0]).toBe('cmd:TestCommand');
|
|
276
121
|
}));
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
122
|
+
it('powinien obsłużyć wiele komend sekwencyjnie', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
123
|
+
const cmd1 = new TestCommand({ name: 'Anna Nowak' });
|
|
124
|
+
const cmd2 = new TestCommand({ name: 'Piotr Wiśniewski' });
|
|
125
|
+
yield bus.dispatch(cmd1);
|
|
126
|
+
yield bus.dispatch(cmd2);
|
|
127
|
+
}));
|
|
128
|
+
it('powinien obsłużyć różne typy komend', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
129
|
+
const testCmd = new TestCommand({ name: 'Test' });
|
|
130
|
+
const anotherCmd = new AnotherCommand({ value: 42 });
|
|
131
|
+
yield bus.dispatch(testCmd);
|
|
132
|
+
yield bus.dispatch(anotherCmd);
|
|
285
133
|
}));
|
|
286
134
|
});
|
|
287
|
-
describe('
|
|
288
|
-
it('
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
commandBus.handle(TestCommand, handler);
|
|
299
|
-
yield waitForWorkerRegistration();
|
|
300
|
-
const command = new TestCommand({ data: 'test' });
|
|
301
|
-
expect(workerProcessor).not.toBeNull();
|
|
302
|
-
const processor = workerProcessor;
|
|
303
|
-
yield expect(processor({
|
|
304
|
-
data: command,
|
|
305
|
-
id: 'job-id',
|
|
306
|
-
name: 'TestCommand',
|
|
307
|
-
})).rejects.toThrow('Processing failed');
|
|
308
|
-
// Then
|
|
309
|
-
expect(handler).toHaveBeenCalledWith(command);
|
|
310
|
-
// Cleanup
|
|
311
|
-
consoleSpy.mockRestore();
|
|
135
|
+
describe('dispatchBatch()', () => {
|
|
136
|
+
it('powinien wysłać wiele komend w jednym pipeline', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
137
|
+
const commands = [
|
|
138
|
+
new TestCommand({ name: 'Jan' }),
|
|
139
|
+
new TestCommand({ name: 'Anna' }),
|
|
140
|
+
new TestCommand({ name: 'Piotr' }),
|
|
141
|
+
];
|
|
142
|
+
yield bus.dispatchBatch(commands);
|
|
143
|
+
}));
|
|
144
|
+
it('powinien obsłużyć pustą tablicę', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
145
|
+
yield bus.dispatchBatch([]);
|
|
312
146
|
}));
|
|
313
147
|
});
|
|
314
|
-
describe('
|
|
315
|
-
it('
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
expect(
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
commandBus1.close().catch(() => undefined);
|
|
148
|
+
describe('handle()', () => {
|
|
149
|
+
it('powinien zarejestrować handler dla komendy', () => {
|
|
150
|
+
const handler = jest.fn();
|
|
151
|
+
bus.handle(TestCommand, handler);
|
|
152
|
+
});
|
|
153
|
+
it('powinien rzucić błąd przy duplikacie handlera', () => {
|
|
154
|
+
bus.handle(TestCommand, jest.fn());
|
|
155
|
+
expect(() => bus.handle(TestCommand, jest.fn())).toThrow('Handler dla komendy TestCommand już istnieje');
|
|
156
|
+
});
|
|
157
|
+
it('powinien pozwolić na rejestrację różnych handlerów', () => {
|
|
158
|
+
bus.handle(TestCommand, jest.fn());
|
|
159
|
+
bus.handle(AnotherCommand, jest.fn());
|
|
327
160
|
});
|
|
328
|
-
it('RPC call() powinno dodać __rpcMetadata z unikalną replyQueue per wywołanie', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
329
|
-
// Given
|
|
330
|
-
const handler = jest.fn().mockResolvedValue(42);
|
|
331
|
-
const command = new CalculateCommand({ a: 5, b: 3, operation: 'add' });
|
|
332
|
-
mockQueue.add.mockResolvedValue({
|
|
333
|
-
id: 'test-job-id-123',
|
|
334
|
-
opts: {},
|
|
335
|
-
});
|
|
336
|
-
commandBus.handle(CalculateCommand, handler);
|
|
337
|
-
yield waitForWorkerRegistration();
|
|
338
|
-
// When
|
|
339
|
-
const callPromise = commandBus.call(command, 100);
|
|
340
|
-
// Poczekaj na microtask żeby registerCall() zdążył się wykonać
|
|
341
|
-
yield Promise.resolve();
|
|
342
|
-
// Then - responseChannel zawiera processInstanceId i correlationId dla izolacji między procesami
|
|
343
|
-
expect(mockQueue.add).toHaveBeenCalledWith('CalculateCommand', expect.objectContaining({
|
|
344
|
-
__rpcMetadata: expect.objectContaining({
|
|
345
|
-
correlationId: command.__id,
|
|
346
|
-
// Format: rpc:response:{processInstanceId}:{correlationId}
|
|
347
|
-
responseChannel: expect.stringMatching(new RegExp(`^rpc:response:[0-9a-f-]{36}:${command.__id}$`)),
|
|
348
|
-
timestamp: expect.any(Number),
|
|
349
|
-
}),
|
|
350
|
-
}), expect.any(Object));
|
|
351
|
-
// Cleanup - czekaj na timeout
|
|
352
|
-
callPromise.catch(() => undefined);
|
|
353
|
-
}));
|
|
354
161
|
});
|
|
355
|
-
describe('
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
mockQueue.add.mockResolvedValue({
|
|
359
|
-
id: 'test-job-id-123',
|
|
360
|
-
opts: {},
|
|
361
|
-
});
|
|
162
|
+
describe('call()', () => {
|
|
163
|
+
it('powinien mieć metodę call() zaimplementowaną', () => {
|
|
164
|
+
expect(typeof bus.call).toBe('function');
|
|
362
165
|
});
|
|
363
|
-
it('
|
|
364
|
-
|
|
365
|
-
const
|
|
366
|
-
const command = new CalculateCommand({ a: 5, b: 3, operation: 'add' });
|
|
367
|
-
commandBus.handle(CalculateCommand, handler);
|
|
368
|
-
yield waitForWorkerRegistration();
|
|
369
|
-
// When & Then
|
|
370
|
-
yield expect(commandBus.call(command, 100)) // 100ms timeout
|
|
371
|
-
.rejects.toThrow('RPC timeout for command CalculateCommand');
|
|
372
|
-
}));
|
|
373
|
-
it('powinno mieć metodę call() zaimplementowaną', () => {
|
|
374
|
-
// Given
|
|
375
|
-
const command = new CalculateCommand({ a: 1, b: 2, operation: 'add' });
|
|
376
|
-
// When & Then - metoda call() powinna istnieć
|
|
377
|
-
expect(typeof commandBus.call).toBe('function');
|
|
378
|
-
// Test że metoda zwraca Promise (ale nie czekamy na wynik)
|
|
379
|
-
const result = commandBus.call(command, 100);
|
|
166
|
+
it('powinien zwrócić Promise', () => {
|
|
167
|
+
const cmd = new CalculateCommand({ a: 1, b: 2, operation: 'add' });
|
|
168
|
+
const result = bus.call(cmd, 100);
|
|
380
169
|
expect(result).toBeInstanceOf(Promise);
|
|
381
|
-
//
|
|
382
|
-
result.catch(() => undefined);
|
|
170
|
+
// Cleanup — nie czekamy na timeout, ignorujemy error
|
|
171
|
+
result.catch(() => undefined);
|
|
383
172
|
});
|
|
173
|
+
it('powinien rzucić RPC timeout gdy brak odpowiedzi', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
174
|
+
const cmd = new CalculateCommand({ a: 5, b: 3, operation: 'add' });
|
|
175
|
+
yield expect(bus.call(cmd, 100)).rejects.toThrow('RPC timeout');
|
|
176
|
+
}));
|
|
177
|
+
});
|
|
178
|
+
describe('close()', () => {
|
|
179
|
+
it('powinien zamknąć wszystkie połączenia', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
180
|
+
yield bus.close();
|
|
181
|
+
}));
|
|
182
|
+
it('powinien być idempotentny', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
183
|
+
yield bus.close();
|
|
184
|
+
yield bus.close();
|
|
185
|
+
}));
|
|
384
186
|
});
|
|
385
187
|
describe('logLevel filtering', () => {
|
|
386
|
-
it('
|
|
387
|
-
// Given - spy na prawdziwy console
|
|
188
|
+
it('powinien filtrować logi zgodnie z logLevel=error', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
388
189
|
const logSpy = jest.spyOn(console, 'log');
|
|
389
190
|
const warnSpy = jest.spyOn(console, 'warn');
|
|
390
191
|
const debugSpy = jest.spyOn(console, 'debug');
|
|
391
|
-
// Wyczyść poprzednie wywołania
|
|
392
192
|
logSpy.mockClear();
|
|
393
193
|
warnSpy.mockClear();
|
|
394
194
|
debugSpy.mockClear();
|
|
395
195
|
try {
|
|
396
|
-
// When - utwórz konfigurację z logLevel='error'
|
|
397
196
|
const errorLevelConfig = new command_bus_config_1.default({
|
|
398
|
-
redisUrl: 'redis://localhost:6379',
|
|
399
197
|
concurrency: 1,
|
|
400
198
|
logLevel: 'error',
|
|
199
|
+
poolSize: 2,
|
|
200
|
+
maxConcurrentRpc: 5,
|
|
401
201
|
});
|
|
402
202
|
const busWithErrorLevel = new index_1.default(errorLevelConfig);
|
|
403
|
-
// Then - log(), warn(), debug() NIE powinny być wywołane
|
|
404
203
|
expect(logSpy).not.toHaveBeenCalled();
|
|
405
204
|
expect(warnSpy).not.toHaveBeenCalled();
|
|
406
205
|
expect(debugSpy).not.toHaveBeenCalled();
|
|
407
|
-
// Cleanup
|
|
408
206
|
yield busWithErrorLevel.close();
|
|
409
207
|
}
|
|
410
208
|
finally {
|
|
411
|
-
// Przywróć spy
|
|
412
209
|
logSpy.mockRestore();
|
|
413
210
|
warnSpy.mockRestore();
|
|
414
211
|
debugSpy.mockRestore();
|
|
415
212
|
}
|
|
416
213
|
}));
|
|
417
|
-
it('
|
|
418
|
-
// Given - spy na prawdziwy console.debug (konstruktor używa logger.debug)
|
|
214
|
+
it('powinien logować debug przy logLevel=debug', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
419
215
|
const debugSpy = jest.spyOn(console, 'debug');
|
|
420
|
-
// Wyczyść poprzednie wywołania
|
|
421
216
|
debugSpy.mockClear();
|
|
422
217
|
try {
|
|
423
|
-
// When - utwórz konfigurację z logLevel='debug'
|
|
424
218
|
const debugLevelConfig = new command_bus_config_1.default({
|
|
425
|
-
redisUrl: 'redis://localhost:6379',
|
|
426
219
|
concurrency: 1,
|
|
427
220
|
logLevel: 'debug',
|
|
221
|
+
poolSize: 2,
|
|
222
|
+
maxConcurrentRpc: 5,
|
|
428
223
|
});
|
|
429
224
|
const busWithDebugLevel = new index_1.default(debugLevelConfig);
|
|
430
|
-
// Then - debug() powinno być wywołane (konstruktor loguje debug)
|
|
431
225
|
expect(debugSpy).toHaveBeenCalled();
|
|
432
|
-
// Cleanup
|
|
433
226
|
yield busWithDebugLevel.close();
|
|
434
227
|
}
|
|
435
228
|
finally {
|
|
436
|
-
// Przywróć spy
|
|
437
229
|
debugSpy.mockRestore();
|
|
438
230
|
}
|
|
439
231
|
}));
|
|
440
|
-
it('powinno używać Logger wrapper z BaseConfig', () => {
|
|
441
|
-
// Given - konfiguracja domyślna
|
|
442
|
-
const testConfig = new command_bus_config_1.default({
|
|
443
|
-
redisUrl: 'redis://localhost:6379',
|
|
444
|
-
logLevel: 'error',
|
|
445
|
-
});
|
|
446
|
-
// When - utwórz CommandBus
|
|
447
|
-
const testBus = new index_1.default(testConfig);
|
|
448
|
-
// Then - logger powinien pochodzić z konfiguracji (nie console)
|
|
449
|
-
expect(testBus['logger']).toBe(testConfig.logger);
|
|
450
|
-
// Cleanup - bez await żeby test był szybki
|
|
451
|
-
testBus.close().catch(() => undefined);
|
|
452
|
-
});
|
|
453
232
|
});
|
|
454
233
|
});
|
|
455
234
|
//# sourceMappingURL=command-bus.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-bus.spec.js","sourceRoot":"","sources":["../../src/command-bus/command-bus.spec.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"command-bus.spec.js","sourceRoot":"","sources":["../../src/command-bus/command-bus.spec.ts"],"names":[],"mappings":"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"}
|