takt/src/__tests__/initialization.test.ts
2026-02-02 17:11:42 +09:00

107 lines
3.2 KiB
TypeScript

/**
* Tests for initialization module
*/
import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
import { mkdirSync, rmSync, existsSync, writeFileSync } from 'node:fs';
import { join } from 'node:path';
import { tmpdir } from 'node:os';
// Mock the home directory to use a temp directory
const testHomeDir = join(tmpdir(), `takt-test-${Date.now()}`);
const testTaktDir = join(testHomeDir, '.takt');
vi.mock('node:os', async () => {
const actual = await vi.importActual('node:os');
return {
...actual,
homedir: () => testHomeDir,
};
});
// Mock the prompt to avoid interactive input
vi.mock('../prompt/index.js', () => ({
selectOptionWithDefault: vi.fn().mockResolvedValue('ja'),
}));
// Import after mocks are set up
const { needsLanguageSetup } = await import('../infra/config/global/initialization.js');
const { getGlobalConfigPath } = await import('../infra/config/paths.js');
const { copyProjectResourcesToDir, getLanguageResourcesDir, getProjectResourcesDir } = await import('../resources/index.js');
describe('initialization', () => {
beforeEach(() => {
// Create test home directory
mkdirSync(testHomeDir, { recursive: true });
});
afterEach(() => {
// Clean up test directory
if (existsSync(testHomeDir)) {
rmSync(testHomeDir, { recursive: true });
}
});
describe('needsLanguageSetup', () => {
it('should return true when config.yaml does not exist', () => {
expect(needsLanguageSetup()).toBe(true);
});
it('should return false when config.yaml exists', () => {
mkdirSync(testTaktDir, { recursive: true });
writeFileSync(getGlobalConfigPath(), 'language: en\n', 'utf-8');
expect(needsLanguageSetup()).toBe(false);
});
});
});
describe('copyProjectResourcesToDir', () => {
const testProjectDir = join(tmpdir(), `takt-project-test-${Date.now()}`);
beforeEach(() => {
mkdirSync(testProjectDir, { recursive: true });
});
afterEach(() => {
if (existsSync(testProjectDir)) {
rmSync(testProjectDir, { recursive: true });
}
});
it('should rename dotgitignore to .gitignore during copy', () => {
const resourcesDir = getProjectResourcesDir();
if (!existsSync(join(resourcesDir, 'dotgitignore'))) {
return; // Skip if resource file doesn't exist
}
copyProjectResourcesToDir(testProjectDir);
expect(existsSync(join(testProjectDir, '.gitignore'))).toBe(true);
expect(existsSync(join(testProjectDir, 'dotgitignore'))).toBe(false);
});
it('should copy tasks/TASK-FORMAT to target directory', () => {
const resourcesDir = getProjectResourcesDir();
if (!existsSync(join(resourcesDir, 'tasks', 'TASK-FORMAT'))) {
return; // Skip if resource file doesn't exist
}
copyProjectResourcesToDir(testProjectDir);
expect(existsSync(join(testProjectDir, 'tasks', 'TASK-FORMAT'))).toBe(true);
});
});
describe('getLanguageResourcesDir', () => {
it('should return correct path for English', () => {
const path = getLanguageResourcesDir('en');
expect(path).toContain('resources/global/en');
});
it('should return correct path for Japanese', () => {
const path = getLanguageResourcesDir('ja');
expect(path).toContain('resources/global/ja');
});
});