"""G3.2 judge step extension registration tests.

Verifies `scene_detail_owned_judge` is registered in `_PIPELINE_STEP_EXTENSIONS`
with the canonical `default` key (round 4 MINOR 1 / round 5 M2) and routes via
`_resolve_model` to `gpt-mini` (2026-07-11 Gemini 원복). Also verifies the merged `PIPELINE_STEPS` view
exposes the step.
"""
from __future__ import annotations

from app.modules.llm.llm_client import (
    PIPELINE_STEPS,
    _PIPELINE_STEP_EXTENSIONS,
    _resolve_model,
)


def test_judge_step_in_extensions() -> None:
    assert "scene_detail_owned_judge" in _PIPELINE_STEP_EXTENSIONS


def test_judge_default_model_is_gpt_mini() -> None:
    info = _PIPELINE_STEP_EXTENSIONS["scene_detail_owned_judge"]
    # round 4 MINOR 1 / round 5 M2: 등록 키는 'default' (NOT 'default_model').
    assert "default_model" not in info
    assert info["default"] == "gpt-mini"


def test_judge_category_is_analysis_sub() -> None:
    info = _PIPELINE_STEP_EXTENSIONS["scene_detail_owned_judge"]
    assert info["category"] == "analysis_sub"


def test_judge_label_is_korean() -> None:
    info = _PIPELINE_STEP_EXTENSIONS["scene_detail_owned_judge"]
    # 라벨 필수 (UI/log 표시).
    assert info["label"]
    assert isinstance(info["label"], str)


def test_judge_step_resolves_to_gpt_mini() -> None:
    # _resolve_model 이 unknown step 으로 보지 않고 extension 으로 라우팅.
    assert _resolve_model("scene_detail_owned_judge") == "gpt-mini"


def test_judge_step_in_pipeline_steps_view() -> None:
    # PIPELINE_STEPS 가 manifest + extension 합치는지.
    assert "scene_detail_owned_judge" in PIPELINE_STEPS
    info = PIPELINE_STEPS["scene_detail_owned_judge"]
    assert info["default"] == "gpt-mini"
    assert info["category"] == "analysis_sub"
