"""Leftover service cores resolve from src; LLM factory stays on DeepSeek.""" from __future__ import annotations from pathlib import Path import backend.periscopex.utils as utils import backend.services.admin_settings as admin_settings import backend.services.api_logs as api_logs import backend.services.datasheet_store as datasheet_store import backend.services.library as library import backend.services.llm.factory as factory import backend.services.storage as storage from backend.periscopex.utils import natural_sort_key, safe_mpn from backend.services.admin_settings import version_is_stale from backend.services.datasheet_store import ( compute_md5_from_bytes, resolve_datasheet, store_datasheet_bytes, ) from backend.services.llm.factory import get_provider_by_name from backend.services.storage import GENERATION_NEW, LocalStorageBackend, StaleGeneration def _assert_src(mod, name: str) -> None: path = Path(mod.__file__).resolve() assert path.name == name assert "src" in path.parts assert "Native Periscope overlay" not in path.read_text(encoding="utf-8")[:400] def test_core_service_modules_are_src(): for mod, name in ( (factory, "factory.py"), (storage, "storage.py"), (api_logs, "api_logs.py"), (datasheet_store, "datasheet_store.py"), (library, "library.py"), (admin_settings, "admin_settings.py"), (utils, "utils.py"), ): _assert_src(mod, name) def test_factory_routes_anthropic_and_gemini_names_to_deepseek(monkeypatch): from backend.config import settings monkeypatch.setattr(settings, "deepseek_api_key", "sk-test") get_provider_by_name.cache_clear() try: assert get_provider_by_name("deepseek").name == "deepseek" assert get_provider_by_name("anthropic").name == "deepseek" assert get_provider_by_name("gemini").name == "deepseek" finally: get_provider_by_name.cache_clear() def test_safe_mpn_and_natural_sort(): assert safe_mpn("A/B:C") == "A_B_C" assert sorted(["R10", "R2", "R1"], key=natural_sort_key) == ["R1", "R2", "R10"] def test_local_storage_generation_and_datasheet_roundtrip(tmp_path: Path): backend = LocalStorageBackend(tmp_path) backend.write_json_if_match("k.json", {"a": 1}, GENERATION_NEW) try: backend.write_json_if_match("k.json", {"a": 2}, GENERATION_NEW) raise AssertionError("expected StaleGeneration") except StaleGeneration: pass pdf = b"%PDF-1.4 fake" key = store_datasheet_bytes(backend, pdf, "ABC/1") assert key.endswith(".pdf") assert resolve_datasheet(backend, "ABC/1") == key assert compute_md5_from_bytes(pdf) assert version_is_stale("1.0.0", "2.0.0") assert not version_is_stale("2.0.0", "0.0.0")