@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
JavaScript
;
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