53 lines
1.6 KiB
TypeScript
53 lines
1.6 KiB
TypeScript
import { afterEach, describe, expect, test, vi } from "vitest";
|
|
|
|
import { __resetSharedStoreForTests, __setSharedStoreFactoryForTests, getSharedStore } from "./shared-store.server";
|
|
|
|
afterEach(() => {
|
|
__resetSharedStoreForTests();
|
|
});
|
|
|
|
describe("web shared-store singleton", () => {
|
|
test("memoizes the factory result", () => {
|
|
const factory = vi.fn(() => ({
|
|
namespace: "web",
|
|
ttlDefault: undefined,
|
|
adapter: {} as never,
|
|
key: (s: string) => s,
|
|
get: async () => null,
|
|
set: async () => true,
|
|
del: async () => 0,
|
|
incr: async () => 0,
|
|
expire: async () => true,
|
|
mget: async () => [],
|
|
scan: async function* () {},
|
|
publish: async () => 0,
|
|
subscribe: async () => async () => undefined,
|
|
zAdd: async () => 0,
|
|
zRemRangeByScore: async () => 0,
|
|
zCard: async () => 0,
|
|
eval: async () => null,
|
|
close: async () => undefined,
|
|
}));
|
|
__setSharedStoreFactoryForTests(factory);
|
|
|
|
const first = getSharedStore();
|
|
const second = getSharedStore();
|
|
expect(first).toBe(second);
|
|
expect(factory).toHaveBeenCalledTimes(1);
|
|
});
|
|
|
|
test("returns a memory-backed store when REDIS_URL is unset", async () => {
|
|
const originalRedisUrl = process.env.REDIS_URL;
|
|
delete process.env.REDIS_URL;
|
|
__resetSharedStoreForTests();
|
|
try {
|
|
const store = getSharedStore();
|
|
expect(store.namespace).toBe("web");
|
|
await store.set("ping", "pong");
|
|
expect(await store.get("ping")).toBe("pong");
|
|
} finally {
|
|
if (originalRedisUrl !== undefined) process.env.REDIS_URL = originalRedisUrl;
|
|
}
|
|
});
|
|
});
|