takt/src/__tests__/utils.test.ts
2026-02-04 11:07:41 +09:00

75 lines
2.0 KiB
TypeScript

/**
* Tests for takt utilities
*/
import { describe, it, expect } from 'vitest';
import { truncate, progressBar } from '../shared/ui/index.js';
import { generateSessionId, createSessionLog } from '../infra/fs/session.js';
describe('truncate', () => {
it('should not truncate short text', () => {
const text = 'short';
expect(truncate(text, 10)).toBe('short');
});
it('should truncate long text with ellipsis', () => {
const text = 'this is a very long text';
expect(truncate(text, 10)).toBe('this is...');
});
it('should handle exact length', () => {
const text = '1234567890';
expect(truncate(text, 10)).toBe('1234567890');
});
});
describe('progressBar', () => {
it('should show 0% for no progress', () => {
const bar = progressBar(0, 100, 10);
expect(bar).toContain('0%');
});
it('should show 100% for complete progress', () => {
const bar = progressBar(100, 100, 10);
expect(bar).toContain('100%');
});
it('should show intermediate progress', () => {
const bar = progressBar(50, 100, 10);
expect(bar).toContain('50%');
});
});
describe('generateSessionId', () => {
it('should generate unique IDs', () => {
const id1 = generateSessionId();
const id2 = generateSessionId();
expect(id1).not.toBe(id2);
});
it('should generate string IDs', () => {
const id = generateSessionId();
expect(typeof id).toBe('string');
expect(id.length).toBeGreaterThan(0);
});
it('should follow the new timestamp format', () => {
const id = generateSessionId();
expect(id).toMatch(/^\d{8}-\d{6}-[a-z0-9]{6}$/);
});
});
describe('createSessionLog', () => {
it('should create a session log with defaults', () => {
const log = createSessionLog('test task', '/project', 'default');
expect(log.task).toBe('test task');
expect(log.projectDir).toBe('/project');
expect(log.pieceName).toBe('default');
expect(log.iterations).toBe(0);
expect(log.status).toBe('running');
expect(log.history).toEqual([]);
expect(log.startTime).toBeDefined();
});
});