"""Tests for adapter base interface and result types.""" from datetime import datetime from services.adapters.base import AdapterResult, BaseAdapter class TestAdapterResult: def test_ok_when_items_and_no_error(self): r = AdapterResult( source_type="market_api", ticker="AAPL", items=[{"price": 150}], raw_payload=b'{"price":150}', content_hash="abc123", fetched_at=datetime(2026, 4, 11), ) assert r.ok is True assert r.item_count == 1 def test_not_ok_when_error(self): r = AdapterResult( source_type="market_api", ticker="AAPL", items=[], raw_payload=b"", content_hash="", fetched_at=datetime(2026, 4, 11), error="timeout", ) assert r.ok is False def test_not_ok_when_empty_items(self): r = AdapterResult( source_type="news_api", ticker="MSFT", items=[], raw_payload=b"{}", content_hash="def456", fetched_at=datetime(2026, 4, 11), ) assert r.ok is False def test_http_metadata_defaults(self): r = AdapterResult( source_type="market_api", ticker="AAPL", items=[{"x": 1}], raw_payload=b"x", content_hash="h", fetched_at=datetime(2026, 4, 11), ) assert r.http_status is None assert r.response_time_ms is None assert r.metadata == {} class _StubAdapter(BaseAdapter): async def fetch(self, ticker, config): return AdapterResult( source_type="market_api", ticker=ticker, items=[], raw_payload=b"", content_hash="", fetched_at=datetime(2026, 4, 11), ) def source_type(self): return "market_api" class _FilingsStub(BaseAdapter): async def fetch(self, ticker, config): return AdapterResult( source_type="filings_api", ticker=ticker, items=[], raw_payload=b"", content_hash="", fetched_at=datetime(2026, 4, 11), ) def source_type(self): return "filings_api" class TestBaseAdapterHelpers: def test_bucket_name_market(self): adapter = _StubAdapter() assert adapter.bucket_name() == "stonks-raw-market" def test_bucket_name_filings(self): adapter = _FilingsStub() assert adapter.bucket_name() == "stonks-raw-filings" def test_artifact_path_format(self): adapter = _StubAdapter() now = datetime(2026, 4, 11, 14, 30) path = adapter.artifact_path("AAPL", "doc-123", now) assert path == "market_api/AAPL/2026/04/11/doc-123/raw.json"