feat: harden bootstrap and add tests
This commit is contained in:
@@ -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();
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user