65 lines
1.9 KiB
TypeScript
65 lines
1.9 KiB
TypeScript
|
import { describe, expect, it, vi } from "vitest";
|
||
|
|
||
|
import { checkRateLimitAndThrowError } from "./checkRateLimitAndThrowError";
|
||
|
import { rateLimiter } from "./rateLimit";
|
||
|
import type { RatelimitResponse } from "./rateLimit";
|
||
|
|
||
|
vi.mock("./rateLimit", () => {
|
||
|
return {
|
||
|
rateLimiter: vi.fn(),
|
||
|
};
|
||
|
});
|
||
|
|
||
|
describe("checkRateLimitAndThrowError", () => {
|
||
|
it("should throw an error if rate limit is exceeded", async () => {
|
||
|
process.env.UPSTASH_REDIS_REST_URL = "mockUrl";
|
||
|
process.env.UPSTASH_REDIS_REST_TOKEN = "mockToken";
|
||
|
|
||
|
vi.mocked(rateLimiter).mockReturnValue(() => {
|
||
|
return {
|
||
|
limit: 10,
|
||
|
remaining: -1,
|
||
|
reset: Date.now() + 10000,
|
||
|
} as RatelimitResponse;
|
||
|
});
|
||
|
|
||
|
const identifier = "test-identifier";
|
||
|
const rateLimitingType = "core";
|
||
|
|
||
|
await expect(checkRateLimitAndThrowError({ rateLimitingType, identifier })).rejects.toThrow();
|
||
|
});
|
||
|
|
||
|
it("should not throw an error if rate limit is not exceeded", async () => {
|
||
|
process.env.UPSTASH_REDIS_REST_URL = "mockUrl";
|
||
|
process.env.UPSTASH_REDIS_REST_TOKEN = "mockToken";
|
||
|
vi.mocked(rateLimiter).mockReturnValue(() => {
|
||
|
return {
|
||
|
limit: 10,
|
||
|
remaining: 5,
|
||
|
reset: Date.now() + 10000,
|
||
|
} as RatelimitResponse;
|
||
|
});
|
||
|
|
||
|
const identifier = "test-identifier";
|
||
|
const rateLimitingType = "core";
|
||
|
|
||
|
await expect(checkRateLimitAndThrowError({ rateLimitingType, identifier })).resolves.not.toThrow();
|
||
|
});
|
||
|
it("should notthrow even if upstash is not enabled", async () => {
|
||
|
// returned value when upstash env vars are not set
|
||
|
vi.mocked(rateLimiter).mockReturnValue(() => {
|
||
|
return {
|
||
|
success: true,
|
||
|
limit: 10,
|
||
|
remaining: 999,
|
||
|
reset: 0,
|
||
|
} as RatelimitResponse;
|
||
|
});
|
||
|
|
||
|
const identifier = "test-identifier";
|
||
|
const rateLimitingType = "core";
|
||
|
|
||
|
await expect(checkRateLimitAndThrowError({ rateLimitingType, identifier })).resolves.not.toThrow();
|
||
|
});
|
||
|
});
|