forked from rc/aircox
Work on utility test class + use them as poc in test_sound_monitor
This commit is contained in:
@ -100,3 +100,8 @@ def podcasts(episodes):
|
||||
sound.file = f"test_sound_{episode.pk}_{i}.mp3"
|
||||
items += sounds
|
||||
return items
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def sound(program):
|
||||
return baker.make(models.Sound, file="tmp/test.wav", program=program)
|
||||
|
136
aircox/tests/controllers/test_sound_monitor.py
Normal file
136
aircox/tests/controllers/test_sound_monitor.py
Normal file
@ -0,0 +1,136 @@
|
||||
import logging
|
||||
import pytest
|
||||
|
||||
from django.utils import timezone as tz
|
||||
|
||||
from aircox.models import Sound
|
||||
from aircox.controllers import sound_monitor
|
||||
from aircox.test import Interface
|
||||
|
||||
|
||||
now = tz.datetime.now()
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def event():
|
||||
return Interface(src_path="/tmp/src_path", dest_path="/tmp/dest_path")
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def logger():
|
||||
logger = Interface(
|
||||
logging, {"info": None, "debug": None, "error": None, "warning": None}
|
||||
)
|
||||
print("logger", logger)
|
||||
return logger
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def interfaces(logger):
|
||||
return {
|
||||
"SoundFile": Interface.inject(
|
||||
sound_monitor,
|
||||
"SoundFile",
|
||||
{
|
||||
"sync": None,
|
||||
},
|
||||
),
|
||||
"time": Interface.inject(
|
||||
sound_monitor,
|
||||
"time",
|
||||
{
|
||||
"sleep": None,
|
||||
},
|
||||
),
|
||||
"datetime": Interface.inject(sound_monitor, "datetime", {now: now}),
|
||||
}
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def task(interfaces):
|
||||
return sound_monitor.Task()
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def delete_task(interfaces):
|
||||
return sound_monitor.DeleteTask()
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def move_task(interfaces):
|
||||
return sound_monitor.MoveTask()
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def modified_task(interfaces):
|
||||
return sound_monitor.ModifiedTask()
|
||||
|
||||
|
||||
class TestTask:
|
||||
def test___init__(self, task):
|
||||
assert task.timestamp is not None
|
||||
|
||||
def test_ping(self, task):
|
||||
task.timestamp = None
|
||||
task.ping()
|
||||
print("---", task.timestamp, now)
|
||||
assert task.timestamp >= now
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test___call__(self, logger, task, event):
|
||||
task.log_msg = "--{event.src_path}--"
|
||||
sound_file = task(event, logger=logger, kw=13)
|
||||
assert sound_file._trace("sync", kw=True) == {"kw": 13}
|
||||
assert logger._trace("info", args=True) == (
|
||||
task.log_msg.format(event=event),
|
||||
)
|
||||
|
||||
|
||||
class TestDeleteTask:
|
||||
@pytest.mark.django_db
|
||||
def test___call__(self, delete_task, logger, task, event):
|
||||
sound_file = delete_task(event, logger=logger)
|
||||
assert sound_file._trace("sync", kw=True) == {"deleted": True}
|
||||
|
||||
|
||||
class TestMoveTask:
|
||||
@pytest.mark.django_db
|
||||
def test__call___with_sound(self, move_task, sound, event, logger):
|
||||
event.src_path = sound.file.name
|
||||
sound_file = move_task(event, logger=logger)
|
||||
assert isinstance(sound_file._trace("sync", kw="sound"), Sound)
|
||||
assert sound_file.path == sound.file.name
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test__call___no_sound(self, move_task, event, logger):
|
||||
sound_file = move_task(event, logger=logger)
|
||||
assert sound_file._trace("sync", kw=True) == {}
|
||||
assert sound_file.path == event.dest_path
|
||||
|
||||
|
||||
class TestModifiedTask:
|
||||
def test_wait(self, modified_task):
|
||||
dt_now = now + modified_task.timeout_delta - tz.timedelta(hours=10)
|
||||
datetime = Interface.inject(sound_monitor, "datetime", {"now": dt_now})
|
||||
|
||||
def sleep(n):
|
||||
datetime._imeta.funcs[
|
||||
"now"
|
||||
] = modified_task.timestamp + tz.timedelta(hours=10)
|
||||
|
||||
time = Interface.inject(sound_monitor, "time", {"sleep": sleep})
|
||||
modified_task.wait()
|
||||
assert time._trace("sleep", args=True)
|
||||
|
||||
datetime._imeta.release()
|
||||
|
||||
def test__call__(self):
|
||||
pass
|
||||
|
||||
|
||||
class TestMonitorHandler:
|
||||
pass
|
||||
|
||||
|
||||
class SoundMonitor:
|
||||
pass
|
@ -6,7 +6,7 @@ from django.conf import settings as conf
|
||||
from django.utils import timezone as tz
|
||||
|
||||
from aircox import models
|
||||
from aircox.management.sound_file import SoundFile
|
||||
from aircox.controllers.sound_file import SoundFile
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
|
64
aircox/tests/models/test_episode.py
Normal file
64
aircox/tests/models/test_episode.py
Normal file
@ -0,0 +1,64 @@
|
||||
import datetime
|
||||
import pytest
|
||||
|
||||
from aircox.conf import settings
|
||||
from aircox import models
|
||||
|
||||
|
||||
class TestEpisode:
|
||||
@pytest.mark.django_db
|
||||
def test_program(self, episode):
|
||||
assert episode.program == episode.parent.program
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_podcasts(self, episode, podcasts):
|
||||
podcasts = {
|
||||
podcast.pk: podcast
|
||||
for podcast in podcasts
|
||||
if podcast.episode == episode
|
||||
}
|
||||
for data in episode.podcasts:
|
||||
podcast = podcasts[data["pk"]]
|
||||
assert data["name"] == podcast.name
|
||||
assert data["page_url"] == episode.get_absolute_url()
|
||||
assert data["page_title"] == episode.title
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_get_absolute_url_is_published(self, episode):
|
||||
episode.status = models.Episode.STATUS_PUBLISHED
|
||||
assert episode.get_absolute_url() != episode.parent.get_absolute_url()
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_get_absolute_url_not_published(self, episode):
|
||||
episode.status = models.Episode.STATUS_DRAFT
|
||||
assert episode.get_absolute_url() == episode.parent.get_absolute_url()
|
||||
|
||||
@pytest.mark.django_db(transaction=False)
|
||||
def test_save_raises_parent_is_none(self, episode):
|
||||
with pytest.raises(ValueError):
|
||||
episode.parent = None
|
||||
episode.save()
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_get_default_title(self, programs):
|
||||
program = programs[0]
|
||||
date = datetime.date(2023, 5, 17)
|
||||
result = models.Episode.get_default_title(program, date)
|
||||
assert program.title in result
|
||||
assert date.strftime(settings.EPISODE_TITLE_DATE_FORMAT) in result
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_get_init_kwargs_from(self, program):
|
||||
date = datetime.date(2023, 3, 14)
|
||||
date_str = date.strftime(settings.EPISODE_TITLE_DATE_FORMAT)
|
||||
|
||||
kwargs = models.Episode.get_init_kwargs_from(program, date)
|
||||
title = kwargs["title"]
|
||||
assert program.title in title
|
||||
assert date_str in title
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_get_init_kwargs_from_with_title(self, program):
|
||||
title = "test title"
|
||||
kwargs = models.Episode.get_init_kwargs_from(program, title=title)
|
||||
assert title == kwargs["title"]
|
Reference in New Issue
Block a user