FastAPI + Celery + Next.js + Postgres/Redis app with company monitoring, source collection, LLM-based change analysis, enrichment, and account security (Turnstile, escalating lockout, email verification).
76 lines
2.6 KiB
Python
76 lines
2.6 KiB
Python
"""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)
|