/**
 * 섹터 분류·해석 (네이버 업종 코드 기반) — 순수 로직 테스트.
 */
import { resolveSectorQuery, listSectorKeys, SECTOR_GROUPS, NAVER_INDUSTRY_NAMES } from '../src/features/stocks/stockSectors';

describe('resolveSectorQuery', () => {
    test('친화 키 직접 입력', () => {
        expect(resolveSectorQuery('반도체')?.key).toBe('반도체');
        expect(resolveSectorQuery('2차전지')?.key).toBe('2차전지');
        expect(resolveSectorQuery('금융')?.key).toBe('금융');
    });
    test('영문/대체 별칭', () => {
        expect(resolveSectorQuery('semiconductor')?.key).toBe('반도체');
        expect(resolveSectorQuery('battery')?.key).toBe('2차전지');
        expect(resolveSectorQuery('배터리')?.key).toBe('2차전지');
        expect(resolveSectorQuery('bio')?.key).toBe('바이오/제약');
    });
    test('네이버 업종명 직접 입력 → 그 코드를 가진 그룹', () => {
        expect(resolveSectorQuery('제약')?.key).toBe('바이오/제약');
        expect(resolveSectorQuery('은행')?.key).toBe('금융');
        expect(resolveSectorQuery('조선')?.key).toBe('조선/기계');
    });
    test('대소문자 무시', () => {
        expect(resolveSectorQuery('SEMICON')?.key).toBe('반도체');
    });
    test('미지원 입력 → null', () => {
        expect(resolveSectorQuery('zzzqqq')).toBeNull();
        expect(resolveSectorQuery('')).toBeNull();
    });
});

describe('SECTOR_GROUPS 무결성', () => {
    test('모든 그룹이 유효한 네이버 업종 코드를 가진다', () => {
        for (const g of SECTOR_GROUPS) {
            expect(g.codes.length).toBeGreaterThan(0);
            for (const c of g.codes) {
                expect(NAVER_INDUSTRY_NAMES[c]).toBeDefined(); // 코드가 실제 업종명에 존재
            }
        }
    });
    test('핵심 섹터가 올바른 대표 코드를 가진다', () => {
        const semi = SECTOR_GROUPS.find(g => g.key === '반도체')!;
        expect(semi.codes).toContain(278); // 반도체와반도체장비
        const batt = SECTOR_GROUPS.find(g => g.key === '2차전지')!;
        expect(batt.codes).toContain(283); // 전기제품(2차전지)
    });
    test('listSectorKeys 는 모든 그룹 키', () => {
        expect(listSectorKeys()).toEqual(SECTOR_GROUPS.map(g => g.key));
        expect(listSectorKeys().length).toBeGreaterThanOrEqual(15);
    });
});
