1"""tests for audio format validation.""" 2 3import pytest 4 5from backend._internal.audio import AudioFormat 6 7 8class TestAudioFormat: 9 """test AudioFormat enum functionality.""" 10 11 @pytest.mark.parametrize( 12 ("extension", "expected_format"), 13 [ 14 # mp3 15 (".mp3", AudioFormat.MP3), 16 ("mp3", AudioFormat.MP3), 17 (".MP3", AudioFormat.MP3), 18 # wav 19 (".wav", AudioFormat.WAV), 20 ("wav", AudioFormat.WAV), 21 (".WAV", AudioFormat.WAV), 22 # m4a 23 (".m4a", AudioFormat.M4A), 24 ("m4a", AudioFormat.M4A), 25 (".M4A", AudioFormat.M4A), 26 ], 27 ) 28 def test_from_extension_supported( 29 self, extension: str, expected_format: AudioFormat 30 ): 31 """test supported extension recognition (case-insensitive, with/without dot).""" 32 assert AudioFormat.from_extension(extension) == expected_format 33 34 @pytest.mark.parametrize( 35 "extension", 36 [ 37 ".flac", 38 ".ogg", 39 ".aac", 40 ".wma", 41 ".aiff", 42 ".aif", 43 "", 44 "invalid", 45 ], 46 ) 47 def test_from_extension_unsupported(self, extension: str): 48 """test unsupported extensions return None.""" 49 assert AudioFormat.from_extension(extension) is None 50 51 def test_media_types(self): 52 """test media type mappings.""" 53 assert AudioFormat.MP3.media_type == "audio/mpeg" 54 assert AudioFormat.WAV.media_type == "audio/wav" 55 assert AudioFormat.M4A.media_type == "audio/mp4" 56 57 def test_extensions_with_dots(self): 58 """test extension property includes dots.""" 59 assert AudioFormat.MP3.extension == ".mp3" 60 assert AudioFormat.WAV.extension == ".wav" 61 assert AudioFormat.M4A.extension == ".m4a" 62 63 def test_all_extensions(self): 64 """test all_extensions returns complete list.""" 65 extensions = AudioFormat.all_extensions() 66 assert ".mp3" in extensions 67 assert ".wav" in extensions 68 assert ".m4a" in extensions 69 assert ".aiff" not in extensions 70 assert ".aif" not in extensions 71 assert len(extensions) == 3 72 73 def test_supported_extensions_str(self): 74 """test formatted string of supported extensions.""" 75 ext_str = AudioFormat.supported_extensions_str() 76 assert ".mp3" in ext_str 77 assert ".wav" in ext_str 78 assert ".m4a" in ext_str 79 # AIFF removed due to browser compatibility issues (see PR #152) 80 assert ".aiff" not in ext_str