feat: harden bootstrap and add tests

This commit is contained in:
2026-06-28 16:43:03 -05:00
parent 01ea9e391d
commit 991e73fcff
39 changed files with 3399 additions and 459 deletions
+55
View File
@@ -0,0 +1,55 @@
import { beforeEach, describe, expect, it, vi } from 'vitest';
import { POST } from '@/app/api/db/init/route';
const { initSchema, seed, resetDatabase, migrateFromLegacyPlaces } = vi.hoisted(() => ({
initSchema: vi.fn(),
seed: vi.fn(),
resetDatabase: vi.fn(),
migrateFromLegacyPlaces: vi.fn(),
}));
vi.mock('@/lib/schema', () => ({
initSchema,
seed,
resetDatabase,
migrateFromLegacyPlaces,
}));
describe('/api/db/init', () => {
beforeEach(() => {
initSchema.mockReset();
seed.mockReset();
resetDatabase.mockReset();
migrateFromLegacyPlaces.mockReset();
});
it('initializes schema and seed data', async () => {
initSchema.mockResolvedValueOnce(undefined);
migrateFromLegacyPlaces.mockResolvedValueOnce(undefined);
seed.mockResolvedValueOnce(undefined);
const response = await POST(new Request('http://localhost/api/db/init'));
const body = await response.json();
expect(response.status).toBe(200);
expect(body).toEqual({ ok: true });
expect(initSchema).toHaveBeenCalledTimes(1);
expect(migrateFromLegacyPlaces).toHaveBeenCalledTimes(1);
expect(seed).toHaveBeenCalledTimes(1);
expect(resetDatabase).not.toHaveBeenCalled();
});
it('uses the reset path when requested', async () => {
resetDatabase.mockResolvedValueOnce(undefined);
const response = await POST(new Request('http://localhost/api/db/init?reset=true'));
const body = await response.json();
expect(response.status).toBe(200);
expect(body).toEqual({ ok: true, reset: true });
expect(resetDatabase).toHaveBeenCalledTimes(1);
expect(initSchema).not.toHaveBeenCalled();
expect(seed).not.toHaveBeenCalled();
expect(migrateFromLegacyPlaces).not.toHaveBeenCalled();
});
});