Files
AareLC_train/tests/test_image_utils.py
2026-04-14 16:07:31 +02:00

64 lines
1.9 KiB
Python

"""Unit tests for src/server/image_utils.py"""
import base64
import cv2
import numpy as np
import pytest
from src.server.image_utils import decode_image, CLASS_COLORS
def _make_jpeg_bytes(width=64, height=64) -> bytes:
"""Create a minimal valid JPEG bytestring."""
img = np.zeros((height, width, 3), dtype=np.uint8)
img[10:50, 10:50] = (128, 64, 200) # a coloured rectangle
success, buf = cv2.imencode(".jpg", img)
assert success
return buf.tobytes()
class TestDecodeImage:
def test_decodes_valid_jpeg_bytes(self):
raw = _make_jpeg_bytes()
img = decode_image(raw)
assert img is not None
assert img.ndim == 3
def test_decodes_from_memoryview(self):
raw = _make_jpeg_bytes()
img = decode_image(memoryview(raw))
assert img is not None
def test_decodes_base64_encoded_jpeg(self):
raw = _make_jpeg_bytes()
encoded = base64.b64encode(raw)
img = decode_image(encoded)
assert img is not None
def test_returns_none_for_garbage_bytes(self):
img = decode_image(b"\x00\x01\x02\x03garbage")
assert img is None
def test_returns_none_for_empty_bytes(self):
img = decode_image(b"")
assert img is None
def test_decoded_shape_matches_source(self):
raw = _make_jpeg_bytes(width=80, height=60)
img = decode_image(raw)
assert img is not None
# JPEG encoding may have minor dimension rounding; check order
assert img.shape[0] == 60 # height
assert img.shape[1] == 80 # width
class TestClassColors:
def test_class_colors_are_bgr_tuples(self):
for cls_id, color in CLASS_COLORS.items():
assert isinstance(color, tuple)
assert len(color) == 3
assert all(0 <= c <= 255 for c in color)
def test_known_class_ids_present(self):
assert 0 in CLASS_COLORS
assert 1 in CLASS_COLORS