import { createTestDb } from "../../helpers/sqlite.js"; import { createTestServer } from "../../helpers/koa.js"; import { ApiInterface } from "../../../src/db/api/ApiInterface.js"; import { hashPassword } from "../../../src/util/hash.js"; import { runUserTests } from "../../shared/users.js"; import { runAbodeTests } from "../../shared/abodes.js"; import { runResidentTests } from "../../shared/residents.js"; import { runApikeyTests } from "../../shared/apikeys.js"; const AUTH_EMAIL = "api-auth@test.example"; const AUTH_PASSWORD = "api-auth-password"; async function getApiDb() { const { db: sqliteDb, close: closeSqlite } = await createTestDb(); const pw = await hashPassword(AUTH_PASSWORD); await sqliteDb.createUser({ email: AUTH_EMAIL, name: "API Auth User", password: pw, flags: {}, }); const server = await createTestServer(sqliteDb); const authHeader = "Basic " + btoa(`${AUTH_EMAIL}:${AUTH_PASSWORD}`); const api = new ApiInterface(server.url, { headers: { Authorization: authHeader }, }); return { db: api, close: async () => { await server.close(); closeSqlite(); }, }; } async function getReadonlyApiDb() { const { db: sqliteDb, close: closeSqlite } = await createTestDb(); const server = await createTestServer(sqliteDb); const api = new ApiInterface(server.url, { readonly: true }); return { db: api, close: async () => { await server.close(); closeSqlite(); }, }; } runUserTests("api", getApiDb, getReadonlyApiDb); runAbodeTests("api", getApiDb); runResidentTests("api", getApiDb); runApikeyTests("api", getApiDb);