import Fastify from 'fastify'; import { CosmosDatastoreProvider, MemoryDatastoreProvider } from '@bytelyst/datastore'; import { setProvider } from './lib/datastore.js'; export function resetMemoryDatastore(): void { const provider = new MemoryDatastoreProvider(); setProvider(provider); } /** * Bind the active datastore to a live Azure Cosmos endpoint. Only used by * `*.cosmos.test.ts` suites running under `vitest.cosmos.config.ts`, which * is gated on COSMOS_ENDPOINT being set (CI: cosmos-emulator service). * * Throws synchronously if the required env vars are missing so individual * tests fail loudly instead of silently falling back to in-memory. */ export function useCosmosDatastore(): void { if (!process.env.COSMOS_ENDPOINT || !process.env.COSMOS_KEY) { throw new Error('useCosmosDatastore() requires COSMOS_ENDPOINT and COSMOS_KEY to be set'); } const provider = new CosmosDatastoreProvider({ endpoint: process.env.COSMOS_ENDPOINT, key: process.env.COSMOS_KEY, database: process.env.COSMOS_DATABASE || 'notelett_test', }); setProvider(provider); } export async function buildTestApp( routePlugin: (app: ReturnType) => Promise, ) { resetMemoryDatastore(); const app = Fastify({ logger: false }); await app.register(routePlugin, { prefix: '/api' }); await app.ready(); return app; } export const TEST_USER_ID = 'test-user-1'; export const TEST_PRODUCT_ID = 'notelett'; export function authHeader() { return { authorization: 'Bearer test-token' }; }