"""Patent/review collectors: documented fixture adapters that must never fabricate data when no provider or fixture is configured.""" from __future__ import annotations import pytest from app.collectors.base import CompanyContext, SourceConfig from app.collectors.patents import PatentSourceCollector from app.collectors.reviews import ReviewSourceCollector from app.models.enums import SourceStatus, SourceType COMPANY = CompanyContext( id="c1", name="Acme Mobility Systems", official_website=None, monitoring_focus=None ) @pytest.mark.asyncio async def test_patent_collector_disabled_without_fixture_key(): source = SourceConfig(id="s1", source_type=SourceType.PATENT, name="Patents", base_url=None) result = await PatentSourceCollector().collect(source, COMPANY) assert result.status == SourceStatus.DISABLED assert result.documents == [] assert "does not fabricate" in result.error @pytest.mark.asyncio async def test_patent_collector_disabled_for_unknown_fixture_key(): source = SourceConfig( id="s1", source_type=SourceType.PATENT, name="Patents", base_url=None, configuration_metadata={"fixture_key": "does_not_exist"}, ) result = await PatentSourceCollector().collect(source, COMPANY) assert result.status == SourceStatus.DISABLED @pytest.mark.asyncio async def test_patent_collector_loads_fixture_when_configured(): source = SourceConfig( id="s1", source_type=SourceType.PATENT, name="Patents", base_url=None, configuration_metadata={"fixture_key": "acme_mobility"}, ) result = await PatentSourceCollector().collect(source, COMPANY) assert result.status == SourceStatus.ACTIVE assert len(result.documents) == 1 assert result.documents[0].metadata["is_fixture"] is True @pytest.mark.asyncio async def test_review_collector_disabled_without_fixture_key(): source = SourceConfig(id="s1", source_type=SourceType.REVIEW, name="Reviews", base_url=None) result = await ReviewSourceCollector().collect(source, COMPANY) assert result.status == SourceStatus.DISABLED assert result.documents == [] @pytest.mark.asyncio async def test_review_collector_loads_fixture_when_configured(): source = SourceConfig( id="s1", source_type=SourceType.REVIEW, name="Reviews", base_url=None, configuration_metadata={"fixture_key": "acme_mobility"}, ) result = await ReviewSourceCollector().collect(source, COMPANY) assert result.status == SourceStatus.ACTIVE assert len(result.documents) == 2 assert all(d.metadata["is_fixture"] for d in result.documents)