takt/src/__tests__/taskStatusLabel.test.ts

75 lines
2.4 KiB
TypeScript

import { describe, expect, it } from 'vitest';
import { formatTaskStatusLabel, formatShortDate } from '../features/tasks/list/taskStatusLabel.js';
import type { TaskListItem } from '../infra/task/types.js';
function makeTask(overrides: Partial<TaskListItem>): TaskListItem {
return {
kind: 'pending',
name: 'test-task',
createdAt: '2026-02-11T00:00:00.000Z',
filePath: '/tmp/task.md',
content: 'content',
...overrides,
};
}
describe('formatTaskStatusLabel', () => {
it("should format pending task as '[pending] name'", () => {
const task = makeTask({ kind: 'pending', name: 'implement-test' });
expect(formatTaskStatusLabel(task)).toBe('[pending] implement-test');
});
it("should format failed task as '[failed] name'", () => {
const task = makeTask({ kind: 'failed', name: 'retry-payment' });
expect(formatTaskStatusLabel(task)).toBe('[failed] retry-payment');
});
it('should include branch when present', () => {
const task = makeTask({
kind: 'completed',
name: 'fix-login-bug',
branch: 'takt/284/fix-login-bug',
});
expect(formatTaskStatusLabel(task)).toBe('[completed] fix-login-bug (takt/284/fix-login-bug)');
});
it('should not include branch when absent', () => {
const task = makeTask({ kind: 'running', name: 'my-task' });
expect(formatTaskStatusLabel(task)).toBe('[running] my-task');
});
it('should include issue number when present', () => {
const task = makeTask({
kind: 'pending',
name: 'implement-feature',
issueNumber: 32,
});
expect(formatTaskStatusLabel(task)).toBe('[pending] implement-feature #32');
});
it('should include issue number with branch when both present', () => {
const task = makeTask({
kind: 'completed',
name: 'fix-bug',
issueNumber: 42,
branch: 'takt/42/fix-bug',
});
expect(formatTaskStatusLabel(task)).toBe('[completed] fix-bug #42 (takt/42/fix-bug)');
});
it('should not include issue number when absent', () => {
const task = makeTask({ kind: 'pending', name: 'my-task' });
expect(formatTaskStatusLabel(task)).toBe('[pending] my-task');
});
});
describe('formatShortDate', () => {
it('should format ISO string to MM/DD HH:mm', () => {
expect(formatShortDate('2025-02-18T14:30:00.000Z')).toBe('02/18 14:30');
});
it('should zero-pad single digit values', () => {
expect(formatShortDate('2025-01-05T03:07:00.000Z')).toBe('01/05 03:07');
});
});