music on atproto
plyr.fm
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