Files
Void-Homelab/tests/repos/space_kind.test.js
root 43bfa23a00 feat(spaces): docs-kind spaces render as pure documentation repos
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>
2026-06-05 23:41:46 +10:00

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