105 lines
3.2 KiB
TypeScript
105 lines
3.2 KiB
TypeScript
/**
|
|
* Unit tests for orderReader: findPreviousOrderContent
|
|
*/
|
|
|
|
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
import { mkdirSync, writeFileSync, rmSync } from 'node:fs';
|
|
import { join } from 'node:path';
|
|
import { findPreviousOrderContent } from '../features/interactive/orderReader.js';
|
|
|
|
const TEST_DIR = join(process.cwd(), 'tmp-test-order-reader');
|
|
|
|
function createRunWithOrder(slug: string, content: string): void {
|
|
const orderDir = join(TEST_DIR, '.takt', 'runs', slug, 'context', 'task');
|
|
mkdirSync(orderDir, { recursive: true });
|
|
writeFileSync(join(orderDir, 'order.md'), content, 'utf-8');
|
|
}
|
|
|
|
function createRunWithoutOrder(slug: string): void {
|
|
const runDir = join(TEST_DIR, '.takt', 'runs', slug);
|
|
mkdirSync(runDir, { recursive: true });
|
|
}
|
|
|
|
beforeEach(() => {
|
|
mkdirSync(TEST_DIR, { recursive: true });
|
|
});
|
|
|
|
afterEach(() => {
|
|
rmSync(TEST_DIR, { recursive: true, force: true });
|
|
});
|
|
|
|
describe('findPreviousOrderContent', () => {
|
|
it('should return order content when slug is specified and order.md exists', () => {
|
|
createRunWithOrder('20260218-run1', '# Task Order\nDo something');
|
|
|
|
const result = findPreviousOrderContent(TEST_DIR, '20260218-run1');
|
|
|
|
expect(result).toBe('# Task Order\nDo something');
|
|
});
|
|
|
|
it('should return null when slug is specified but order.md does not exist', () => {
|
|
createRunWithoutOrder('20260218-run1');
|
|
|
|
const result = findPreviousOrderContent(TEST_DIR, '20260218-run1');
|
|
|
|
expect(result).toBeNull();
|
|
});
|
|
|
|
it('should return null when slug is specified but run directory does not exist', () => {
|
|
mkdirSync(join(TEST_DIR, '.takt', 'runs'), { recursive: true });
|
|
|
|
const result = findPreviousOrderContent(TEST_DIR, 'nonexistent-slug');
|
|
|
|
expect(result).toBeNull();
|
|
});
|
|
|
|
it('should return null for empty order.md content', () => {
|
|
createRunWithOrder('20260218-run1', '');
|
|
|
|
const result = findPreviousOrderContent(TEST_DIR, '20260218-run1');
|
|
|
|
expect(result).toBeNull();
|
|
});
|
|
|
|
it('should return null for whitespace-only order.md content', () => {
|
|
createRunWithOrder('20260218-run1', ' \n ');
|
|
|
|
const result = findPreviousOrderContent(TEST_DIR, '20260218-run1');
|
|
|
|
expect(result).toBeNull();
|
|
});
|
|
|
|
it('should find order from latest run when slug is null', () => {
|
|
createRunWithOrder('20260218-run-a', 'First order');
|
|
createRunWithOrder('20260219-run-b', 'Second order');
|
|
|
|
const result = findPreviousOrderContent(TEST_DIR, null);
|
|
|
|
expect(result).toBe('Second order');
|
|
});
|
|
|
|
it('should skip runs without order.md when searching latest', () => {
|
|
createRunWithOrder('20260218-run-a', 'First order');
|
|
createRunWithoutOrder('20260219-run-b');
|
|
|
|
const result = findPreviousOrderContent(TEST_DIR, null);
|
|
|
|
expect(result).toBe('First order');
|
|
});
|
|
|
|
it('should return null when no runs have order.md', () => {
|
|
createRunWithoutOrder('20260218-run-a');
|
|
createRunWithoutOrder('20260219-run-b');
|
|
|
|
const result = findPreviousOrderContent(TEST_DIR, null);
|
|
|
|
expect(result).toBeNull();
|
|
});
|
|
|
|
it('should return null when .takt/runs directory does not exist', () => {
|
|
const result = findPreviousOrderContent(TEST_DIR, null);
|
|
|
|
expect(result).toBeNull();
|
|
});
|
|
});
|