forked from rc/aircox

- Add configuration files for packaging - Precommit now uses ruff Co-authored-by: bkfox <thomas bkfox net> Reviewed-on: rc/aircox#127
160 lines
3.6 KiB
Python
160 lines
3.6 KiB
Python
from datetime import time, timedelta
|
|
import itertools
|
|
import logging
|
|
|
|
from django.conf import settings
|
|
from django.contrib.auth.models import User
|
|
from django.test import RequestFactory
|
|
|
|
import pytest
|
|
from model_bakery import baker
|
|
|
|
from aircox import models
|
|
from aircox.test import Interface
|
|
|
|
|
|
req_factory = RequestFactory()
|
|
"""Request Factory used among different tests."""
|
|
|
|
|
|
settings.ALLOWED_HOSTS = list(settings.ALLOWED_HOSTS) + [
|
|
"sub.server.org",
|
|
"server.org",
|
|
]
|
|
|
|
|
|
@pytest.fixture
|
|
def staff_user():
|
|
return baker.make(User, is_active=True, is_staff=True)
|
|
|
|
|
|
@pytest.fixture
|
|
def logger():
|
|
logger = Interface(logging, {"info": None, "debug": None, "error": None, "warning": None})
|
|
return logger
|
|
|
|
|
|
@pytest.fixture
|
|
def station():
|
|
return baker.make(
|
|
models.Station,
|
|
hosts="server.org",
|
|
audio_streams="stream 1\nstream 2",
|
|
default=True,
|
|
)
|
|
|
|
|
|
@pytest.fixture
|
|
def sub_station():
|
|
"""Non-default station."""
|
|
return baker.make(models.Station, hosts="sub.server.org", default=False)
|
|
|
|
|
|
@pytest.fixture
|
|
def stations(station, sub_station):
|
|
return [station, sub_station]
|
|
|
|
|
|
@pytest.fixture
|
|
def programs(stations):
|
|
items = list(
|
|
itertools.chain(
|
|
*(
|
|
baker.make(
|
|
models.Program,
|
|
station=station,
|
|
cover=None,
|
|
status=models.Program.STATUS_PUBLISHED,
|
|
_quantity=2,
|
|
)
|
|
for station in stations
|
|
)
|
|
)
|
|
)
|
|
for item in items:
|
|
item.save()
|
|
return items
|
|
|
|
|
|
@pytest.fixture
|
|
def program(programs):
|
|
return programs[0]
|
|
|
|
|
|
@pytest.fixture
|
|
def sched_initials(programs):
|
|
# use concrete class; timezone is provided in order to ensure DST
|
|
items = [
|
|
baker.prepare(
|
|
models.Schedule,
|
|
program=program,
|
|
time=time(16, 00),
|
|
timezone="Europe/Brussels",
|
|
)
|
|
for program in programs
|
|
]
|
|
models.Schedule.objects.bulk_create(items)
|
|
return items
|
|
|
|
|
|
@pytest.fixture
|
|
def sched_reruns(sched_initials):
|
|
# use concrete class
|
|
items = [
|
|
baker.prepare(
|
|
models.Schedule,
|
|
initial=initial,
|
|
program=initial.program,
|
|
date=initial.date,
|
|
time=(initial.start + timedelta(hours=1)).time(),
|
|
)
|
|
for initial in sched_initials
|
|
]
|
|
models.Schedule.objects.bulk_create(items)
|
|
return items
|
|
|
|
|
|
@pytest.fixture
|
|
def schedules(sched_initials, sched_reruns):
|
|
return sched_initials + sched_reruns
|
|
|
|
|
|
@pytest.fixture
|
|
def episodes(programs):
|
|
return [baker.make(models.Episode, parent=program, cover=None) for program in programs]
|
|
|
|
|
|
@pytest.fixture
|
|
def episode(episodes):
|
|
return episodes[0]
|
|
|
|
|
|
@pytest.fixture
|
|
def podcasts(episodes):
|
|
items = []
|
|
for episode in episodes:
|
|
sounds = baker.prepare(
|
|
models.Sound,
|
|
episode=episode,
|
|
program=episode.program,
|
|
is_public=True,
|
|
_quantity=2,
|
|
)
|
|
for i, sound in enumerate(sounds):
|
|
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)
|
|
|
|
|
|
@pytest.fixture
|
|
def tracks(episode, sound):
|
|
items = [baker.prepare(models.Track, episode=episode, position=i, timestamp=i * 60) for i in range(0, 3)]
|
|
items += [baker.prepare(models.Track, sound=sound, position=i, timestamp=i * 60) for i in range(0, 3)]
|
|
models.Track.objects.bulk_create(items)
|
|
return items
|