Files
type-from-json/tests/cli.test.ts
7000pctAUTO 4569f5855b
Some checks failed
CI / test (push) Has been cancelled
Initial upload with CI/CD workflow
2026-01-31 12:26:00 +00:00

77 lines
2.6 KiB
TypeScript

import * as path from 'path';
import * as fs from 'fs';
import * as os from 'os';
describe('CLI Integration', () => {
const tempDir = path.join(os.tmpdir(), 'type-from-json-cli-test');
beforeAll(() => {
fs.mkdirSync(tempDir, { recursive: true });
});
afterAll(() => {
fs.rmSync(tempDir, { recursive: true, force: true });
});
it('should process a JSON file and generate declaration', async () => {
const jsonPath = path.join(tempDir, 'cli-test.json');
const dtsPath = path.join(tempDir, 'cli-test.d.ts');
fs.writeFileSync(jsonPath, JSON.stringify({
id: 1,
name: 'Test User',
active: true
}));
const { readJsonFile, writeDeclarationFile } = await import('../src/file-watcher.js');
const { TypeInferrer } = await import('../src/type-inferrer.js');
const { DeclarationGenerator } = await import('../src/declaration-generator.js');
const data = await readJsonFile(jsonPath);
const inferrer = new TypeInferrer({ rootName: 'CliTest' });
const result = inferrer.infer(data);
const generator = new DeclarationGenerator();
const declaration = generator.generate(result.types);
await writeDeclarationFile(dtsPath, declaration);
expect(fs.existsSync(dtsPath)).toBe(true);
const content = fs.readFileSync(dtsPath, 'utf-8');
expect(content).toContain('export interface CliTest');
expect(content).toContain('id: number');
expect(content).toContain('name: string');
expect(content).toContain('active: boolean');
});
it('should handle multiple JSON samples', async () => {
const jsonPath = path.join(tempDir, 'multi-sample.json');
const dtsPath = path.join(tempDir, 'multi-sample.d.ts');
fs.writeFileSync(jsonPath, JSON.stringify([
{ id: 1, status: 'active' },
{ id: 2, status: 'pending' }
]));
const { readJsonFile, writeDeclarationFile } = await import('../src/file-watcher.js');
const { extractJsonSamplesFromFile } = await import('../src/file-watcher.js');
const { TypeInferrer } = await import('../src/type-inferrer.js');
const { DeclarationGenerator } = await import('../src/declaration-generator.js');
const samples = extractJsonSamplesFromFile(jsonPath);
const inferrer = new TypeInferrer({ rootName: 'MultiSample' });
const result = inferrer.inferFromMultiple(samples);
const generator = new DeclarationGenerator();
const declaration = generator.generate(result.types);
await writeDeclarationFile(dtsPath, declaration);
expect(fs.existsSync(dtsPath)).toBe(true);
const content = fs.readFileSync(dtsPath, 'utf-8');
expect(content).toContain('export interface MultiSample');
});
});