49 lines
1.5 KiB
JavaScript
49 lines
1.5 KiB
JavaScript
import { test } from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import { parseBoard, boardToMd, boardFromMarkdown, defaultBoard, isBoard } from '../src/lib/kanban.js';
|
|
|
|
const OBSIDIAN = `## To do
|
|
|
|
- [ ] Write **intro** with [[Plan]]
|
|
second line
|
|
- [ ] Two
|
|
|
|
|
|
## Done
|
|
|
|
**Complete**
|
|
- [x] Old
|
|
|
|
|
|
## Empty
|
|
|
|
|
|
%% kanban:settings
|
|
\`\`\`
|
|
{"kanban-plugin":"basic"}
|
|
\`\`\`
|
|
%%
|
|
`;
|
|
|
|
test('an Obsidian Kanban board survives a round trip', () => {
|
|
const b = parseBoard(OBSIDIAN);
|
|
assert.deepEqual(b.columns.map((c) => [c.title, c.cards.length]), [['To do', 2], ['Done', 1], ['Empty', 0]]);
|
|
assert.equal(b.columns[0].cards[0].text, 'Write **intro** with [[Plan]]\nsecond line');
|
|
assert.equal(b.columns[1].cards[0].done, true);
|
|
assert.deepEqual(b.columns[1].extra, ['**Complete**']);
|
|
assert.match(b.tail, /^%% kanban:settings/);
|
|
assert.equal(boardToMd(b), OBSIDIAN);
|
|
});
|
|
|
|
test('boards are made from pages and from scratch', () => {
|
|
assert.equal(isBoard({ 'kanban-plugin': 'basic' }), true);
|
|
assert.equal(isBoard({}), false);
|
|
assert.equal(boardToMd(defaultBoard()), '## To do\n\n\n## Doing\n\n\n## Done\n');
|
|
const b = boardFromMarkdown('Loose idea\n\n# Week\n\n- [x] done thing\n- bullet\n\n---\n\nPara with [[Link]]\n');
|
|
assert.deepEqual(b.columns.map((c) => [c.title, c.cards.map((k) => k.text + (k.done ? ' ✓' : ''))]), [
|
|
['To do', ['Loose idea']],
|
|
['Week', ['done thing ✓', 'bullet', 'Para with [[Link]]']]
|
|
]);
|
|
assert.equal(boardFromMarkdown('').columns.length, 3);
|
|
});
|