forked from rc/aircox
cfr #121 Co-authored-by: Christophe Siraut <d@tobald.eu.org> Co-authored-by: bkfox <thomas bkfox net> Co-authored-by: Thomas Kairos <thomas@bkfox.net> Reviewed-on: rc/aircox#131 Co-authored-by: Chris Tactic <ctactic@noreply.git.radiocampus.be> Co-committed-by: Chris Tactic <ctactic@noreply.git.radiocampus.be>
This commit is contained in:
@ -1,14 +1,12 @@
|
||||
import pytest
|
||||
|
||||
from datetime import timedelta
|
||||
|
||||
from django.conf import settings as conf
|
||||
from django.utils import timezone as tz
|
||||
|
||||
from aircox import models
|
||||
from aircox.controllers.sound_file import SoundFile
|
||||
|
||||
|
||||
# FIXME: use from tests.models.sound
|
||||
@pytest.fixture
|
||||
def path_infos():
|
||||
return {
|
||||
@ -27,6 +25,7 @@ def path_infos():
|
||||
"day": 2,
|
||||
"hour": 10,
|
||||
"minute": 13,
|
||||
"n": None,
|
||||
"name": "Sample 2",
|
||||
},
|
||||
"test/20220103_1_sample_3.mp3": {
|
||||
@ -56,42 +55,25 @@ def sound_files(path_infos):
|
||||
return {k: r for k, r in ((path, SoundFile(conf.MEDIA_ROOT + "/" + path)) for path in path_infos.keys())}
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def sound_file(sound_files):
|
||||
return next(sound_files.items())
|
||||
|
||||
|
||||
def test_sound_path(sound_files):
|
||||
for path, sound_file in sound_files.items():
|
||||
assert path == sound_file.sound_path
|
||||
|
||||
|
||||
def test_read_path(path_infos, sound_files):
|
||||
for path, sound_file in sound_files.items():
|
||||
expected = path_infos[path]
|
||||
result = sound_file.read_path(path)
|
||||
# remove None values
|
||||
result = {k: v for k, v in result.items() if v is not None}
|
||||
assert expected == result, "path: {}".format(path)
|
||||
class TestSoundFile:
|
||||
def sound_path(self, sound_file):
|
||||
assert sound_file[0] == sound_file[1].sound_path
|
||||
|
||||
def sync(self):
|
||||
raise NotImplementedError("test is not implemented")
|
||||
|
||||
def _setup_diff(program, info):
|
||||
episode = models.Episode(program=program, title="test-episode")
|
||||
at = tz.datetime(**{k: info[k] for k in ("year", "month", "day", "hour", "minute") if info.get(k)})
|
||||
at = tz.make_aware(at)
|
||||
diff = models.Diffusion(episode=episode, start=at, end=at + timedelta(hours=1))
|
||||
episode.save()
|
||||
diff.save()
|
||||
return diff
|
||||
def create_episode_sound(self):
|
||||
raise NotImplementedError("test is not implemented")
|
||||
|
||||
|
||||
@pytest.mark.django_db(transaction=True)
|
||||
def test_find_episode(sound_files):
|
||||
station = models.Station(name="test-station")
|
||||
program = models.Program(station=station, title="test")
|
||||
station.save()
|
||||
program.save()
|
||||
|
||||
for path, sound_file in sound_files.items():
|
||||
infos = sound_file.read_path(path)
|
||||
diff = _setup_diff(program, infos)
|
||||
sound = models.Sound(program=diff.program, file=path)
|
||||
result = sound_file.find_episode(sound, infos)
|
||||
assert diff.episode == result
|
||||
|
||||
# TODO: find_playlist, sync
|
||||
def _on_delete(self):
|
||||
raise NotImplementedError("test is not implemented")
|
||||
|
@ -223,22 +223,19 @@ class TestSoundMonitor:
|
||||
[
|
||||
(("scan all programs...",), {}),
|
||||
]
|
||||
+ [
|
||||
((f"#{program.id} {program.title}",), {})
|
||||
for program in programs
|
||||
]
|
||||
+ [((f"#{program.id} {program.title}",), {}) for program in programs]
|
||||
)
|
||||
assert dirs == [program.abspath for program in programs]
|
||||
traces = tuple(
|
||||
[
|
||||
[
|
||||
(
|
||||
(program, settings.SOUND_ARCHIVES_SUBDIR),
|
||||
{"logger": logger, "type": Sound.TYPE_ARCHIVE},
|
||||
(program, settings.SOUND_BROADCASTS_SUBDIR),
|
||||
{"logger": logger, "broadcast": True},
|
||||
),
|
||||
(
|
||||
(program, settings.SOUND_EXCERPTS_SUBDIR),
|
||||
{"logger": logger, "type": Sound.TYPE_EXCERPT},
|
||||
{"logger": logger, "broadcast": False},
|
||||
),
|
||||
]
|
||||
for program in programs
|
||||
@ -247,6 +244,7 @@ class TestSoundMonitor:
|
||||
traces_flat = tuple([item for sublist in traces for item in sublist])
|
||||
assert interface._traces("scan_for_program") == traces_flat
|
||||
|
||||
# TODO / FIXME
|
||||
def broken_test_monitor(self, monitor, monitor_interfaces, logger):
|
||||
def sleep(*args, **kwargs):
|
||||
monitor.stop()
|
||||
@ -260,6 +258,7 @@ class TestSoundMonitor:
|
||||
assert observer
|
||||
schedules = observer._traces("schedule")
|
||||
for (handler, *_), kwargs in schedules:
|
||||
breakpoint()
|
||||
assert isinstance(handler, sound_monitor.MonitorHandler)
|
||||
assert isinstance(handler.pool, futures.ThreadPoolExecutor)
|
||||
assert (handler.subdir, handler.type) in (
|
||||
|
Reference in New Issue
Block a user