""" Tests API preview/commit scraping. """ from datetime import datetime from pricewatch.app.api.main import commit_scrape, preview_scrape from pricewatch.app.api.schemas import ScrapeCommitRequest, ScrapePreviewRequest from pricewatch.app.core.schema import DebugInfo, DebugStatus, FetchMethod, ProductSnapshot def test_preview_scrape_returns_snapshot(monkeypatch): snapshot = ProductSnapshot( source="amazon", url="https://example.com", title="Produit", price=9.99, currency="EUR", debug=DebugInfo(method=FetchMethod.HTTP, status=DebugStatus.SUCCESS), ) def fake_scrape(url, use_playwright=None, save_db=False): return {"success": True, "snapshot": snapshot, "error": None} monkeypatch.setattr("pricewatch.app.api.main.scrape_product", fake_scrape) response = preview_scrape(ScrapePreviewRequest(url="https://example.com")) assert response.success is True assert response.snapshot["source"] == "amazon" assert response.snapshot["price"] == 9.99 def test_commit_scrape_persists_snapshot(monkeypatch): snapshot = ProductSnapshot( source="amazon", url="https://example.com", title="Produit", price=19.99, currency="EUR", fetched_at=datetime(2026, 1, 15, 10, 0, 0), debug=DebugInfo(method=FetchMethod.HTTP, status=DebugStatus.SUCCESS), ) class FakePipeline: def __init__(self, config=None): self.config = config def process_snapshot(self, snapshot, save_to_db=True): return 42 monkeypatch.setattr("pricewatch.app.api.main.ScrapingPipeline", FakePipeline) response = commit_scrape(ScrapeCommitRequest(snapshot=snapshot.model_dump(mode="json"))) assert response.success is True assert response.product_id == 42