"""Vereins-Übung: Copyright-Pflicht für angehängte Archiv-Dateien.""" from __future__ import annotations import pytest from fastapi import HTTPException import routers.exercises as exercises_mod from routers.exercises import apply_club_exercise_media_copyright_rules def test_apply_club_exercise_media_copyright_skips_non_club() -> None: apply_club_exercise_media_copyright_rules(object(), 1, "private") def test_apply_club_exercise_media_copyright_missing_copyright() -> None: orig = exercises_mod._fetch_exercise_linked_file_assets def mock_fetch(_cur, eid: int): assert eid == 42 return [ { "id": 10, "visibility": "private", "club_id": 1, "lifecycle_state": "active", "copyright_notice": "", "original_filename": "x.jpg", } ] exercises_mod._fetch_exercise_linked_file_assets = mock_fetch try: with pytest.raises(HTTPException) as ei: apply_club_exercise_media_copyright_rules(object(), 42, "club") assert ei.value.status_code == 422 d = ei.value.detail assert isinstance(d, dict) assert d.get("code") == "CLUB_MEDIA_COPYRIGHT_REQUIRED" finally: exercises_mod._fetch_exercise_linked_file_assets = orig def test_apply_club_exercise_media_copyright_ok() -> None: orig = exercises_mod._fetch_exercise_linked_file_assets def mock_fetch(_cur, _eid: int): return [ { "id": 10, "visibility": "private", "club_id": 1, "lifecycle_state": "active", "copyright_notice": "© Verein 2026", "original_filename": "x.jpg", } ] exercises_mod._fetch_exercise_linked_file_assets = mock_fetch try: apply_club_exercise_media_copyright_rules(object(), 42, "club") finally: exercises_mod._fetch_exercise_linked_file_assets = orig