/** * /review 소스 파일 수집 판정(shouldReviewFile) 테스트 — 디렉터리 스킵·확장자 * 필터·생성물 제외의 결정적 동작을 고정한다. */ import { shouldReviewFile, REVIEW_EXTENSIONS, SKIP_DIRS } from '../src/features/datacollect/reviewFiles'; describe('shouldReviewFile', () => { it('소스 확장자는 통과', () => { expect(shouldReviewFile('src/agent.ts')).toBe(true); expect(shouldReviewFile('app/main.py')).toBe(true); expect(shouldReviewFile('pkg/server.go')).toBe(true); expect(shouldReviewFile('ui/App.tsx')).toBe(true); }); it('비소스/문서/바이너리는 제외', () => { expect(shouldReviewFile('README.md')).toBe(false); expect(shouldReviewFile('assets/icon.png')).toBe(false); expect(shouldReviewFile('data.json')).toBe(false); }); it('스킵 디렉터리 하위는 제외', () => { expect(shouldReviewFile('node_modules/foo/index.js')).toBe(false); expect(shouldReviewFile('out/extension.js')).toBe(false); expect(shouldReviewFile('.git/hooks/pre-commit.sample')).toBe(false); expect(shouldReviewFile('src/.astra/cache/x.ts')).toBe(false); // 중간 경로에 스킵 디렉터리 }); it('생성물·노이즈는 제외', () => { expect(shouldReviewFile('dist/bundle.min.js')).toBe(false); // dist + .min.js 둘 다 expect(shouldReviewFile('src/types.d.ts')).toBe(false); expect(shouldReviewFile('src/app.js.map')).toBe(false); expect(shouldReviewFile('package-lock.json')).toBe(false); }); it('레지스트리 상수 정합성', () => { expect(REVIEW_EXTENSIONS.has('.ts')).toBe(true); expect(SKIP_DIRS.has('node_modules')).toBe(true); }); });