"""resolve_object_key / open_file for local storage.""" import pytest from app.core.config import get_settings from app.core import storage from app.core.storage import StorageError @pytest.fixture def local_storage_env(tmp_path, monkeypatch): monkeypatch.setenv("STORAGE_TYPE", "local") monkeypatch.setenv("LOCAL_STORAGE_DIR", str(tmp_path)) get_settings.cache_clear() yield tmp_path get_settings.cache_clear() def test_resolve_uploads_url(local_storage_env): assert storage.resolve_object_key("/uploads/feedback/a.png") == "feedback/a.png" def test_resolve_rejects_traversal(local_storage_env): with pytest.raises(StorageError): storage.resolve_object_key("/uploads/../etc/passwd") def test_open_local_file(local_storage_env): stored = storage.upload_file(b"\x89PNG\r\n\x1a\n" + b"x" * 8, "a.png", "feedback") stream, content_type, filename, inline = storage.open_file(stored["url"]) data = stream.read() if hasattr(stream, "read") else b"".join(stream) assert data.startswith(b"\x89PNG") assert "png" in content_type assert inline is True assert filename.endswith(".png") def test_open_rejects_foreign_url(local_storage_env): with pytest.raises(StorageError): storage.open_file("https://evil.example/x.png")