from intel import parse_reduce_json, clamp_coords, select_ticker, select_map FENCED = """```json {"summary_en": "Brief.", "ticker": [ {"headline": "Blast in Kyiv", "importance": "critical", "url": "https://ex", "location_name": "Kyiv"} ], "map_items": [ {"headline": "Blast in Kyiv", "importance": "critical", "location_name": "Kyiv, Ukraine", "lat": 50.45, "lon": 30.52, "location_confidence": "city", "category": "military/conflict", "url": "https://ex"} ]} ```""" def test_parse_strips_fence_and_think_tags(): raw = "nope\n" + FENCED out = parse_reduce_json(raw) assert out["summary_en"] == "Brief." assert len(out["ticker"]) == 1 def test_parse_empty_and_garbage_returns_empty_struct(): assert parse_reduce_json("")["summary_en"] == "" assert parse_reduce_json("not json")["ticker"] == [] def test_clamp_coords_drops_out_of_range_and_unknown(): assert clamp_coords(50.45, 30.52) == (50.45, 30.52) assert clamp_coords(95.0, 10.0) is None assert clamp_coords(None, 10.0) is None assert clamp_coords("50.45", "30.52") == (50.45, 30.52) def test_select_ticker_keeps_critical_high_caps_12(): rows = [{"headline": f"h{i}", "importance": "critical"} for i in range(15)] rows.append({"headline": "skip", "importance": "low"}) out = select_ticker(rows) assert len(out) == 12 assert all(r["importance"] in ("critical", "high") for r in out) def test_select_ticker_falls_back_to_medium_low_when_nothing_flagged(): rows = [ {"headline": "shop theft", "importance": "low"}, {"headline": "highway crash", "importance": "medium"}, {"headline": "none", "importance": "none"}, ] out = select_ticker(rows) assert [r["headline"] for r in out] == ["highway crash", "shop theft"] def test_select_map_requires_valid_coords_and_flag(): items = [ {"headline": "A", "importance": "critical", "lat": 50.45, "lon": 30.52, "location_name": "Kyiv"}, {"headline": "B", "importance": "critical", "lat": None, "lon": None, "location_name": "Unknown"}, {"headline": "C", "importance": "low", "lat": 1.0, "lon": 2.0, "location_name": "x"}, ] out = select_map(items) assert [r["headline"] for r in out] == ["A"] def test_select_map_caps_20(): items = [ {"headline": f"h{i}", "importance": "critical", "lat": 1.0, "lon": 2.0} for i in range(25) ] out = select_map(items) assert len(out) == 20 assert all(r["importance"] in ("critical", "high") for r in out)