Initial commit: CI Agent competitive-intelligence monitoring app
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).
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
"""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)
|
||||
Reference in New Issue
Block a user