"""Known-case test for the rule-based discovery engine."""
from __future__ import annotations

from app.engines.discovery import evaluate_discovery_signal


def test_all_improving_signals_yield_qualified():
    current = {"revenue_growth_yoy": 0.15, "eps_growth_yoy": 0.20, "fcf_growth_yoy": 0.18,
               "roic": 0.22, "operating_margin": 0.28, "net_debt_to_ebitda": 0.5}
    prior = {"revenue_growth_yoy": 0.08, "eps_growth_yoy": 0.10, "fcf_growth_yoy": 0.05,
             "roic": 0.18, "operating_margin": 0.24, "net_debt_to_ebitda": 1.2}
    result = evaluate_discovery_signal(current, prior)
    assert result.positive_signal_count == 6
    assert result.recommended_status == "QUALIFIED"


def test_no_improving_signals_stays_discovered():
    current = {"revenue_growth_yoy": 0.02, "roic": 0.05}
    prior = {"revenue_growth_yoy": 0.08, "roic": 0.10}
    result = evaluate_discovery_signal(current, prior)
    assert result.positive_signal_count == 0
    assert result.recommended_status == "DISCOVERED"


def test_missing_values_excluded_not_counted_as_negative():
    current = {"revenue_growth_yoy": 0.15}
    prior = {"revenue_growth_yoy": 0.08}
    result = evaluate_discovery_signal(current, prior)
    assert result.signals == {"revenue_growth_yoy": True}


ALL_TESTS = [obj for name, obj in list(globals().items()) if name.startswith("test_") and callable(obj)]

if __name__ == "__main__":
    passed, failed = 0, []
    for fn in ALL_TESTS:
        try:
            fn()
            passed += 1
            print(f"PASS  {fn.__name__}")
        except AssertionError as e:
            failed.append(fn.__name__)
            print(f"FAIL  {fn.__name__}: {e}")
    print(f"\n{passed}/{len(ALL_TESTS)} passed")
    if failed:
        raise SystemExit(1)
