From d817ed130e5364fe6b9b9aa82779a68ad630054f Mon Sep 17 00:00:00 2001 From: Mario DeSousa Date: Mon, 13 Oct 2025 11:22:57 -0400 Subject: [PATCH] fix(idempotency): add null check for idempotencyHandler before calling handleMiddyOnError --- .../src/middleware/makeHandlerIdempotent.ts | 2 +- .../tests/unit/makeIdempotent.test.ts | 22 +++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/packages/idempotency/src/middleware/makeHandlerIdempotent.ts b/packages/idempotency/src/middleware/makeHandlerIdempotent.ts index 0d75c65ab0..60c647a6ae 100644 --- a/packages/idempotency/src/middleware/makeHandlerIdempotent.ts +++ b/packages/idempotency/src/middleware/makeHandlerIdempotent.ts @@ -180,7 +180,7 @@ const makeHandlerIdempotent = ( } const idempotencyHandler = getIdempotencyHandlerFromRequestInternal(request); - await idempotencyHandler.handleMiddyOnError(); + await idempotencyHandler?.handleMiddyOnError(); }; return { diff --git a/packages/idempotency/tests/unit/makeIdempotent.test.ts b/packages/idempotency/tests/unit/makeIdempotent.test.ts index 1c8a15e99b..bd4e39238e 100644 --- a/packages/idempotency/tests/unit/makeIdempotent.test.ts +++ b/packages/idempotency/tests/unit/makeIdempotent.test.ts @@ -112,6 +112,28 @@ describe('Function: makeIdempotent', () => { expect(deleteRecordSpy).toHaveBeenCalledWith(event); }); + it('handles an execution that throws an early middleware error (middleware)', async () => { + // Prepare + const handler = middy(fnSuccessfull) + .use({ before: fnError }) + .use(makeHandlerIdempotent(mockIdempotencyOptions)); + const saveInProgressSpy = vi.spyOn( + mockIdempotencyOptions.persistenceStore, + 'saveInProgress' + ); + const deleteRecordSpy = vi.spyOn( + mockIdempotencyOptions.persistenceStore, + 'deleteRecord' + ); + + // Act && Assess + await expect(handler(event, context)).rejects.toThrowError( + 'Something went wrong' + ); + expect(saveInProgressSpy).toHaveBeenCalledTimes(0); + expect(deleteRecordSpy).toHaveBeenCalledTimes(0); + }); + it.each([ { type: 'wrapper',