38 lines
1.1 KiB
Python
38 lines
1.1 KiB
Python
"""Cache-key golden rules: keyed by pixel hash + size + version, so identity
|
|
changes invalidate and EXIF-only changes reuse."""
|
|
|
|
from photo_pipeline.models import Asset
|
|
from photo_pipeline.services.thumbnails import THUMB_VERSION, ThumbnailService
|
|
|
|
|
|
def _asset(pixel=None, sha="deadbeef"):
|
|
return Asset(
|
|
id="a1",
|
|
original_path="a.jpg",
|
|
current_path="a.jpg",
|
|
current_sha256=sha,
|
|
pixel_sha256=pixel,
|
|
hash_version=1,
|
|
)
|
|
|
|
|
|
def test_key_is_pixel_size_and_version():
|
|
key = ThumbnailService._cache_key(_asset(pixel="PIX"), 512)
|
|
assert key == f"PIX-512-v{THUMB_VERSION}"
|
|
|
|
|
|
def test_different_size_changes_key():
|
|
asset = _asset(pixel="PIX")
|
|
assert ThumbnailService._cache_key(asset, 256) != ThumbnailService._cache_key(asset, 512)
|
|
|
|
|
|
def test_different_pixels_change_key():
|
|
assert ThumbnailService._cache_key(_asset(pixel="P1"), 512) != ThumbnailService._cache_key(
|
|
_asset(pixel="P2"), 512
|
|
)
|
|
|
|
|
|
def test_undecodable_asset_keys_by_source_bytes():
|
|
key = ThumbnailService._cache_key(_asset(pixel=None, sha="abc123"), 256)
|
|
assert key == f"src:abc123-256-v{THUMB_VERSION}"
|