#137 Deployment: **Upgrade to Liquidsoap 2.4**: code has been adapted to work with liquidsoap 2.4 Co-authored-by: bkfox <thomas bkfox net> Reviewed-on: #138
138 lines
3.9 KiB
Python
138 lines
3.9 KiB
Python
import os
|
|
|
|
import pytest
|
|
|
|
from aircox_streamer.controllers import (
|
|
Source,
|
|
PlaylistSource,
|
|
QueueSource,
|
|
Request,
|
|
)
|
|
|
|
|
|
@pytest.fixture
|
|
def source(controller):
|
|
return Source(controller, 13)
|
|
|
|
|
|
@pytest.fixture
|
|
def playlist_source(controller, program):
|
|
return PlaylistSource(controller, 14, program)
|
|
|
|
|
|
@pytest.fixture
|
|
def queue_source(controller):
|
|
return QueueSource(controller, 15)
|
|
|
|
|
|
class TestSource:
|
|
@pytest.mark.django_db
|
|
def test_station(self, source, station):
|
|
assert source.station == station
|
|
|
|
@pytest.mark.django_db
|
|
def test_fetch(self, socket, source, metadata_string):
|
|
remaining = 3.12
|
|
socket.recv_data = [
|
|
f"{remaining} END",
|
|
metadata_string,
|
|
]
|
|
|
|
source.fetch()
|
|
assert socket.is_sent(f"{source.id}.remaining")
|
|
assert socket.is_sent(f"{source.id}.get")
|
|
|
|
assert source.remaining == remaining
|
|
assert source.request_status
|
|
|
|
@pytest.mark.django_db
|
|
def test_skip(self, socket, source):
|
|
socket.recv_data = "\nEND"
|
|
source.skip()
|
|
assert socket.is_sent(f"{source.id}.skip\n")
|
|
|
|
@pytest.mark.django_db
|
|
def test_restart(self, socket, source):
|
|
source.restart()
|
|
prefix = f"{source.id}.seek"
|
|
assert any(r for r in socket.sent_data if r.startswith(prefix))
|
|
|
|
@pytest.mark.django_db
|
|
def test_seek(self, socket, source):
|
|
source.seek(10)
|
|
assert socket.is_sent(f"{source.id}.seek 10")
|
|
|
|
|
|
class TestPlaylistSource:
|
|
@pytest.mark.django_db
|
|
def test_get_sound_queryset(self, playlist_source, sounds):
|
|
query = playlist_source.get_sound_queryset()
|
|
assert all(r.program_id == playlist_source.program.pk and r.broadcast for r in query)
|
|
|
|
@pytest.mark.django_db
|
|
def test_get_playlist(self, playlist_source, sounds):
|
|
expected = {r.file.path for r in sounds}
|
|
query = playlist_source.get_playlist()
|
|
assert all(r in expected for r in query)
|
|
|
|
@pytest.mark.django_db
|
|
def test_write_playlist(self, playlist_source):
|
|
playlist = ["/tmp/a", "/tmp/b"]
|
|
playlist_source.write_playlist(playlist)
|
|
with open(playlist_source.path, "r") as file:
|
|
result = file.read()
|
|
os.remove(playlist_source.path)
|
|
|
|
assert result == "\n".join(playlist)
|
|
|
|
@pytest.mark.django_db
|
|
def test_stream(self, playlist_source, stream):
|
|
result = playlist_source.stream()
|
|
assert result == {
|
|
"begin": stream.begin.strftime("%Hh%M"),
|
|
"end": stream.end.strftime("%Hh%M"),
|
|
"delay": 0,
|
|
}
|
|
|
|
@pytest.mark.django_db
|
|
def test_sync(self, playlist_source):
|
|
# spoof method
|
|
playlist = ["/tmp/a", "/tmp/b"]
|
|
written_playlist = []
|
|
playlist_source.get_playlist = lambda: playlist
|
|
playlist_source.write_playlist = lambda p: written_playlist.extend(p)
|
|
|
|
playlist_source.sync()
|
|
assert written_playlist == playlist
|
|
|
|
|
|
class TestQueueSource:
|
|
@pytest.mark.django_db
|
|
def test_requests(self, queue_source, socket, metadata_string):
|
|
queue_source.queue = [13, 14, 15]
|
|
socket.recv_data = [f"{metadata_string}\nEND" for _ in queue_source.queue]
|
|
|
|
requests = queue_source.requests
|
|
|
|
assert all(isinstance(r, Request) for r in requests)
|
|
assert all(r.uri for r in requests)
|
|
|
|
@pytest.mark.django_db
|
|
def test_push(self, queue_source, socket):
|
|
paths = ["/tmp/a", "/tmp/b"]
|
|
queue_source.push(*paths)
|
|
assert all(socket.is_sent(f"{queue_source.id}_queue.push {path}") for path in paths)
|
|
|
|
@pytest.mark.django_db
|
|
def test_fetch(self, queue_source, socket, metadata_string):
|
|
queue = ["13", "14", "15"]
|
|
socket.recv_data = [
|
|
# Source fetch remaining & metadata
|
|
"13 END",
|
|
metadata_string,
|
|
" ".join(queue) + "\nEND",
|
|
]
|
|
queue_source.fetch()
|
|
assert queue_source.uri
|
|
assert queue_source.queue == queue
|