"""Tests for STL conversion cache service (pure/unit — no DB needed)."""
import pytest
from pathlib import Path
from app.domains.products.cache_service import compute_step_hash, _cache_key


def test_compute_step_hash_stable(tmp_path):
    """Gleiche Datei → gleicher Hash."""
    f = tmp_path / "test.stp"
    f.write_bytes(b"STEP data content")
    h1 = compute_step_hash(str(f))
    h2 = compute_step_hash(str(f))
    assert h1 == h2
    assert len(h1) == 64  # SHA256 hex


def test_compute_step_hash_differs(tmp_path):
    """Andere Datei → anderer Hash."""
    f1 = tmp_path / "a.stp"
    f1.write_bytes(b"content A")
    f2 = tmp_path / "b.stp"
    f2.write_bytes(b"content B")
    assert compute_step_hash(str(f1)) != compute_step_hash(str(f2))


def test_cache_key_format():
    """Cache-Key hat korrektes Format."""
    key = _cache_key("abc123", "low")
    assert key == "conversion-cache/abc123_low.stl"


def test_store_stl_cache_uses_path(tmp_path, mock_storage):
    """store_stl_cache übergibt Path-Objekt an storage.upload."""
    from app.domains.products.cache_service import store_stl_cache
    stl = tmp_path / "test.stl"
    stl.write_bytes(b"fake stl")
    store_stl_cache("abc123", "low", str(stl))
    call_args = mock_storage.upload.call_args
    assert call_args is not None
    first_arg = call_args[0][0]
    assert isinstance(first_arg, Path), f"Expected Path, got {type(first_arg)}"
