"""Section photo vision disk cache.""" from __future__ import annotations import json from pathlib import Path import pytest from app.services.photo_vision import ( _read_vision_cache, _vision_cache_path, _write_vision_cache, invalidate_section_photo_vision_cache, ) def test_vision_cache_roundtrip(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> None: monkeypatch.setattr("app.services.photo_vision.settings.upload_dir", tmp_path / "uploads") path = _vision_cache_path("t1", "r1", "E1") _write_vision_cache( path, photo_ids=["a", "b"], observations=["Crack in render"], note=None, ) out = _read_vision_cache(path, photo_ids=["b", "a"]) assert out is not None obs, note = out assert obs == ["Crack in render"] assert note is None def test_vision_cache_invalidates_on_photo_set_change(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> None: monkeypatch.setattr("app.services.photo_vision.settings.upload_dir", tmp_path / "uploads") path = _vision_cache_path("t1", "r1", "E1") _write_vision_cache(path, photo_ids=["a"], observations=["x"], note=None) assert _read_vision_cache(path, photo_ids=["a", "b"]) is None def test_invalidate_removes_cache(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> None: monkeypatch.setattr("app.services.photo_vision.settings.upload_dir", tmp_path / "uploads") path = _vision_cache_path("t1", "r1", "E1") path.parent.mkdir(parents=True, exist_ok=True) path.write_text(json.dumps({"photo_ids": []}), encoding="utf-8") invalidate_section_photo_vision_cache("t1", "r1", "E1") assert not path.is_file()