aircox-radiocampus/aircox/tests/conftest.py
Thomas Kairos f7a61fe6c0 Feat: packaging (#127)
- Add configuration files for packaging
- Precommit now uses ruff

Co-authored-by: bkfox <thomas bkfox net>
Reviewed-on: rc/aircox#127
2023-10-11 10:58:34 +02:00

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