Files
la-huasca-ts/tests/db-init-route.test.ts
T

56 lines
1.7 KiB
TypeScript

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();
});
});