@dismissible/nestjs-core 2.0.2 → 2.0.3
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 +12 -0
- package/package.json +7 -7
- package/src/api/use-cases/batch-get-or-create/batch-get-or-create.controller.d.ts +16 -0
- package/src/api/use-cases/batch-get-or-create/batch-get-or-create.controller.js +80 -0
- package/src/api/use-cases/batch-get-or-create/batch-get-or-create.controller.js.map +1 -0
- package/src/api/use-cases/batch-get-or-create/batch-get-or-create.controller.spec.d.ts +1 -0
- package/src/api/use-cases/batch-get-or-create/batch-get-or-create.controller.spec.js +52 -0
- package/src/api/use-cases/batch-get-or-create/batch-get-or-create.controller.spec.js.map +1 -0
- package/src/api/use-cases/batch-get-or-create/batch-get-or-create.request.dto.d.ts +10 -0
- package/src/api/use-cases/batch-get-or-create/batch-get-or-create.request.dto.js +47 -0
- package/src/api/use-cases/batch-get-or-create/batch-get-or-create.request.dto.js.map +1 -0
- package/src/api/use-cases/batch-get-or-create/batch-get-or-create.response.dto.d.ts +7 -0
- package/src/api/use-cases/batch-get-or-create/batch-get-or-create.response.dto.js +20 -0
- package/src/api/use-cases/batch-get-or-create/batch-get-or-create.response.dto.js.map +1 -0
- package/src/api/use-cases/batch-get-or-create/index.d.ts +3 -0
- package/src/api/use-cases/batch-get-or-create/index.js +7 -0
- package/src/api/use-cases/batch-get-or-create/index.js.map +1 -0
- package/src/api/use-cases/index.d.ts +1 -0
- package/src/api/use-cases/index.js +1 -0
- package/src/api/use-cases/index.js.map +1 -1
- package/src/core/dismissible-core.service.d.ts +21 -1
- package/src/core/dismissible-core.service.interface.d.ts +21 -1
- package/src/core/dismissible-core.service.interface.js.map +1 -1
- package/src/core/dismissible-core.service.js +101 -0
- package/src/core/dismissible-core.service.js.map +1 -1
- package/src/core/dismissible-core.service.spec.js +164 -0
- package/src/core/dismissible-core.service.spec.js.map +1 -1
- package/src/core/dismissible.service.d.ts +8 -1
- package/src/core/dismissible.service.interface.d.ts +8 -1
- package/src/core/dismissible.service.interface.js.map +1 -1
- package/src/core/dismissible.service.js +76 -0
- package/src/core/dismissible.service.js.map +1 -1
- package/src/core/hook-runner.interface.d.ts +28 -1
- package/src/core/hook-runner.service.d.ts +53 -1
- package/src/core/hook-runner.service.js +168 -0
- package/src/core/hook-runner.service.js.map +1 -1
- package/src/core/hook-runner.service.spec.js +353 -0
- package/src/core/hook-runner.service.spec.js.map +1 -1
- package/src/core/service-responses.interface.d.ts +11 -0
- package/src/dismissible.module.integration.spec.js +212 -4
- package/src/dismissible.module.integration.spec.js.map +1 -1
- package/src/dismissible.module.js +7 -1
- package/src/dismissible.module.js.map +1 -1
|
@@ -214,6 +214,174 @@ let HookRunner = class HookRunner {
|
|
|
214
214
|
throw new common_1.ForbiddenException(result.reason ?? 'Operation blocked by lifecycle hook');
|
|
215
215
|
}
|
|
216
216
|
}
|
|
217
|
+
// ============================================================
|
|
218
|
+
// Batch Hook Methods
|
|
219
|
+
// ============================================================
|
|
220
|
+
/**
|
|
221
|
+
* Run pre-batch-request hooks (global - runs at start of any batch operation).
|
|
222
|
+
*/
|
|
223
|
+
async runPreBatchRequest(itemIds, userId, context) {
|
|
224
|
+
return this.runBatchPreHooks('onBeforeBatchRequest', itemIds, userId, context);
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Run post-batch-request hooks (global - runs at end of any batch operation).
|
|
228
|
+
*/
|
|
229
|
+
async runPostBatchRequest(items, userId, context) {
|
|
230
|
+
await this.runBatchPostHooks('onAfterBatchRequest', items, userId, context);
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Run pre-batch-get hooks (when items exist and are about to be returned).
|
|
234
|
+
*/
|
|
235
|
+
async runPreBatchGet(itemIds, items, userId, context) {
|
|
236
|
+
return this.runBatchPreHooksWithItems('onBeforeBatchGet', itemIds, items, userId, context);
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Run post-batch-get hooks (after items are returned).
|
|
240
|
+
*/
|
|
241
|
+
async runPostBatchGet(items, userId, context) {
|
|
242
|
+
await this.runBatchPostHooks('onAfterBatchGet', items, userId, context);
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Run pre-batch-create hooks.
|
|
246
|
+
*/
|
|
247
|
+
async runPreBatchCreate(itemIds, userId, context) {
|
|
248
|
+
return this.runBatchPreHooks('onBeforeBatchCreate', itemIds, userId, context);
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Run post-batch-create hooks.
|
|
252
|
+
*/
|
|
253
|
+
async runPostBatchCreate(items, userId, context) {
|
|
254
|
+
await this.runBatchPostHooks('onAfterBatchCreate', items, userId, context);
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Internal method to run batch pre-hooks.
|
|
258
|
+
*/
|
|
259
|
+
async runBatchPreHooks(hookName, itemIds, userId, context) {
|
|
260
|
+
let currentItemIds = [...itemIds];
|
|
261
|
+
let currentUserId = userId;
|
|
262
|
+
let currentContext = context ? { ...context } : undefined;
|
|
263
|
+
for (const hook of this.sortedHooks) {
|
|
264
|
+
const hookFn = hook[hookName];
|
|
265
|
+
if (hookFn) {
|
|
266
|
+
try {
|
|
267
|
+
const result = await hookFn.call(hook, currentItemIds, currentUserId, currentContext);
|
|
268
|
+
if (!result.proceed) {
|
|
269
|
+
this.logger.debug(`Hook ${hook.constructor.name}.${hookName} blocked batch operation`, {
|
|
270
|
+
itemCount: currentItemIds.length,
|
|
271
|
+
userId: currentUserId,
|
|
272
|
+
reason: result.reason,
|
|
273
|
+
});
|
|
274
|
+
return {
|
|
275
|
+
proceed: false,
|
|
276
|
+
itemIds: currentItemIds,
|
|
277
|
+
userId: currentUserId,
|
|
278
|
+
context: currentContext,
|
|
279
|
+
reason: result.reason,
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
if (result.mutations) {
|
|
283
|
+
if (result.mutations.itemIds !== undefined) {
|
|
284
|
+
currentItemIds = result.mutations.itemIds;
|
|
285
|
+
}
|
|
286
|
+
if (result.mutations.userId !== undefined) {
|
|
287
|
+
currentUserId = result.mutations.userId;
|
|
288
|
+
}
|
|
289
|
+
if (result.mutations.context && currentContext) {
|
|
290
|
+
currentContext = { ...currentContext, ...result.mutations.context };
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
catch (error) {
|
|
295
|
+
this.logger.error(`Error in hook ${hook.constructor.name}.${hookName}`, error instanceof Error ? error : new Error(String(error)), {
|
|
296
|
+
itemCount: currentItemIds.length,
|
|
297
|
+
userId: currentUserId,
|
|
298
|
+
});
|
|
299
|
+
throw error;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
return {
|
|
304
|
+
proceed: true,
|
|
305
|
+
itemIds: currentItemIds,
|
|
306
|
+
userId: currentUserId,
|
|
307
|
+
context: currentContext,
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Internal method to run batch pre-hooks that receive items (e.g., onBeforeBatchGet).
|
|
312
|
+
*/
|
|
313
|
+
async runBatchPreHooksWithItems(hookName, itemIds, items, userId, context) {
|
|
314
|
+
let currentItemIds = [...itemIds];
|
|
315
|
+
let currentUserId = userId;
|
|
316
|
+
let currentContext = context ? { ...context } : undefined;
|
|
317
|
+
for (const hook of this.sortedHooks) {
|
|
318
|
+
const hookFn = hook[hookName];
|
|
319
|
+
if (hookFn) {
|
|
320
|
+
try {
|
|
321
|
+
const result = await hookFn.call(hook, currentItemIds, items, currentUserId, currentContext);
|
|
322
|
+
if (!result.proceed) {
|
|
323
|
+
this.logger.debug(`Hook ${hook.constructor.name}.${hookName} blocked batch operation`, {
|
|
324
|
+
itemCount: currentItemIds.length,
|
|
325
|
+
userId: currentUserId,
|
|
326
|
+
reason: result.reason,
|
|
327
|
+
});
|
|
328
|
+
return {
|
|
329
|
+
proceed: false,
|
|
330
|
+
itemIds: currentItemIds,
|
|
331
|
+
userId: currentUserId,
|
|
332
|
+
context: currentContext,
|
|
333
|
+
reason: result.reason,
|
|
334
|
+
};
|
|
335
|
+
}
|
|
336
|
+
if (result.mutations) {
|
|
337
|
+
if (result.mutations.itemIds !== undefined) {
|
|
338
|
+
currentItemIds = result.mutations.itemIds;
|
|
339
|
+
}
|
|
340
|
+
if (result.mutations.userId !== undefined) {
|
|
341
|
+
currentUserId = result.mutations.userId;
|
|
342
|
+
}
|
|
343
|
+
if (result.mutations.context && currentContext) {
|
|
344
|
+
currentContext = { ...currentContext, ...result.mutations.context };
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
catch (error) {
|
|
349
|
+
this.logger.error(`Error in hook ${hook.constructor.name}.${hookName}`, error instanceof Error ? error : new Error(String(error)), {
|
|
350
|
+
itemCount: currentItemIds.length,
|
|
351
|
+
userId: currentUserId,
|
|
352
|
+
});
|
|
353
|
+
throw error;
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
return {
|
|
358
|
+
proceed: true,
|
|
359
|
+
itemIds: currentItemIds,
|
|
360
|
+
userId: currentUserId,
|
|
361
|
+
context: currentContext,
|
|
362
|
+
};
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* Internal method to run batch post-hooks.
|
|
366
|
+
* Post-hooks run in reverse priority order.
|
|
367
|
+
*/
|
|
368
|
+
async runBatchPostHooks(hookName, items, userId, context) {
|
|
369
|
+
const reversedHooks = [...this.sortedHooks].reverse();
|
|
370
|
+
for (const hook of reversedHooks) {
|
|
371
|
+
const hookFn = hook[hookName];
|
|
372
|
+
if (hookFn) {
|
|
373
|
+
try {
|
|
374
|
+
await hookFn.call(hook, items, userId, context);
|
|
375
|
+
}
|
|
376
|
+
catch (error) {
|
|
377
|
+
this.logger.error(`Error in hook ${hook.constructor.name}.${hookName}`, error instanceof Error ? error : new Error(String(error)), {
|
|
378
|
+
itemCount: items.length,
|
|
379
|
+
userId,
|
|
380
|
+
});
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
}
|
|
217
385
|
};
|
|
218
386
|
exports.HookRunner = HookRunner;
|
|
219
387
|
exports.HookRunner = HookRunner = tslib_1.__decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hook-runner.service.js","sourceRoot":"","sources":["../../../../../libs/core/src/core/hook-runner.service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hook-runner.service.js","sourceRoot":"","sources":["../../../../../libs/core/src/core/hook-runner.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -534,5 +534,358 @@ describe('HookRunner', () => {
|
|
|
534
534
|
expect(allMethodsHook.onAfterRestore).toHaveBeenCalledWith('test-id', item, testUserId, context);
|
|
535
535
|
});
|
|
536
536
|
});
|
|
537
|
+
describe('batch hooks', () => {
|
|
538
|
+
describe('runPreBatchRequest', () => {
|
|
539
|
+
it('should return proceed: true with no hooks', async () => {
|
|
540
|
+
hookRunner = new hook_runner_service_1.HookRunner([], mockLogger);
|
|
541
|
+
const context = (0, factories_1.createTestContext)();
|
|
542
|
+
const result = await hookRunner.runPreBatchRequest(['item-1', 'item-2'], testUserId, context);
|
|
543
|
+
expect(result.proceed).toBe(true);
|
|
544
|
+
expect(result.itemIds).toEqual(['item-1', 'item-2']);
|
|
545
|
+
expect(result.userId).toBe(testUserId);
|
|
546
|
+
expect(result.context).toEqual(context);
|
|
547
|
+
});
|
|
548
|
+
it('should block operation when hook returns proceed: false', async () => {
|
|
549
|
+
const blockingHook = {
|
|
550
|
+
onBeforeBatchRequest: jest.fn(async () => ({
|
|
551
|
+
proceed: false,
|
|
552
|
+
reason: 'Batch rate limit exceeded',
|
|
553
|
+
})),
|
|
554
|
+
};
|
|
555
|
+
hookRunner = new hook_runner_service_1.HookRunner([blockingHook], mockLogger);
|
|
556
|
+
const result = await hookRunner.runPreBatchRequest(['item-1'], testUserId, (0, factories_1.createTestContext)());
|
|
557
|
+
expect(result.proceed).toBe(false);
|
|
558
|
+
expect(result.reason).toBe('Batch rate limit exceeded');
|
|
559
|
+
});
|
|
560
|
+
it('should apply itemIds mutations from hook', async () => {
|
|
561
|
+
const mutatingHook = {
|
|
562
|
+
onBeforeBatchRequest: jest.fn(async () => ({
|
|
563
|
+
proceed: true,
|
|
564
|
+
mutations: {
|
|
565
|
+
itemIds: ['mutated-1', 'mutated-2'],
|
|
566
|
+
},
|
|
567
|
+
})),
|
|
568
|
+
};
|
|
569
|
+
hookRunner = new hook_runner_service_1.HookRunner([mutatingHook], mockLogger);
|
|
570
|
+
const result = await hookRunner.runPreBatchRequest(['original-1'], testUserId, (0, factories_1.createTestContext)());
|
|
571
|
+
expect(result.itemIds).toEqual(['mutated-1', 'mutated-2']);
|
|
572
|
+
});
|
|
573
|
+
it('should apply userId mutations from hook', async () => {
|
|
574
|
+
const mutatingHook = {
|
|
575
|
+
onBeforeBatchRequest: jest.fn(async () => ({
|
|
576
|
+
proceed: true,
|
|
577
|
+
mutations: {
|
|
578
|
+
userId: 'mutated-user',
|
|
579
|
+
},
|
|
580
|
+
})),
|
|
581
|
+
};
|
|
582
|
+
hookRunner = new hook_runner_service_1.HookRunner([mutatingHook], mockLogger);
|
|
583
|
+
const result = await hookRunner.runPreBatchRequest(['item-1'], testUserId, (0, factories_1.createTestContext)());
|
|
584
|
+
expect(result.userId).toBe('mutated-user');
|
|
585
|
+
});
|
|
586
|
+
it('should apply context mutations from hook', async () => {
|
|
587
|
+
const context = (0, factories_1.createTestContext)();
|
|
588
|
+
const mutatingHook = {
|
|
589
|
+
onBeforeBatchRequest: jest.fn(async () => ({
|
|
590
|
+
proceed: true,
|
|
591
|
+
mutations: {
|
|
592
|
+
context: { headers: { 'x-batch': 'true' } },
|
|
593
|
+
},
|
|
594
|
+
})),
|
|
595
|
+
};
|
|
596
|
+
hookRunner = new hook_runner_service_1.HookRunner([mutatingHook], mockLogger);
|
|
597
|
+
const result = await hookRunner.runPreBatchRequest(['item-1'], testUserId, context);
|
|
598
|
+
expect(result.context).toEqual({
|
|
599
|
+
...context,
|
|
600
|
+
headers: { 'x-batch': 'true' },
|
|
601
|
+
});
|
|
602
|
+
});
|
|
603
|
+
it('should ignore context mutation when no context provided', async () => {
|
|
604
|
+
const mutatingHook = {
|
|
605
|
+
onBeforeBatchRequest: jest.fn(async () => ({
|
|
606
|
+
proceed: true,
|
|
607
|
+
mutations: {
|
|
608
|
+
context: { headers: { 'x-batch': 'true' } },
|
|
609
|
+
},
|
|
610
|
+
})),
|
|
611
|
+
};
|
|
612
|
+
hookRunner = new hook_runner_service_1.HookRunner([mutatingHook], mockLogger);
|
|
613
|
+
const result = await hookRunner.runPreBatchRequest(['item-1'], testUserId, undefined);
|
|
614
|
+
expect(result.context).toBeUndefined();
|
|
615
|
+
});
|
|
616
|
+
it('should throw error from batch pre-hook', async () => {
|
|
617
|
+
const errorHook = {
|
|
618
|
+
onBeforeBatchRequest: jest.fn(async () => {
|
|
619
|
+
throw new Error('Batch hook error');
|
|
620
|
+
}),
|
|
621
|
+
};
|
|
622
|
+
hookRunner = new hook_runner_service_1.HookRunner([errorHook], mockLogger);
|
|
623
|
+
await expect(hookRunner.runPreBatchRequest(['item-1'], testUserId, (0, factories_1.createTestContext)())).rejects.toThrow('Batch hook error');
|
|
624
|
+
expect(mockLogger.error).toHaveBeenCalled();
|
|
625
|
+
});
|
|
626
|
+
it('should throw non-Error from batch pre-hook', async () => {
|
|
627
|
+
const errorHook = {
|
|
628
|
+
onBeforeBatchRequest: jest.fn(async () => {
|
|
629
|
+
throw 'string batch error';
|
|
630
|
+
}),
|
|
631
|
+
};
|
|
632
|
+
hookRunner = new hook_runner_service_1.HookRunner([errorHook], mockLogger);
|
|
633
|
+
await expect(hookRunner.runPreBatchRequest(['item-1'], testUserId, (0, factories_1.createTestContext)())).rejects.toBe('string batch error');
|
|
634
|
+
expect(mockLogger.error).toHaveBeenCalled();
|
|
635
|
+
});
|
|
636
|
+
it('should pass mutations through multiple hooks', async () => {
|
|
637
|
+
const hook1 = {
|
|
638
|
+
priority: 1,
|
|
639
|
+
onBeforeBatchRequest: jest.fn(async (itemIds) => ({
|
|
640
|
+
proceed: true,
|
|
641
|
+
mutations: { itemIds: [...itemIds, 'added-by-hook1'] },
|
|
642
|
+
})),
|
|
643
|
+
};
|
|
644
|
+
const hook2 = {
|
|
645
|
+
priority: 2,
|
|
646
|
+
onBeforeBatchRequest: jest.fn(async (itemIds) => ({
|
|
647
|
+
proceed: true,
|
|
648
|
+
mutations: { itemIds: [...itemIds, 'added-by-hook2'] },
|
|
649
|
+
})),
|
|
650
|
+
};
|
|
651
|
+
hookRunner = new hook_runner_service_1.HookRunner([hook1, hook2], mockLogger);
|
|
652
|
+
const result = await hookRunner.runPreBatchRequest(['original'], testUserId, (0, factories_1.createTestContext)());
|
|
653
|
+
expect(result.itemIds).toEqual(['original', 'added-by-hook1', 'added-by-hook2']);
|
|
654
|
+
});
|
|
655
|
+
});
|
|
656
|
+
describe('runPostBatchRequest', () => {
|
|
657
|
+
it('should complete without error with no hooks', async () => {
|
|
658
|
+
hookRunner = new hook_runner_service_1.HookRunner([], mockLogger);
|
|
659
|
+
const items = [(0, factories_1.createTestItem)(), (0, factories_1.createTestItem)()];
|
|
660
|
+
await expect(hookRunner.runPostBatchRequest(items, testUserId, (0, factories_1.createTestContext)())).resolves.not.toThrow();
|
|
661
|
+
});
|
|
662
|
+
it('should call hook with correct arguments', async () => {
|
|
663
|
+
const items = [(0, factories_1.createTestItem)({ id: 'item-1' }), (0, factories_1.createTestItem)({ id: 'item-2' })];
|
|
664
|
+
const context = (0, factories_1.createTestContext)();
|
|
665
|
+
const hook = {
|
|
666
|
+
onAfterBatchRequest: jest.fn(),
|
|
667
|
+
};
|
|
668
|
+
hookRunner = new hook_runner_service_1.HookRunner([hook], mockLogger);
|
|
669
|
+
await hookRunner.runPostBatchRequest(items, testUserId, context);
|
|
670
|
+
expect(hook.onAfterBatchRequest).toHaveBeenCalledWith(items, testUserId, context);
|
|
671
|
+
});
|
|
672
|
+
it('should log but not throw Error from post batch hook', async () => {
|
|
673
|
+
const errorHook = {
|
|
674
|
+
onAfterBatchRequest: jest.fn(async () => {
|
|
675
|
+
throw new Error('Post batch error');
|
|
676
|
+
}),
|
|
677
|
+
};
|
|
678
|
+
hookRunner = new hook_runner_service_1.HookRunner([errorHook], mockLogger);
|
|
679
|
+
await expect(hookRunner.runPostBatchRequest([(0, factories_1.createTestItem)()], testUserId, (0, factories_1.createTestContext)())).resolves.not.toThrow();
|
|
680
|
+
expect(mockLogger.error).toHaveBeenCalled();
|
|
681
|
+
});
|
|
682
|
+
it('should log but not throw non-Error from post batch hook', async () => {
|
|
683
|
+
const errorHook = {
|
|
684
|
+
onAfterBatchRequest: jest.fn(async () => {
|
|
685
|
+
throw 'string post batch error';
|
|
686
|
+
}),
|
|
687
|
+
};
|
|
688
|
+
hookRunner = new hook_runner_service_1.HookRunner([errorHook], mockLogger);
|
|
689
|
+
await expect(hookRunner.runPostBatchRequest([(0, factories_1.createTestItem)()], testUserId, (0, factories_1.createTestContext)())).resolves.not.toThrow();
|
|
690
|
+
expect(mockLogger.error).toHaveBeenCalled();
|
|
691
|
+
});
|
|
692
|
+
it('should execute hooks in reverse priority order', async () => {
|
|
693
|
+
const executionOrder = [];
|
|
694
|
+
const hook1 = {
|
|
695
|
+
priority: 10,
|
|
696
|
+
onAfterBatchRequest: jest.fn(async () => {
|
|
697
|
+
executionOrder.push(10);
|
|
698
|
+
}),
|
|
699
|
+
};
|
|
700
|
+
const hook2 = {
|
|
701
|
+
priority: 5,
|
|
702
|
+
onAfterBatchRequest: jest.fn(async () => {
|
|
703
|
+
executionOrder.push(5);
|
|
704
|
+
}),
|
|
705
|
+
};
|
|
706
|
+
hookRunner = new hook_runner_service_1.HookRunner([hook1, hook2], mockLogger);
|
|
707
|
+
await hookRunner.runPostBatchRequest([(0, factories_1.createTestItem)()], testUserId, (0, factories_1.createTestContext)());
|
|
708
|
+
expect(executionOrder).toEqual([10, 5]);
|
|
709
|
+
});
|
|
710
|
+
});
|
|
711
|
+
describe('runPreBatchGet', () => {
|
|
712
|
+
it('should pass items to hook', async () => {
|
|
713
|
+
const items = [(0, factories_1.createTestItem)({ id: 'item-1' }), (0, factories_1.createTestItem)({ id: 'item-2' })];
|
|
714
|
+
const context = (0, factories_1.createTestContext)();
|
|
715
|
+
const hook = {
|
|
716
|
+
onBeforeBatchGet: jest.fn(async () => ({ proceed: true })),
|
|
717
|
+
};
|
|
718
|
+
hookRunner = new hook_runner_service_1.HookRunner([hook], mockLogger);
|
|
719
|
+
await hookRunner.runPreBatchGet(['item-1', 'item-2'], items, testUserId, context);
|
|
720
|
+
expect(hook.onBeforeBatchGet).toHaveBeenCalledWith(['item-1', 'item-2'], items, testUserId, context);
|
|
721
|
+
});
|
|
722
|
+
it('should block operation when hook returns proceed: false', async () => {
|
|
723
|
+
const items = [(0, factories_1.createTestItem)()];
|
|
724
|
+
const blockingHook = {
|
|
725
|
+
onBeforeBatchGet: jest.fn(async () => ({
|
|
726
|
+
proceed: false,
|
|
727
|
+
reason: 'Access denied to batch',
|
|
728
|
+
})),
|
|
729
|
+
};
|
|
730
|
+
hookRunner = new hook_runner_service_1.HookRunner([blockingHook], mockLogger);
|
|
731
|
+
const result = await hookRunner.runPreBatchGet(['item-1'], items, testUserId, (0, factories_1.createTestContext)());
|
|
732
|
+
expect(result.proceed).toBe(false);
|
|
733
|
+
expect(result.reason).toBe('Access denied to batch');
|
|
734
|
+
});
|
|
735
|
+
it('should apply mutations from onBeforeBatchGet hook', async () => {
|
|
736
|
+
const items = [(0, factories_1.createTestItem)()];
|
|
737
|
+
const context = (0, factories_1.createTestContext)();
|
|
738
|
+
const mutatingHook = {
|
|
739
|
+
onBeforeBatchGet: jest.fn(async () => ({
|
|
740
|
+
proceed: true,
|
|
741
|
+
mutations: {
|
|
742
|
+
itemIds: ['mutated-item'],
|
|
743
|
+
userId: 'mutated-user',
|
|
744
|
+
context: { headers: { 'x-custom': 'value' } },
|
|
745
|
+
},
|
|
746
|
+
})),
|
|
747
|
+
};
|
|
748
|
+
hookRunner = new hook_runner_service_1.HookRunner([mutatingHook], mockLogger);
|
|
749
|
+
const result = await hookRunner.runPreBatchGet(['original'], items, testUserId, context);
|
|
750
|
+
expect(result.itemIds).toEqual(['mutated-item']);
|
|
751
|
+
expect(result.userId).toBe('mutated-user');
|
|
752
|
+
expect(result.context).toEqual({
|
|
753
|
+
...context,
|
|
754
|
+
headers: { 'x-custom': 'value' },
|
|
755
|
+
});
|
|
756
|
+
});
|
|
757
|
+
it('should throw error from onBeforeBatchGet hook', async () => {
|
|
758
|
+
const items = [(0, factories_1.createTestItem)()];
|
|
759
|
+
const errorHook = {
|
|
760
|
+
onBeforeBatchGet: jest.fn(async () => {
|
|
761
|
+
throw new Error('Batch get hook error');
|
|
762
|
+
}),
|
|
763
|
+
};
|
|
764
|
+
hookRunner = new hook_runner_service_1.HookRunner([errorHook], mockLogger);
|
|
765
|
+
await expect(hookRunner.runPreBatchGet(['item-1'], items, testUserId, (0, factories_1.createTestContext)())).rejects.toThrow('Batch get hook error');
|
|
766
|
+
expect(mockLogger.error).toHaveBeenCalled();
|
|
767
|
+
});
|
|
768
|
+
it('should throw non-Error from onBeforeBatchGet hook', async () => {
|
|
769
|
+
const items = [(0, factories_1.createTestItem)()];
|
|
770
|
+
const errorHook = {
|
|
771
|
+
onBeforeBatchGet: jest.fn(async () => {
|
|
772
|
+
throw 'string batch get error';
|
|
773
|
+
}),
|
|
774
|
+
};
|
|
775
|
+
hookRunner = new hook_runner_service_1.HookRunner([errorHook], mockLogger);
|
|
776
|
+
await expect(hookRunner.runPreBatchGet(['item-1'], items, testUserId, (0, factories_1.createTestContext)())).rejects.toBe('string batch get error');
|
|
777
|
+
expect(mockLogger.error).toHaveBeenCalled();
|
|
778
|
+
});
|
|
779
|
+
it('should ignore context mutation when no context provided', async () => {
|
|
780
|
+
const items = [(0, factories_1.createTestItem)()];
|
|
781
|
+
const mutatingHook = {
|
|
782
|
+
onBeforeBatchGet: jest.fn(async () => ({
|
|
783
|
+
proceed: true,
|
|
784
|
+
mutations: {
|
|
785
|
+
context: { headers: { 'x-custom': 'value' } },
|
|
786
|
+
},
|
|
787
|
+
})),
|
|
788
|
+
};
|
|
789
|
+
hookRunner = new hook_runner_service_1.HookRunner([mutatingHook], mockLogger);
|
|
790
|
+
const result = await hookRunner.runPreBatchGet(['item-1'], items, testUserId, undefined);
|
|
791
|
+
expect(result.context).toBeUndefined();
|
|
792
|
+
});
|
|
793
|
+
});
|
|
794
|
+
describe('runPostBatchGet', () => {
|
|
795
|
+
it('should call hook with correct arguments', async () => {
|
|
796
|
+
const items = [(0, factories_1.createTestItem)({ id: 'item-1' })];
|
|
797
|
+
const context = (0, factories_1.createTestContext)();
|
|
798
|
+
const hook = {
|
|
799
|
+
onAfterBatchGet: jest.fn(),
|
|
800
|
+
};
|
|
801
|
+
hookRunner = new hook_runner_service_1.HookRunner([hook], mockLogger);
|
|
802
|
+
await hookRunner.runPostBatchGet(items, testUserId, context);
|
|
803
|
+
expect(hook.onAfterBatchGet).toHaveBeenCalledWith(items, testUserId, context);
|
|
804
|
+
});
|
|
805
|
+
it('should log but not throw Error from post batch get hook', async () => {
|
|
806
|
+
const errorHook = {
|
|
807
|
+
onAfterBatchGet: jest.fn(async () => {
|
|
808
|
+
throw new Error('Post batch get error');
|
|
809
|
+
}),
|
|
810
|
+
};
|
|
811
|
+
hookRunner = new hook_runner_service_1.HookRunner([errorHook], mockLogger);
|
|
812
|
+
await expect(hookRunner.runPostBatchGet([(0, factories_1.createTestItem)()], testUserId, (0, factories_1.createTestContext)())).resolves.not.toThrow();
|
|
813
|
+
expect(mockLogger.error).toHaveBeenCalled();
|
|
814
|
+
});
|
|
815
|
+
});
|
|
816
|
+
describe('runPreBatchCreate', () => {
|
|
817
|
+
it('should return proceed: true with no hooks', async () => {
|
|
818
|
+
hookRunner = new hook_runner_service_1.HookRunner([], mockLogger);
|
|
819
|
+
const context = (0, factories_1.createTestContext)();
|
|
820
|
+
const result = await hookRunner.runPreBatchCreate(['item-1', 'item-2'], testUserId, context);
|
|
821
|
+
expect(result.proceed).toBe(true);
|
|
822
|
+
expect(result.itemIds).toEqual(['item-1', 'item-2']);
|
|
823
|
+
});
|
|
824
|
+
it('should block operation when hook returns proceed: false', async () => {
|
|
825
|
+
const blockingHook = {
|
|
826
|
+
onBeforeBatchCreate: jest.fn(async () => ({
|
|
827
|
+
proceed: false,
|
|
828
|
+
reason: 'Quota exceeded',
|
|
829
|
+
})),
|
|
830
|
+
};
|
|
831
|
+
hookRunner = new hook_runner_service_1.HookRunner([blockingHook], mockLogger);
|
|
832
|
+
const result = await hookRunner.runPreBatchCreate(['item-1'], testUserId, (0, factories_1.createTestContext)());
|
|
833
|
+
expect(result.proceed).toBe(false);
|
|
834
|
+
expect(result.reason).toBe('Quota exceeded');
|
|
835
|
+
});
|
|
836
|
+
it('should apply mutations from hook', async () => {
|
|
837
|
+
const mutatingHook = {
|
|
838
|
+
onBeforeBatchCreate: jest.fn(async () => ({
|
|
839
|
+
proceed: true,
|
|
840
|
+
mutations: {
|
|
841
|
+
itemIds: ['filtered-item'],
|
|
842
|
+
},
|
|
843
|
+
})),
|
|
844
|
+
};
|
|
845
|
+
hookRunner = new hook_runner_service_1.HookRunner([mutatingHook], mockLogger);
|
|
846
|
+
const result = await hookRunner.runPreBatchCreate(['item-1', 'item-2'], testUserId, (0, factories_1.createTestContext)());
|
|
847
|
+
expect(result.itemIds).toEqual(['filtered-item']);
|
|
848
|
+
});
|
|
849
|
+
});
|
|
850
|
+
describe('runPostBatchCreate', () => {
|
|
851
|
+
it('should call hook with correct arguments', async () => {
|
|
852
|
+
const items = [(0, factories_1.createTestItem)({ id: 'created-1' })];
|
|
853
|
+
const context = (0, factories_1.createTestContext)();
|
|
854
|
+
const hook = {
|
|
855
|
+
onAfterBatchCreate: jest.fn(),
|
|
856
|
+
};
|
|
857
|
+
hookRunner = new hook_runner_service_1.HookRunner([hook], mockLogger);
|
|
858
|
+
await hookRunner.runPostBatchCreate(items, testUserId, context);
|
|
859
|
+
expect(hook.onAfterBatchCreate).toHaveBeenCalledWith(items, testUserId, context);
|
|
860
|
+
});
|
|
861
|
+
it('should log but not throw Error from post batch create hook', async () => {
|
|
862
|
+
const errorHook = {
|
|
863
|
+
onAfterBatchCreate: jest.fn(async () => {
|
|
864
|
+
throw new Error('Post batch create error');
|
|
865
|
+
}),
|
|
866
|
+
};
|
|
867
|
+
hookRunner = new hook_runner_service_1.HookRunner([errorHook], mockLogger);
|
|
868
|
+
await expect(hookRunner.runPostBatchCreate([(0, factories_1.createTestItem)()], testUserId, (0, factories_1.createTestContext)())).resolves.not.toThrow();
|
|
869
|
+
expect(mockLogger.error).toHaveBeenCalled();
|
|
870
|
+
});
|
|
871
|
+
});
|
|
872
|
+
describe('throwIfBlocked with batch results', () => {
|
|
873
|
+
it('should throw ForbiddenException for blocked batch result', () => {
|
|
874
|
+
expect(() => hook_runner_service_1.HookRunner.throwIfBlocked({
|
|
875
|
+
proceed: false,
|
|
876
|
+
itemIds: ['item-1'],
|
|
877
|
+
userId: testUserId,
|
|
878
|
+
reason: 'Batch blocked',
|
|
879
|
+
})).toThrow(common_1.ForbiddenException);
|
|
880
|
+
});
|
|
881
|
+
it('should not throw for allowed batch result', () => {
|
|
882
|
+
expect(() => hook_runner_service_1.HookRunner.throwIfBlocked({
|
|
883
|
+
proceed: true,
|
|
884
|
+
itemIds: ['item-1'],
|
|
885
|
+
userId: testUserId,
|
|
886
|
+
})).not.toThrow();
|
|
887
|
+
});
|
|
888
|
+
});
|
|
889
|
+
});
|
|
537
890
|
});
|
|
538
891
|
//# sourceMappingURL=hook-runner.service.spec.js.map
|