61 lines
1.9 KiB
TypeScript
61 lines
1.9 KiB
TypeScript
import { describe, expect, test } from "bun:test";
|
|
import { DurableObjectIdempotencyStore } from "@/internal/misc/idempotency/durableObjectIdempotencyStore.js";
|
|
import {
|
|
getRequestIdempotencyStoreResolution,
|
|
resolveRequestIdempotencyStore,
|
|
} from "@/internal/misc/idempotency/resolveRequestIdempotencyStore.js";
|
|
|
|
describe("resolveRequestIdempotencyStore", () => {
|
|
test("uses Durable Object only when the binding exists and the flag is enabled", () => {
|
|
const namespace = {} as DurableObjectNamespace<never>;
|
|
const env = {
|
|
IDEMPOTENCY_DO: namespace,
|
|
USE_DO_IDEMPOTENCY: "true",
|
|
} as unknown as Env;
|
|
|
|
expect(getRequestIdempotencyStoreResolution(env)).toEqual({
|
|
backend: "durable_object",
|
|
durableObjectEnabled: true,
|
|
durableObjectBound: true,
|
|
});
|
|
expect(resolveRequestIdempotencyStore(env)).toBeInstanceOf(
|
|
DurableObjectIdempotencyStore,
|
|
);
|
|
});
|
|
|
|
test("falls back to the default store when the Durable Object flag is missing", async () => {
|
|
const env = {
|
|
IDEMPOTENCY_DO: {} as DurableObjectNamespace<never>,
|
|
} as unknown as Env;
|
|
|
|
expect(getRequestIdempotencyStoreResolution(env)).toEqual({
|
|
backend: "default",
|
|
durableObjectEnabled: false,
|
|
durableObjectBound: true,
|
|
});
|
|
await expect(
|
|
resolveRequestIdempotencyStore(env).acquire({
|
|
key: "idempotency:test",
|
|
ttlMs: 1000,
|
|
}),
|
|
).resolves.toBe("unavailable");
|
|
});
|
|
|
|
test("falls back to the default store when the binding is missing", async () => {
|
|
const env = {
|
|
USE_DO_IDEMPOTENCY: "true",
|
|
} as unknown as Env;
|
|
|
|
const resolution = getRequestIdempotencyStoreResolution(env);
|
|
expect(resolution.backend).toBe("default");
|
|
expect(resolution.durableObjectEnabled).toBe(true);
|
|
expect(Boolean(resolution.durableObjectBound)).toBe(false);
|
|
await expect(
|
|
resolveRequestIdempotencyStore(env).acquire({
|
|
key: "idempotency:test",
|
|
ttlMs: 1000,
|
|
}),
|
|
).resolves.toBe("unavailable");
|
|
});
|
|
});
|