From 4569f5855b8bed952f76fa13e490af3ea614cc66 Mon Sep 17 00:00:00 2001 From: 7000pctAUTO Date: Sat, 31 Jan 2026 12:26:00 +0000 Subject: [PATCH] Initial upload with CI/CD workflow --- tests/cli.test.ts | 76 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 tests/cli.test.ts diff --git a/tests/cli.test.ts b/tests/cli.test.ts new file mode 100644 index 0000000..8b8a290 --- /dev/null +++ b/tests/cli.test.ts @@ -0,0 +1,76 @@ +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'); + }); +});