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',