OmniVoice-Studio / tests /test_dub_export_bitrate.py
Lê Phi Nam
Deploy to HF Space
94004a2
Raw
History Blame Contribute Delete
1.84 kB
"""Unit tests for the bitrate clamping logic inside /dub/download-mp3.
The handler accepts `bitrate=192k` / `192` / `"1e5k"` / empty etc. and must
normalize to ffmpeg's `Nk` form clamped between 64 and 320 kbps. Malformed
values fall back to 192.
"""
from __future__ import annotations
import pytest
def _clamp(bitrate):
"""Re-implement the inline clamp from dub_export.py so we can unit-test
it without standing up a full FastAPI app + ffmpeg subprocess."""
_br = str(bitrate or "192k").lower().rstrip("k") or "192"
try:
_br_int = max(64, min(int(_br), 320))
except ValueError:
_br_int = 192
return f"{_br_int}k"
@pytest.mark.parametrize("raw,expected", [
("192k", "192k"),
("320k", "320k"),
("128", "128k"),
("64k", "64k"),
("64", "64k"),
("256K", "256k"), # case-insensitive
])
def test_clamp_normal_values_pass_through(raw, expected):
assert _clamp(raw) == expected
@pytest.mark.parametrize("raw", ["32k", "16", "8", "0"])
def test_clamp_below_floor_snaps_to_64k(raw):
assert _clamp(raw) == "64k"
@pytest.mark.parametrize("raw", ["512k", "1000k", "800", "99999"])
def test_clamp_above_ceiling_snaps_to_320k(raw):
assert _clamp(raw) == "320k"
@pytest.mark.parametrize("raw", [None, "", "garbage", "1e5k"])
def test_clamp_malformed_falls_back_to_192k(raw):
"""Non-numeric / empty / scientific-notation values hit the ValueError
branch and get the 192k default."""
assert _clamp(raw) == "192k"
def test_clamp_negative_int_clamps_to_floor():
"""Negative values parse as int fine but clamp up to the 64k floor —
not a ValueError case."""
assert _clamp("-5k") == "64k"
def test_clamp_defaults_192k_on_empty_str():
"""Empty string should also be treated as default, not crash."""
assert _clamp("") == "192k"