Files
server-serverless-e2e-mqxnlema/packages/functions/tests/tests/support/services.ts
2026-06-28 12:36:05 +02:00

50 lines
1.6 KiB
TypeScript

import { createNodeSqliteKysely } from '@pikku/kysely-node-sqlite'
import { createDbUtils, type StubTracker } from '@pikku/cucumber'
import { createConfig } from '../../../src/config.js'
import { createSingletonServices } from '../../../src/services.js'
import type { DB } from '../../../src/db.js'
import { dirname, resolve } from 'node:path'
import { fileURLToPath } from 'node:url'
const __dirname = dirname(fileURLToPath(import.meta.url))
const repoRoot = (p: string) => resolve(__dirname, '../../..', p)
export const db = createDbUtils({
migrationsDir: repoRoot('../../db/sqlite'),
seedFile: repoRoot('../../db/sqlite-test-seed.sql'),
})
type StubKysely = ReturnType<typeof createNodeSqliteKysely<DB>>
const REAL_SERVICES = (kysely: StubKysely) => ({ kysely })
export async function createStubServices(dbFile: string, tracker: StubTracker) {
const kysely = createNodeSqliteKysely<DB>({
filename: dbFile,
camelCase: true,
})
const real = REAL_SERVICES(kysely)
const injected = new Proxy(real as Record<string, unknown>, {
get(target, prop: string) {
if (prop in target) return target[prop]
return tracker.stub(prop)
},
})
const config = await createConfig()
const base = await createSingletonServices(
{ ...config, dev: { db: { file: dbFile } } } as never,
injected as never,
)
const services = new Proxy(base as Record<string, unknown>, {
get(target, prop: string) {
if (prop in target && target[prop] !== undefined) return target[prop]
return tracker.stub(prop)
},
})
return { services: services as typeof base, kysely }
}