GodsDevProject commited on
Commit
8d15de0
·
verified ·
1 Parent(s): a717b5a

Create tests/test_adapters.py

Browse files
Files changed (1) hide show
  1. tests/test_adapters.py +22 -20
tests/test_adapters.py CHANGED
@@ -1,29 +1,31 @@
 
1
  import asyncio
2
  import pytest
 
 
3
 
4
- from ingest.cia_reading_room import CIAAdapter
5
- from ingest.fbi_vault import FBIAdapter
6
 
 
 
 
7
 
8
- REQUIRED_KEYS = {"source", "title", "url", "snippet", "live"}
9
 
 
 
 
10
 
11
- @pytest.mark.asyncio
12
- @pytest.mark.parametrize(
13
- "adapter_cls",
14
- [CIAAdapter, FBIAdapter]
15
- )
16
- async def test_adapter_contract(adapter_cls):
17
- adapter = adapter_cls()
18
- results = await adapter.search("test")
19
 
20
- assert isinstance(results, list)
 
 
21
 
22
- for r in results:
23
- assert isinstance(r, dict)
24
- assert REQUIRED_KEYS.issubset(r.keys())
25
- assert isinstance(r["source"], str)
26
- assert isinstance(r["title"], str)
27
- assert isinstance(r["url"], str)
28
- assert isinstance(r["snippet"], str)
29
- assert isinstance(r["live"], bool)
 
1
+ import inspect
2
  import asyncio
3
  import pytest
4
+ from ingest.generic_public_foia import GenericFOIAAdapter
5
+ from ingest.registry import get_all_adapters
6
 
 
 
7
 
8
+ @pytest.mark.asyncio
9
+ async def test_all_adapters_compliant():
10
+ adapters = get_all_adapters()
11
 
12
+ assert adapters, "No adapters registered"
13
 
14
+ for name, adapter in adapters.items():
15
+ # Must subclass base
16
+ assert isinstance(adapter, GenericFOIAAdapter)
17
 
18
+ # Must define metadata
19
+ assert adapter.source_name != "UNKNOWN"
20
+ assert adapter.base_url.startswith("http")
 
 
 
 
 
21
 
22
+ # Must implement search
23
+ assert "search" in dir(adapter)
24
+ assert inspect.iscoroutinefunction(adapter.search)
25
 
26
+ # Must not raise on empty query
27
+ try:
28
+ results = await adapter.search("test")
29
+ assert isinstance(results, list)
30
+ except Exception as e:
31
+ pytest.fail(f"{name} adapter failed search(): {e}")