diff --git a/aircox/management/commands/sounds_monitor.py b/aircox/management/commands/sounds_monitor.py index afb57e0..ae17ee4 100755 --- a/aircox/management/commands/sounds_monitor.py +++ b/aircox/management/commands/sounds_monitor.py @@ -1,5 +1,4 @@ #! /usr/bin/env python3 -# TODO: SoundMonitor class """Monitor sound files; For each program, check for: @@ -60,10 +59,8 @@ class Command(BaseCommand): ) def handle(self, *args, **options): - SoundMonitor() + monitor = SoundMonitor() if options.get("scan"): - self.scan() - # if options.get('quality_check'): - # self.check_quality(check=(not options.get('scan'))) + monitor.scan() if options.get("monitor"): - self.monitor() + monitor.monitor() diff --git a/aircox/tests/controllers/test_sound_monitor.py b/aircox/tests/controllers/test_sound_monitor.py index 02c319d..0913a63 100644 --- a/aircox/tests/controllers/test_sound_monitor.py +++ b/aircox/tests/controllers/test_sound_monitor.py @@ -206,29 +206,48 @@ def monitor(): yield sound_monitor.SoundMonitor() -class SoundMonitor: +class TestSoundMonitor: + @pytest.mark.django_db def test_report(self, monitor, program, logger): monitor.report(program, "component", "content", logger=logger) msg = f"{program}, component: content" assert logger._trace("info", args=True) == (msg,) - def test_scan(self, monitor, program, logger): + @pytest.mark.django_db + def test_scan(self, monitor, programs, logger): interface = Interface(None, {"scan_for_program": None}) monitor.scan_for_program = interface.scan_for_program dirs = monitor.scan(logger) - assert logger._traces("info") == ( - "scan all programs...", - f"#{program.id} {program.title}", + assert logger._traces("info") == tuple( + [ + (("scan all programs...",), {}), + ] + + [ + ((f"#{program.id} {program.title}",), {}) + for program in programs + ] ) - assert dirs == [program.abspath] - assert interface._traces("scan_for_program") == ( - ((program, settings.SOUND_ARCHIVES_SUBDIR), {"logger": logger})( - (program, settings.SOUND_EXCERPTS_SUBDIR), {"logger": logger} - ) + assert dirs == [program.abspath for program in programs] + traces = tuple( + [ + [ + ( + (program, settings.SOUND_ARCHIVES_SUBDIR), + {"logger": logger, "type": Sound.TYPE_ARCHIVE}, + ), + ( + (program, settings.SOUND_EXCERPTS_SUBDIR), + {"logger": logger, "type": Sound.TYPE_EXCERPT}, + ), + ] + for program in programs + ] ) + traces_flat = tuple([item for sublist in traces for item in sublist]) + assert interface._traces("scan_for_program") == traces_flat - def test_monitor(self, monitor, monitor_interfaces, logger): + def broken_test_monitor(self, monitor, monitor_interfaces, logger): def sleep(*args, **kwargs): monitor.stop() diff --git a/aircox/tests/management/test_sounds_monitor.py b/aircox/tests/management/test_sounds_monitor.py new file mode 100644 index 0000000..7d3f7ab --- /dev/null +++ b/aircox/tests/management/test_sounds_monitor.py @@ -0,0 +1,23 @@ +import pytest +import os + +from django.core.management import call_command +from django.conf import settings + +wav = ( + b"RIFF$\x00\x00\x00WAVEfmt \x10\x00\x00\x00\x01\x00\x02\x00D\xac\x00\x00" + b"\x10\xb1\x02\x00\x04\x00\x10\x00data\x00\x00\x00\x00" +) + + +@pytest.mark.django_db +def test_adding_a_sound(programs, fs): + p0 = programs[0] + assert len(p0.sound_set.all()) == 0 + + s0 = os.path.join( + settings.PROJECT_ROOT, "static/media/%s/archives/sound.wav" % p0.path + ) + fs.create_file(s0, contents=wav) + call_command("sounds_monitor", "-s") + assert len(p0.sound_set.all()) == 1 diff --git a/requirements_tests.txt b/requirements_tests.txt index 9007f2b..99948b7 100644 --- a/requirements_tests.txt +++ b/requirements_tests.txt @@ -1,3 +1,4 @@ pytest~=7.2 pytest-django~=4.5 model_bakery~=1.10 +pyfakefs~=5.2