mirror of
https://github.com/tiennm99/vngeoguessr.git
synced 2026-10-11 03:13:56 +00:00
Scoring, the Upstash key adapter, sessions and the leaderboards had no coverage, and they carry the anti-cheat model: server-held coordinates, session TTLs, rank arithmetic. One suite runs against two backing stores. By default @upstash/redis is mocked with an in-memory fake, so `npm test` needs no service and finishes well under a second. With TEST_REDIS=real the mock steps aside and the same files run against a real Redis behind SRH, the proxy Upstash recommends for local work, since the SDK speaks HTTP REST rather than RESP and a plain Redis container cannot serve it alone. Running both is what keeps the fake honest: a semantic it gets wrong shows up as a green unit run and a red integration run. Two tests skip against real Redis, one asserting a response shape only an older SDK produces and one fast-forwarding half an hour to watch a session expire. The suite was checked by mutation rather than by passing alone. Breaking a score band, the key prefix and the session TTL each failed a test; reversing the global trim window did not, because only the city leaderboard was asserted, so that test now covers both scopes. The compose stack doubles as a local Redis for `npm run dev`, which had no credentials to reach one before. package.json also loses the eight unused runtime dependencies removed in the cleanup that follows; they cannot be split from the same file.
12 lines
483 B
JavaScript
12 lines
483 B
JavaScript
// Shared vi.mock factory for @upstash/redis.
|
|
//
|
|
// Each test file hoists its own vi.mock call, but they all delegate here so the
|
|
// fake-vs-real switch lives in one place. With TEST_REDIS=real the factory hands
|
|
// back the untouched SDK, which then talks to SRH.
|
|
|
|
export async function upstashModule(importOriginal) {
|
|
if (process.env.TEST_REDIS === 'real') return importOriginal();
|
|
const { FakeRedis } = await import('./fake-upstash-redis.js');
|
|
return { Redis: FakeRedis };
|
|
}
|