196 lines
4.6 KiB
Python
196 lines
4.6 KiB
Python
from datetime import time, timedelta
|
|
import itertools
|
|
import random
|
|
import datetime
|
|
from django.utils import timezone as tz
|
|
import pytz
|
|
|
|
import pytest
|
|
from model_bakery import baker
|
|
|
|
from aircox import models
|
|
|
|
|
|
@pytest.fixture
|
|
def stations():
|
|
return baker.make(models.Station, _quantity=2)
|
|
|
|
|
|
@pytest.fixture
|
|
def programs(stations):
|
|
items = list(
|
|
itertools.chain(
|
|
*(
|
|
baker.make(
|
|
models.Program, station=station, cover=None, _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 diff_time_var(episodes):
|
|
random_episode = random.choice([episodes[0], episodes[1], episodes[2]])
|
|
now_date = datetime.date.today()
|
|
now_datetime = tz.now()
|
|
tomorrow_datetime = now_datetime + timedelta(hours=25)
|
|
yesterday_datetime = now_datetime - timedelta(hours=25)
|
|
now_diff = baker.make(
|
|
models.Diffusion,
|
|
episode=random_episode,
|
|
start=now_datetime - timedelta(minutes=30),
|
|
end=now_datetime + timedelta(minutes=30),
|
|
)
|
|
after_diff = baker.make(
|
|
models.Diffusion,
|
|
episode=random_episode,
|
|
start=now_datetime + timedelta(minutes=30),
|
|
end=now_datetime + timedelta(minutes=60),
|
|
)
|
|
tomorrow_diff = baker.make(
|
|
models.Diffusion,
|
|
episode=random_episode,
|
|
start=tomorrow_datetime,
|
|
end=tomorrow_datetime + timedelta(minutes=30),
|
|
)
|
|
before_diff = baker.make(
|
|
models.Diffusion,
|
|
episode=random_episode,
|
|
start=now_datetime - timedelta(minutes=60),
|
|
end=now_datetime - timedelta(minutes=30),
|
|
)
|
|
yesterday_diff = baker.make(
|
|
models.Diffusion,
|
|
episode=random_episode,
|
|
start=yesterday_datetime,
|
|
end=yesterday_datetime + timedelta(minutes=30),
|
|
)
|
|
return (
|
|
now_date,
|
|
now_datetime,
|
|
yesterday_diff,
|
|
before_diff,
|
|
now_diff,
|
|
after_diff,
|
|
tomorrow_diff,
|
|
)
|
|
|
|
|
|
@pytest.fixture
|
|
def diff_episode_var(episodes):
|
|
key_episode = episodes[1]
|
|
another_episode = episodes[2]
|
|
diff_with_key_episode = baker.make(
|
|
models.Diffusion, _quantity=3, episode=key_episode
|
|
)
|
|
diff_without_key_ep = baker.make(
|
|
models.Diffusion, _quantity=3, episode=another_episode
|
|
)
|
|
return (
|
|
key_episode,
|
|
another_episode,
|
|
diff_with_key_episode,
|
|
diff_without_key_ep,
|
|
)
|
|
|
|
|
|
@pytest.fixture
|
|
def diff_with_rerun(episodes, programs):
|
|
initial_diff = baker.make(
|
|
models.Diffusion,
|
|
program=programs[0],
|
|
episode=episodes[0],
|
|
start=datetime.datetime(2023, 5, 12, 13, 0, tzinfo=pytz.UTC),
|
|
end=datetime.datetime(2023, 5, 12, 13, 30, tzinfo=pytz.UTC),
|
|
)
|
|
rerun_diff = baker.make(
|
|
models.Diffusion,
|
|
program=programs[0],
|
|
episode=episodes[0],
|
|
initial=initial_diff,
|
|
)
|
|
return initial_diff, rerun_diff
|
|
|
|
|
|
@pytest.fixture
|
|
def diff(diff_with_rerun):
|
|
return diff_with_rerun[0]
|