ATProto social network
Something went wrong. Try again.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758import { describe, it, expect, beforeEach } from 'vitest';import { Cache, SESSION_STORE, STATE_STORE } from './cache';import { drizzle } from 'drizzle-orm/better-sqlite3';import Database from 'better-sqlite3';import * as schema from './db/schema';import { migrate } from 'drizzle-orm/better-sqlite3/migrator';import { eq, and } from 'drizzle-orm';
describe('Cache', () => { let db: any; let sessionCache: Cache; let stateCache: Cache;
beforeEach(async () => { const client = new Database(':memory:'); db = drizzle(client, { schema }); // Run migrations migrate(db, { migrationsFolder: 'drizzle' }); sessionCache = new Cache(db, SESSION_STORE); stateCache = new Cache(db, STATE_STORE); });
it('sets and gets values within the same store', async () => { await sessionCache.set('key1', 'value1'); const val = await sessionCache.get('key1'); expect(val).toBe('value1'); });
it('isolates values between different stores', async () => { await sessionCache.set('key1', 'session-val'); await stateCache.set('key1', 'state-val');
expect(await sessionCache.get('key1')).toBe('session-val'); expect(await stateCache.get('key1')).toBe('state-val'); });
it('updates existing values in the same store', async () => { await sessionCache.set('key1', 'old'); await sessionCache.set('key1', 'new'); expect(await sessionCache.get('key1')).toBe('new'); });
it('deletes values only from the correct store (lat-sxs2)', async () => { await sessionCache.set('key1', 'session-val'); await stateCache.set('key1', 'state-val');
await sessionCache.delete('key1');
expect(await sessionCache.get('key1')).toBeNull(); expect(await stateCache.get('key1')).toBe('state-val'); });
it('returns null for non-existent keys', async () => { expect(await sessionCache.get('ghost')).toBeNull(); });});