"""Tests for bincio.shared.images — shared image upload utilities.""" from __future__ import annotations from pathlib import Path import pytest from bincio.shared.images import ALLOWED_IMAGE_TYPES, MAX_IMAGE_BYTES, unique_image_name def test_allowed_types_contains_expected(): assert "image/jpeg" in ALLOWED_IMAGE_TYPES assert "image/png" in ALLOWED_IMAGE_TYPES assert "image/webp" in ALLOWED_IMAGE_TYPES assert "image/gif" in ALLOWED_IMAGE_TYPES def test_allowed_types_excludes_unexpected(): assert "image/avif" not in ALLOWED_IMAGE_TYPES assert "image/svg+xml" not in ALLOWED_IMAGE_TYPES assert "application/octet-stream" not in ALLOWED_IMAGE_TYPES def test_max_image_bytes(): assert MAX_IMAGE_BYTES == 10 * 1024 * 1024 def test_unique_name_no_collision(tmp_path: Path): assert unique_image_name(tmp_path, "photo.jpg") == "photo.jpg" def test_unique_name_single_collision(tmp_path: Path): (tmp_path / "photo.jpg").touch() assert unique_image_name(tmp_path, "photo.jpg") == "photo_1.jpg" def test_unique_name_multiple_collisions(tmp_path: Path): (tmp_path / "photo.jpg").touch() (tmp_path / "photo_1.jpg").touch() assert unique_image_name(tmp_path, "photo.jpg") == "photo_2.jpg" def test_unique_name_no_suffix(tmp_path: Path): (tmp_path / "photo").touch() assert unique_image_name(tmp_path, "photo") == "photo_1" def test_unique_name_preserves_extension_case(tmp_path: Path): assert unique_image_name(tmp_path, "MyPhoto.PNG") == "MyPhoto.PNG" def test_unique_name_empty_directory_returns_original(tmp_path: Path): assert unique_image_name(tmp_path, "img.webp") == "img.webp"