Files
mosaic/packages/quality-rails/tests/scaffolder.test.ts
2026-03-07 02:24:41 +00:00

58 lines
2.0 KiB
TypeScript

import { mkdtemp, readFile, rm, writeFile } from 'node:fs/promises';
import { tmpdir } from 'node:os';
import { join } from 'node:path';
import { describe, expect, it } from 'vitest';
import { scaffoldQualityRails } from '../src/scaffolder.js';
import type { RailsConfig } from '../src/types.js';
async function withTempDir(run: (directory: string) => Promise<void>): Promise<void> {
const directory = await mkdtemp(join(tmpdir(), 'quality-rails-scaffold-'));
try {
await run(directory);
} finally {
await rm(directory, { recursive: true, force: true });
}
}
describe('scaffoldQualityRails', () => {
it('writes expected node quality rails files', async () => {
await withTempDir(async (directory) => {
await writeFile(join(directory, 'package.json'), '{"name":"fixture"}\n', 'utf8');
const previous = process.env.MOSAIC_QUALITY_RAILS_SKIP_INSTALL;
process.env.MOSAIC_QUALITY_RAILS_SKIP_INSTALL = '1';
const config: RailsConfig = {
projectPath: directory,
kind: 'node',
profile: 'strict',
linters: ['eslint', 'biome'],
formatters: ['prettier'],
hooks: true,
};
const result = await scaffoldQualityRails(config);
process.env.MOSAIC_QUALITY_RAILS_SKIP_INSTALL = previous;
await expect(readFile(join(directory, '.eslintrc'), 'utf8')).resolves.toContain('parser');
await expect(readFile(join(directory, 'biome.json'), 'utf8')).resolves.toContain('"formatter"');
await expect(readFile(join(directory, '.githooks', 'pre-commit'), 'utf8')).resolves.toContain('pnpm lint');
await expect(readFile(join(directory, 'PR-CHECKLIST.md'), 'utf8')).resolves.toContain('Code Review Checklist');
expect(result.filesWritten).toEqual(
expect.arrayContaining([
'.eslintrc',
'biome.json',
'.githooks/pre-commit',
'PR-CHECKLIST.md',
]),
);
expect(result.commandsToRun).toContain('git config core.hooksPath .githooks');
expect(result.warnings).toHaveLength(0);
});
});
});