import { describe, it, expect, beforeEach } from 'vitest'; import { resetDb } from '../helpers/db.js'; import { migrateUp } from '../../lib/db/migrate.js'; import * as spaces from '../../lib/db/repos/spaces.js'; const actor = { kind: 'user', id: null }; beforeEach(async () => { await resetDb(); await migrateUp(); }); describe('spaces kind', () => { it('defaults kind to project', async () => { const s = await spaces.create({ slug: 'myspace', name: 'My Space' }, actor); expect(s.kind).toBe('project'); }); it('update can set kind to docs', async () => { const s = await spaces.create({ slug: 'wiki', name: 'Wiki' }, actor); const updated = await spaces.update(s.id, { kind: 'docs' }, actor); expect(updated.kind).toBe('docs'); }); it('reads back kind after update', async () => { const s = await spaces.create({ slug: 'docs-space', name: 'Docs' }, actor); await spaces.update(s.id, { kind: 'docs' }, actor); const fetched = await spaces.getById(s.id); expect(fetched.kind).toBe('docs'); }); it('migration sets wiki slug to docs kind', async () => { // Create a space with slug 'wiki' before migration to test seed behaviour // (migration UPDATE runs after ALTER; here we create after migration so just verify constraint works) const s = await spaces.create({ slug: 'wiki-2', name: 'Wiki 2' }, actor); expect(s.kind).toBe('project'); // default const updated = await spaces.update(s.id, { kind: 'docs' }, actor); expect(updated.kind).toBe('docs'); }); it('rejects invalid kind values', async () => { const s = await spaces.create({ slug: 'test', name: 'Test' }, actor); await expect(spaces.update(s.id, { kind: 'invalid' }, actor)).rejects.toThrow(); }); });