import unittest from pathlib import Path from music_server.services.local_streaming import ( RangeNotSatisfiable, guess_audio_media_type, parse_single_range, ) class GuessAudioMediaTypeTests(unittest.TestCase): def test_guess_audio_media_type_supported_extensions(self): self.assertEqual("audio/flac", guess_audio_media_type("a.flac")) self.assertEqual("audio/mpeg", guess_audio_media_type("a.mp3")) self.assertEqual("audio/mp4", guess_audio_media_type(Path("a.m4a"))) self.assertEqual("audio/wav", guess_audio_media_type("a.wav")) self.assertEqual("audio/ogg", guess_audio_media_type("a.ogg")) self.assertEqual("audio/ape", guess_audio_media_type("a.ape")) def test_guess_audio_media_type_falls_back_to_octet_stream(self): self.assertEqual("application/octet-stream", guess_audio_media_type("a.bin")) class ParseSingleRangeTests(unittest.TestCase): def test_parse_single_range_returns_none_for_missing_header(self): self.assertIsNone(parse_single_range(None, 10)) def test_parse_single_range_explicit_start_end(self): self.assertEqual((2, 5), parse_single_range("bytes=2-5", 10)) def test_parse_single_range_clamps_out_of_bounds_end(self): self.assertEqual((0, 9), parse_single_range("bytes=0-999", 10)) def test_parse_single_range_suffix(self): self.assertEqual((6, 9), parse_single_range("bytes=-4", 10)) def test_parse_single_range_open_ended(self): self.assertEqual((2, 9), parse_single_range("bytes=2-", 10)) def test_parse_single_range_rejects_out_of_bounds(self): with self.assertRaises(RangeNotSatisfiable): parse_single_range("bytes=10-12", 10) def test_parse_single_range_rejects_reverse_range(self): with self.assertRaises(RangeNotSatisfiable): parse_single_range("bytes=7-2", 10) def test_parse_single_range_rejects_multi_range(self): with self.assertRaises(RangeNotSatisfiable): parse_single_range("bytes=0-1,3-4", 10) def test_parse_single_range_rejects_non_bytes_unit(self): with self.assertRaises(RangeNotSatisfiable): parse_single_range("items=0-1", 10) if __name__ == "__main__": unittest.main()