"""Structural tests for the Macro Context scaffold (StockLab overhaul, Part 15)."""
from __future__ import annotations

from datetime import date

from app.engines.macro import MacroContext, MacroDataPoint


def test_macro_context_partial_population_counts_correctly():
    ctx = MacroContext(
        region="US",
        policy_rate=MacroDataPoint(value=5.25, as_of=date(2026, 1, 1), source="FRED"),
        cpi_yoy=MacroDataPoint(value=3.1, as_of=date(2026, 1, 1), source="FRED"),
    )
    assert ctx.populated_field_count == 2
    assert ctx.gdp_growth_yoy is None


def test_macro_context_empty_is_valid_not_an_error():
    ctx = MacroContext(region="US")
    assert ctx.populated_field_count == 0


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)
