50 lines
1.6 KiB
Python
50 lines
1.6 KiB
Python
from datetime import UTC, datetime
|
|
|
|
from app.services.earth_news import ParsedNewsItem, _serialize_item
|
|
|
|
|
|
def test_serialize_item_includes_region_anchor_for_cruise():
|
|
item = ParsedNewsItem(
|
|
id="google-apac:test",
|
|
title="Example APAC story",
|
|
summary="Example summary",
|
|
url="https://example.com/story",
|
|
source="Example Source",
|
|
feed_name="Global Monitor / APAC",
|
|
feed_region="asia-pacific",
|
|
homepage_url="https://example.com",
|
|
published_at=datetime(2026, 4, 23, 2, 30, tzinfo=UTC),
|
|
)
|
|
|
|
payload = _serialize_item(item, active_region="asia-pacific")
|
|
|
|
assert payload["latitude"] == 1.3521
|
|
assert payload["longitude"] == 103.8198
|
|
assert payload["location_label"] == "亚太"
|
|
assert payload["location_inferred"] is True
|
|
assert payload["is_focus_match"] is True
|
|
assert payload["published_at"] == "2026-04-23T02:30:00Z"
|
|
|
|
|
|
def test_serialize_item_falls_back_to_global_anchor():
|
|
item = ParsedNewsItem(
|
|
id="custom:test",
|
|
title="Fallback story",
|
|
summary="Fallback summary",
|
|
url="https://example.com/fallback",
|
|
source="Fallback Source",
|
|
feed_name="Fallback Feed",
|
|
feed_region="unknown-region",
|
|
homepage_url="https://example.com",
|
|
published_at=None,
|
|
)
|
|
|
|
payload = _serialize_item(item, active_region="americas")
|
|
|
|
assert payload["latitude"] == 20.0
|
|
assert payload["longitude"] == 0.0
|
|
assert payload["location_label"] == "全球"
|
|
assert payload["location_inferred"] is True
|
|
assert payload["is_focus_match"] is False
|
|
assert payload["published_at"] is None
|