"""Regression tests for catalog image URL selection and image probe (golden JSON).""" from __future__ import annotations import json from pathlib import Path from urllib.request import Request import pytest from backend.catalog_image_probe import ( assert_catalog_image_url_works, first_catalog_image_probe_url, first_catalog_image_probe_url_from_list, probe_image_url, resolve_catalog_media_asset_url, ) _FIXTURES = Path(__file__).resolve().parent / "fixtures" def _load(name: str) -> dict: return json.loads((_FIXTURES / name).read_text(encoding="utf-8")) def test_resolve_catalog_media_asset_url_absolute_unchanged() -> None: u = "https://cdn.example.test/catalog/fixture.jpg" assert resolve_catalog_media_asset_url("https://space.hf.space", u) == u def test_resolve_catalog_media_asset_url_relative_matches_golden() -> None: detail = _load("catalog_image_probe_detail_relative.json") raw = detail["assets"][0]["asset_url"] assert resolve_catalog_media_asset_url("https://space.hf.space", raw) == "https://space.hf.space/media/fetlife_fetishes/71/sample.jpg" def test_first_catalog_image_probe_url_https_fixture() -> None: detail = _load("catalog_image_probe_detail_with_asset.json") assert first_catalog_image_probe_url("https://ignored/", detail) == "https://cdn.example.test/catalog/fixture.jpg" def test_first_catalog_image_probe_url_relative_fixture() -> None: detail = _load("catalog_image_probe_detail_relative.json") assert ( first_catalog_image_probe_url("https://space.hf.space", detail) == "https://space.hf.space/media/fetlife_fetishes/71/sample.jpg" ) def test_first_catalog_image_probe_url_from_list_tuple() -> None: a = _load("catalog_image_probe_detail_with_asset.json") b = _load("catalog_image_probe_detail_no_asset.json") kid, url = first_catalog_image_probe_url_from_list("https://api.example", [b, a]) assert kid == "fixture_kink_image" assert url == "https://cdn.example.test/catalog/fixture.jpg" class _MemResp: __slots__ = ("status", "headers", "_body") def __init__(self, status: int, headers: dict[str, str], body: bytes) -> None: self.status = status self.headers = headers self._body = body def read(self, n: int = -1) -> bytes: if n == -1: return self._body return self._body[:n] def __enter__(self) -> "_MemResp": return self def __exit__(self, *args: object) -> None: return None class _FixedOpener: __slots__ = ("resp", "called") def __init__(self, resp: _MemResp) -> None: self.resp = resp self.called = False def __call__(self, req: Request, timeout: float = 30.0) -> _MemResp: self.called = True assert isinstance(req, Request) return self.resp def test_probe_image_url_uses_opener_and_validates_body() -> None: body = b"\xff\xd8\xff\xe0" + b"\x00" * 64 resp = _MemResp(200, {"Content-Type": "image/jpeg; charset=binary"}, body) opener = _FixedOpener(resp) status, ctype = probe_image_url("https://example.test/x.jpg", opener=opener) assert status == 200 assert ctype == "image/jpeg" assert opener.called is True def test_assert_catalog_image_url_works_rejects_html_type() -> None: resp = _MemResp(200, {"Content-Type": "text/html"}, b"") opener = _FixedOpener(resp) with pytest.raises(RuntimeError, match="image/\\*"): assert_catalog_image_url_works("https://example.test/page", opener=opener) def test_hf_docker_seed_media_files_exist_for_picture_probe() -> None: """Regression: deploy bundle must ship JPEGs probed by ``verify_hf_stack`` on Spaces.""" root = Path(__file__).resolve().parents[1] demo = root / "deploy" / "hf" / "seed" / "cached_assets" / "hf_seed" / "demo_kink_1.jpg" placeholder = root / "deploy" / "hf" / "seed" / "cached_assets" / "fetlife_fetishes" / "1" / "146853406.jpg" assert demo.is_file() and demo.stat().st_size > 1000 assert placeholder.is_file() and placeholder.stat().st_size > 1000