API responses now include file_url and thumbnail_url fields. When S3_PUBLIC_BASE_URL is configured, these point to the CDN domain; when unset, they fall back to the existing API proxy paths so local dev requires no additional setup. UI updated to use response URL fields directly instead of constructing proxy URLs client-side. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
59 lines
2.1 KiB
Python
59 lines
2.1 KiB
Python
import uuid
|
|
from unittest.mock import MagicMock
|
|
|
|
import pytest
|
|
|
|
from app.routers.images import _image_to_dict
|
|
|
|
|
|
def _make_image(*, thumbnail_key=None):
|
|
img = MagicMock()
|
|
img.id = uuid.UUID("00000000-0000-0000-0000-000000000001")
|
|
img.hash = "abc123"
|
|
img.filename = "test.jpg"
|
|
img.mime_type = "image/jpeg"
|
|
img.size_bytes = 1024
|
|
img.width = 100
|
|
img.height = 100
|
|
img.storage_key = "abc123storagekey"
|
|
img.thumbnail_key = thumbnail_key
|
|
img.created_at.isoformat.return_value = "2026-05-09T00:00:00"
|
|
img.tags = []
|
|
return img
|
|
|
|
|
|
def test_cdn_configured_with_thumbnail():
|
|
img = _make_image(thumbnail_key="abc123storagekey-thumb")
|
|
result = _image_to_dict(img, cdn_base="https://cdn.example.com")
|
|
assert result["file_url"] == "https://cdn.example.com/abc123storagekey"
|
|
assert result["thumbnail_url"] == "https://cdn.example.com/abc123storagekey-thumb"
|
|
|
|
|
|
def test_cdn_configured_no_thumbnail():
|
|
img = _make_image(thumbnail_key=None)
|
|
result = _image_to_dict(img, cdn_base="https://cdn.example.com")
|
|
assert result["file_url"] == "https://cdn.example.com/abc123storagekey"
|
|
assert result["thumbnail_url"] is None
|
|
|
|
|
|
def test_no_cdn_with_thumbnail():
|
|
img = _make_image(thumbnail_key="abc123storagekey-thumb")
|
|
result = _image_to_dict(img, cdn_base=None)
|
|
assert result["file_url"] == "/api/v1/images/00000000-0000-0000-0000-000000000001/file"
|
|
assert result["thumbnail_url"] == "/api/v1/images/00000000-0000-0000-0000-000000000001/thumbnail"
|
|
|
|
|
|
def test_no_cdn_no_thumbnail():
|
|
img = _make_image(thumbnail_key=None)
|
|
result = _image_to_dict(img, cdn_base=None)
|
|
assert result["file_url"] == "/api/v1/images/00000000-0000-0000-0000-000000000001/file"
|
|
assert result["thumbnail_url"] is None
|
|
|
|
|
|
def test_cdn_trailing_slash_normalised():
|
|
img = _make_image(thumbnail_key="abc123storagekey-thumb")
|
|
result = _image_to_dict(img, cdn_base="https://cdn.example.com/")
|
|
assert result["file_url"] == "https://cdn.example.com/abc123storagekey"
|
|
assert result["thumbnail_url"] == "https://cdn.example.com/abc123storagekey-thumb"
|
|
assert "//" not in result["file_url"].replace("https://", "")
|