import { 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(); }); });