"""ReferencePhase3Service 단위 테스트 — F24.4.4.

검증 대상:
1. `run()` 시그니처 — ctx 단일 인자
2. orchestrator `__init__`이 `_phase3_svc`로 Phase3Service를 주입
"""
from __future__ import annotations

import inspect
from unittest.mock import MagicMock

from app.services.reference_phase3_service import ReferencePhase3Service
from app.services.reference_pipeline_orchestrator import ReferencePipelineOrchestrator


def test_phase3_run_signature():
    sig = inspect.signature(ReferencePhase3Service.run)
    params = list(sig.parameters.keys())
    assert params == ["self", "ctx"]
    # `from __future__ import annotations`로 문자열 annotation 사용 → "None"
    ann = sig.return_annotation
    assert ann in ("None", type(None), inspect.Signature.empty)


def test_orchestrator_wires_phase3_service(monkeypatch):
    captured = {}

    class _Spy(ReferencePhase3Service):
        def __init__(self, *args, **kwargs):
            captured["kwargs"] = kwargs
            super().__init__(*args, **kwargs)

    monkeypatch.setattr(
        "app.services.reference_pipeline_orchestrator.ReferencePhase3Service",
        _Spy,
    )

    logger = MagicMock()
    orch = ReferencePipelineOrchestrator(
        db=MagicMock(), project_id="p1", actor_id="u1", activity_logger=logger,
    )
    assert isinstance(orch._phase3_svc, _Spy)
    assert isinstance(orch._phase3_svc, ReferencePhase3Service)
    assert captured["kwargs"]["project_id"] == "p1"
    assert captured["kwargs"]["actor_id"] == "u1"
    assert captured["kwargs"]["activity_logger"] is logger
