testsAndMisc-archive/python_pkg/moviepy_showcase/tests/test_video_effects.py

137 lines
4.5 KiB
Python
Raw Normal View History

"""Tests for python_pkg.moviepy_showcase._moviepy_video_effects."""
from __future__ import annotations
from unittest.mock import MagicMock, patch
from python_pkg.moviepy_showcase._moviepy_video_effects import (
_fx,
_part3_effects_1_to_17,
_part3_effects_18_to_34,
part3_video_effects,
)
from python_pkg.moviepy_showcase.moviepy_showcase import H, W
from python_pkg.moviepy_showcase.tests.conftest import create_mock_clip
# ── _fx branches ─────────────────────────────────────────────────
def test_fx_normal_path() -> None:
"""Effect succeeds, duration > 0, size matches canvas."""
clip = create_mock_clip(duration=2.0, size=(W, H))
with patch(
"python_pkg.moviepy_showcase._moviepy_video_effects._base_clip",
return_value=clip,
):
result = _fx(MagicMock(), "label")
assert result is not None
def test_fx_duration_none() -> None:
"""After with_effects, duration is None → sets duration."""
clip = create_mock_clip(size=(W, H))
clip.duration = None
clip.with_effects.return_value = clip
clip.with_duration.return_value = create_mock_clip(size=(W, H))
with patch(
"python_pkg.moviepy_showcase._moviepy_video_effects._base_clip",
return_value=clip,
):
result = _fx(MagicMock(), "label")
assert result is not None
def test_fx_duration_zero() -> None:
"""After with_effects, duration <= 0 → sets duration."""
clip = create_mock_clip(size=(W, H))
clip.duration = 0
clip.with_effects.return_value = clip
clip.with_duration.return_value = create_mock_clip(size=(W, H))
with patch(
"python_pkg.moviepy_showcase._moviepy_video_effects._base_clip",
return_value=clip,
):
result = _fx(MagicMock(), "label")
assert result is not None
def test_fx_duration_negative() -> None:
"""After with_effects, duration < 0 → sets duration."""
clip = create_mock_clip(size=(W, H))
clip.duration = -1.0
clip.with_effects.return_value = clip
clip.with_duration.return_value = create_mock_clip(size=(W, H))
with patch(
"python_pkg.moviepy_showcase._moviepy_video_effects._base_clip",
return_value=clip,
):
result = _fx(MagicMock(), "label")
assert result is not None
def test_fx_raises_valueerror() -> None:
"""with_effects raises ValueError → falls back to base clip."""
clip = create_mock_clip(size=(W, H))
clip.with_effects.side_effect = ValueError("test")
with patch(
"python_pkg.moviepy_showcase._moviepy_video_effects._base_clip",
return_value=clip,
):
result = _fx(MagicMock(), "label")
assert result is not None
def test_fx_raises_oserror() -> None:
"""with_effects raises OSError → falls back to base clip."""
clip = create_mock_clip(size=(W, H))
clip.with_effects.side_effect = OSError("test")
with patch(
"python_pkg.moviepy_showcase._moviepy_video_effects._base_clip",
return_value=clip,
):
result = _fx(MagicMock(), "label")
assert result is not None
def test_fx_raises_attributeerror() -> None:
"""with_effects raises AttributeError → falls back to base clip."""
clip = create_mock_clip(size=(W, H))
clip.with_effects.side_effect = AttributeError("test")
with patch(
"python_pkg.moviepy_showcase._moviepy_video_effects._base_clip",
return_value=clip,
):
result = _fx(MagicMock(), "label")
assert result is not None
def test_fx_size_mismatch() -> None:
"""After effect, size != (W, H) → resize_to_canvas is called."""
clip = create_mock_clip(size=(100, 100))
clip.with_effects.return_value = clip
with patch(
"python_pkg.moviepy_showcase._moviepy_video_effects._base_clip",
return_value=clip,
):
result = _fx(MagicMock(), "label")
assert result is not None
# ── part functions ───────────────────────────────────────────────
def test_part3_effects_1_to_17() -> None:
result = _part3_effects_1_to_17()
assert isinstance(result, list)
assert len(result) > 0
def test_part3_effects_18_to_34() -> None:
result = _part3_effects_18_to_34()
assert isinstance(result, list)
assert len(result) > 0
def test_part3_video_effects() -> None:
result = part3_video_effects()
assert isinstance(result, list)
# Should include header + effects from both halves
assert len(result) > 1