@@ -453,5 +453,159 @@ docs {
453453 } ) ;
454454} ) ;
455455
456+ describe ( '빈 타입 생성 테스트' , ( ) => {
457+ test ( '빈 객체 {}인 경우 Record<string, never> 타입 생성' , ( ) => {
458+ const emptyObjectFixtureDir = join ( FIXTURES_DIR , 'bruno-empty-object' ) ;
459+ mkdirSync ( emptyObjectFixtureDir , { recursive : true } ) ;
460+
461+ // 폴더 구조 생성
462+ const testFolder = join ( emptyObjectFixtureDir , 'test' ) ;
463+ mkdirSync ( testFolder , { recursive : true } ) ;
464+
465+ const emptyObjectFile = join ( testFolder , 'empty-response.bru' ) ;
466+ const emptyObjectContent = `meta {
467+ name: Empty Response Test
468+ type: http
469+ }
470+
471+ get /test/empty
472+
473+ docs {
474+ \`\`\`json
475+ {}
476+ \`\`\`
477+ }
478+ ` ;
479+ require ( 'fs' ) . writeFileSync ( emptyObjectFile , emptyObjectContent ) ;
480+
481+ const outputDir = join ( TEST_OUTPUT_DIR , 'empty-object-output' ) ;
482+ execSync ( `node dist/cli/index.js generate-hooks -i ${ emptyObjectFixtureDir } -o ${ outputDir } ` , {
483+ cwd : join ( __dirname , '..' ) ,
484+ } ) ;
485+
486+ // api.ts 파일 확인 (도메인은 폴더명 'test'가 됨)
487+ const apiFile = join ( outputDir , 'test' , 'api.ts' ) ;
488+ assert . ok ( existsSync ( apiFile ) , 'api.ts 파일이 생성되어야 함' ) ;
489+
490+ const apiContent = readFileSync ( apiFile , 'utf-8' ) ;
491+ assert . ok ( apiContent . includes ( 'Record<string, never>' ) , '빈 객체는 Record<string, never> 타입이어야 함' ) ;
492+ assert . ok ( ! apiContent . includes ( 'export interface' ) , '빈 인터페이스는 생성되지 않아야 함' ) ;
493+
494+ console . log ( '✅ 빈 객체 Record<string, never> 타입 생성 테스트 통과' ) ;
495+ } ) ;
496+
497+ test ( 'parsed.docs가 있지만 JSON 추출 실패 시 void 타입 생성' , ( ) => {
498+ const invalidJsonFixtureDir = join ( FIXTURES_DIR , 'bruno-invalid-json' ) ;
499+ mkdirSync ( invalidJsonFixtureDir , { recursive : true } ) ;
500+
501+ // 폴더 구조 생성
502+ const testFolder = join ( invalidJsonFixtureDir , 'test' ) ;
503+ mkdirSync ( testFolder , { recursive : true } ) ;
504+
505+ const invalidJsonFile = join ( testFolder , 'invalid-json.bru' ) ;
506+ const invalidJsonContent = `meta {
507+ name: Invalid JSON Test
508+ type: http
509+ }
510+
511+ get /test/invalid
512+
513+ docs {
514+ 이것은 유효하지 않은 JSON입니다
515+ { invalid json }
516+ }
517+ ` ;
518+ require ( 'fs' ) . writeFileSync ( invalidJsonFile , invalidJsonContent ) ;
519+
520+ const outputDir = join ( TEST_OUTPUT_DIR , 'invalid-json-output' ) ;
521+ execSync ( `node dist/cli/index.js generate-hooks -i ${ invalidJsonFixtureDir } -o ${ outputDir } ` , {
522+ cwd : join ( __dirname , '..' ) ,
523+ } ) ;
524+
525+ // api.ts 파일 확인 (도메인은 폴더명 'test'가 됨)
526+ const apiFile = join ( outputDir , 'test' , 'api.ts' ) ;
527+ assert . ok ( existsSync ( apiFile ) , 'api.ts 파일이 생성되어야 함' ) ;
528+
529+ const apiContent = readFileSync ( apiFile , 'utf-8' ) ;
530+ assert . ok ( apiContent . includes ( 'void' ) , 'JSON 추출 실패 시 void 타입이 생성되어야 함' ) ;
531+
532+ console . log ( '✅ JSON 추출 실패 시 void 타입 생성 테스트 통과' ) ;
533+ } ) ;
534+
535+ test ( '빈 배열 []인 경우 any[] 타입 생성' , ( ) => {
536+ const emptyArrayFixtureDir = join ( FIXTURES_DIR , 'bruno-empty-array' ) ;
537+ mkdirSync ( emptyArrayFixtureDir , { recursive : true } ) ;
538+
539+ // 폴더 구조 생성
540+ const testFolder = join ( emptyArrayFixtureDir , 'test' ) ;
541+ mkdirSync ( testFolder , { recursive : true } ) ;
542+
543+ const emptyArrayFile = join ( testFolder , 'empty-array.bru' ) ;
544+ const emptyArrayContent = `meta {
545+ name: Empty Array Test
546+ type: http
547+ }
548+
549+ get /test/empty-array
550+
551+ docs {
552+ \`\`\`json
553+ {
554+ "items": []
555+ }
556+ \`\`\`
557+ }
558+ ` ;
559+ require ( 'fs' ) . writeFileSync ( emptyArrayFile , emptyArrayContent ) ;
560+
561+ const outputDir = join ( TEST_OUTPUT_DIR , 'empty-array-output' ) ;
562+ execSync ( `node dist/cli/index.js generate-hooks -i ${ emptyArrayFixtureDir } -o ${ outputDir } ` , {
563+ cwd : join ( __dirname , '..' ) ,
564+ } ) ;
565+
566+ // api.ts 파일 확인 (도메인은 폴더명 'test'가 됨)
567+ const apiFile = join ( outputDir , 'test' , 'api.ts' ) ;
568+ assert . ok ( existsSync ( apiFile ) , 'api.ts 파일이 생성되어야 함' ) ;
569+
570+ const apiContent = readFileSync ( apiFile , 'utf-8' ) ;
571+ assert . ok ( apiContent . includes ( 'any[]' ) , '빈 배열은 any[] 타입이어야 함' ) ;
572+
573+ console . log ( '✅ 빈 배열 any[] 타입 생성 테스트 통과' ) ;
574+ } ) ;
575+
576+ test ( 'parsed.docs가 없는 경우 void 타입 생성' , ( ) => {
577+ const noDocsFixtureDir = join ( FIXTURES_DIR , 'bruno-no-docs' ) ;
578+ mkdirSync ( noDocsFixtureDir , { recursive : true } ) ;
579+
580+ // 폴더 구조 생성
581+ const testFolder = join ( noDocsFixtureDir , 'test' ) ;
582+ mkdirSync ( testFolder , { recursive : true } ) ;
583+
584+ const noDocsFile = join ( testFolder , 'no-docs.bru' ) ;
585+ const noDocsContent = `meta {
586+ name: No Docs Test
587+ type: http
588+ }
589+
590+ get /test/no-docs
591+ ` ;
592+ require ( 'fs' ) . writeFileSync ( noDocsFile , noDocsContent ) ;
593+
594+ const outputDir = join ( TEST_OUTPUT_DIR , 'no-docs-output' ) ;
595+ execSync ( `node dist/cli/index.js generate-hooks -i ${ noDocsFixtureDir } -o ${ outputDir } ` , {
596+ cwd : join ( __dirname , '..' ) ,
597+ } ) ;
598+
599+ // api.ts 파일 확인 (도메인은 폴더명 'test'가 됨)
600+ const apiFile = join ( outputDir , 'test' , 'api.ts' ) ;
601+ assert . ok ( existsSync ( apiFile ) , 'api.ts 파일이 생성되어야 함' ) ;
602+
603+ const apiContent = readFileSync ( apiFile , 'utf-8' ) ;
604+ assert . ok ( apiContent . includes ( 'void' ) , 'docs가 없으면 void 타입이 생성되어야 함' ) ;
605+
606+ console . log ( '✅ docs 없을 때 void 타입 생성 테스트 통과' ) ;
607+ } ) ;
608+ } ) ;
609+
456610console . log ( '\n🎉 모든 테스트 완료!' ) ;
457611
0 commit comments