75 lines
2.4 KiB
TypeScript
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');
|
|
});
|
|
});
|