Files
periscope/tests/test_periscope_services_core_rewrite.py
T
michele 4df04df5d4 Make the component library a standalone product door (2.63.0).
Add /api/library datasheet import and component GET/PUT with no exam.
Reorganize pytest into datasheet, library, schematic, PCB, and AF+AI.
Document Rust criteria (none chosen; no rustup) and coding conformity.
2026-09-21 22:12:00 +02:00

78 lines
2.7 KiB
Python

"""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")