Adds a `kind` column to spaces ('project' default, 'docs' for Wiki).
Docs spaces skip projects/tasks fetches and render only the page tree.
Sidebar caret for docs spaces expands to top-level pages (#/page/:id).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
43 lines
1.7 KiB
JavaScript
43 lines
1.7 KiB
JavaScript
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();
|
|
});
|
|
});
|