UNPKG

@daiso-tech/core

Version:

The library offers flexible, framework-agnostic solutions for modern web applications, built on adaptable components that integrate seamlessly with popular frameworks like Next Js.

92 lines 3.67 kB
/* eslint-disable @typescript-eslint/no-unused-vars */ /** * @module RateLimiter */ import {} from "vitest"; import { BACKOFFS, } from "../../../backoff-policies/implementations/_module.js"; import {} from "../../../rate-limiter/contracts/_module.js"; import { LIMITER_POLICIES, } from "../../../rate-limiter/implementations/policies/_module.js"; import {} from "../../../time-span/contracts/_module.js"; import { TimeSpan } from "../../../time-span/implementations/_module.js"; import { delay } from "../../../utilities/_module.js"; /** * @group TestUtilities */ const rateLimiterPolicySettings = { type: LIMITER_POLICIES.SLIDING_WINDOW, margin: TimeSpan.fromMilliseconds(25), window: TimeSpan.fromMilliseconds(100), }; /** * @group TestUtilities */ const backoffPolicySettings = { type: BACKOFFS.CONSTANT, delay: TimeSpan.fromMilliseconds(50), jitter: null, }; /** * IMPORT_PATH: `"@daiso-tech/core/rate-limiter/test-utilities"` * @group TestUtilities * * @example * ```ts * import { beforeEach, describe, expect, test } from "vitest"; * import { DatabaseRateLimiterAdapter } from "@daiso-tech/core/rate-limiter/database-rate-limiter-adapter"; * import { SlidingWindowLimiter } from "@daiso-tech/core/rate-limiter/policies"; * import { slidingWindowLimiterTestSuite } from "@daiso-tech/core/rate-limiter/test-utilities"; * import { constantBackoff } from "@daiso-tech/core/backoff-policies"; * import { MemoryRateLimiterStorageAdapter } from "@daiso-tech/core/rate-limiter/memory-rate-limiter-storage-adapter"; * * describe("sliding-window-limiter class: DatabaseRateLimiterAdapter", () => { * slidingWindowLimiterTestSuite({ * createAdapter: () => { * const adapter = new DatabaseRateLimiterAdapter({ * adapter: new MemoryRateLimiterStorageAdapter(), * backoffPolicy: constantBackoff( * slidingWindowLimiterTestSuite.backoffPolicySettings, * ), * rateLimiterPolicy: new SlidingWindowLimiter( * slidingWindowLimiterTestSuite.rateLimiterPolicySettings, * ), * }); * return adapter; * }, * beforeEach, * describe, * expect, * test, * }); * }); * ``` */ export function slidingWindowLimiterTestSuite(settings) { const { expect, test, createAdapter, describe, beforeEach: beforeEach_, delayBuffer = TimeSpan.fromMilliseconds(10), } = settings; let adapter; const waitTime = TimeSpan.fromTimeSpan(backoffPolicySettings.delay); describe("sliding-window-limiter IRateLimiterAdapter tests:", () => { beforeEach_(async () => { adapter = await createAdapter(); }); const KEY = "a"; async function delayWithBuffer(timeSpan) { await delay(TimeSpan.fromTimeSpan(timeSpan).addTimeSpan(delayBuffer)); } describe("method: getState", () => { test.todo("Write tests!!!"); }); describe("method: updateState / trackFailure / trackSuccess", () => { test.todo("Write tests!!!"); }); describe("method: updateState / trackFailure / isolate / getState", () => { test.todo("Write tests!!!"); }); describe("method: updateState / trackFailure / reset", () => { test.todo("Write tests!!!"); }); }); } slidingWindowLimiterTestSuite.rateLimiterPolicySettings = rateLimiterPolicySettings; slidingWindowLimiterTestSuite.backoffPolicySettings = backoffPolicySettings; //# sourceMappingURL=sliding-window-limiter.test-suite.js.map