/**
 * /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);
    });
});
