UNPKG

@node-idempotency/core

Version:

A Race-Condition free Node.js library that ensures idempotency for requests, preventing unintended duplicate operations.

52 lines 2.19 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const src_1 = require("../../src"); const storage_adapter_memory_1 = require("@node-idempotency/storage-adapter-memory"); describe("Idempotency (Integration Test)", () => { let idempotency; beforeEach(() => { const storage = new storage_adapter_memory_1.MemoryStorageAdapter(); idempotency = new src_1.Idempotency(storage); }); it("should cache request and return response on subsequent request with matching idempotency key", async () => { const req = { headers: { [src_1.HttpHeaderKeysEnum.IDEMPOTENCY_KEY]: "1" }, path: "/pay", body: { a: "a" }, method: "POST", }; const res = { body: { success: "true" } }; const idempotencyRes = await idempotency.onRequest(req); expect(idempotencyRes).toBeUndefined(); await idempotency.onResponse(req, res); const cachedResponse = await idempotency.onRequest(req); expect(cachedResponse).toEqual(res); }); it("should skip the request when method specified returns true", async () => { const skipRequest = (request) => { return request.method === "POST"; }; let req = { headers: { [src_1.HttpHeaderKeysEnum.IDEMPOTENCY_KEY]: "2" }, path: "/pay", body: { a: "a" }, method: "POST", options: { skipRequest, }, }; const res = { body: { success: "true" } }; let idempotencyRes = await idempotency.onRequest(req); expect(idempotencyRes).toBeUndefined(); await idempotency.onResponse(req, res); let cachedResponse = await idempotency.onRequest(req); expect(cachedResponse).toBeUndefined(); req = { ...req, method: "GET" }; idempotencyRes = await idempotency.onRequest(req); expect(idempotencyRes).toBeUndefined(); await idempotency.onResponse(req, res); cachedResponse = await idempotency.onRequest(req); expect(cachedResponse).toEqual(res); }); }); //# sourceMappingURL=idempotency.spec.js.map