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