59 lines
2.2 KiB
Python
59 lines
2.2 KiB
Python
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()
|