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