en cours - test model diffusion
This commit is contained in:
parent
2a034fc467
commit
7bf2989090
|
@ -1,5 +1,9 @@
|
||||||
from datetime import time, timedelta
|
from datetime import time, timedelta
|
||||||
import itertools
|
import itertools
|
||||||
|
import random
|
||||||
|
import datetime
|
||||||
|
from django.utils import timezone as tz
|
||||||
|
import pytz
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from model_bakery import baker
|
from model_bakery import baker
|
||||||
|
@ -100,3 +104,92 @@ def podcasts(episodes):
|
||||||
sound.file = f"test_sound_{episode.pk}_{i}.mp3"
|
sound.file = f"test_sound_{episode.pk}_{i}.mp3"
|
||||||
items += sounds
|
items += sounds
|
||||||
return items
|
return items
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def diffusions_time_variation(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_diffusion = baker.make(
|
||||||
|
models.Diffusion,
|
||||||
|
episode=random_episode,
|
||||||
|
start=now_datetime - timedelta(minutes=30),
|
||||||
|
end=now_datetime + timedelta(minutes=30),
|
||||||
|
)
|
||||||
|
after_diffusion = baker.make(
|
||||||
|
models.Diffusion,
|
||||||
|
episode=random_episode,
|
||||||
|
start=now_datetime + timedelta(minutes=30),
|
||||||
|
end=now_datetime + timedelta(minutes=60),
|
||||||
|
)
|
||||||
|
tomorrow_diffusion = baker.make(
|
||||||
|
models.Diffusion,
|
||||||
|
episode=random_episode,
|
||||||
|
start=tomorrow_datetime,
|
||||||
|
end=tomorrow_datetime + timedelta(minutes=30),
|
||||||
|
)
|
||||||
|
before_diffusion = baker.make(
|
||||||
|
models.Diffusion,
|
||||||
|
episode=random_episode,
|
||||||
|
start=now_datetime - timedelta(minutes=60),
|
||||||
|
end=now_datetime - timedelta(minutes=30),
|
||||||
|
)
|
||||||
|
yesterday_diffusion = baker.make(
|
||||||
|
models.Diffusion,
|
||||||
|
episode=random_episode,
|
||||||
|
start=yesterday_datetime,
|
||||||
|
end=yesterday_datetime + timedelta(minutes=30),
|
||||||
|
)
|
||||||
|
return (
|
||||||
|
now_date,
|
||||||
|
now_datetime,
|
||||||
|
yesterday_diffusion,
|
||||||
|
before_diffusion,
|
||||||
|
now_diffusion,
|
||||||
|
after_diffusion,
|
||||||
|
tomorrow_diffusion,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def diffusions_episode_variation(episodes):
|
||||||
|
key_episode = episodes[1]
|
||||||
|
another_episode = episodes[2]
|
||||||
|
diffusions_with_the_key_episode = baker.make(
|
||||||
|
models.Diffusion, _quantity=3, episode=key_episode
|
||||||
|
)
|
||||||
|
diffusions_without_the_key_episode = baker.make(
|
||||||
|
models.Diffusion, _quantity=3, episode=another_episode
|
||||||
|
)
|
||||||
|
return (
|
||||||
|
key_episode,
|
||||||
|
another_episode,
|
||||||
|
diffusions_with_the_key_episode,
|
||||||
|
diffusions_without_the_key_episode,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def diffusions_with_rerun(episodes, programs):
|
||||||
|
initial_diffusion = 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_diffusion = baker.make(
|
||||||
|
models.Diffusion,
|
||||||
|
program=programs[0],
|
||||||
|
episode=episodes[0],
|
||||||
|
initial=initial_diffusion,
|
||||||
|
)
|
||||||
|
return initial_diffusion, rerun_diffusion
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def diffusion(diffusions_with_rerun):
|
||||||
|
return diffusions_with_rerun[0]
|
||||||
|
|
|
@ -5,73 +5,7 @@ from model_bakery import baker
|
||||||
from django.utils import timezone as tz
|
from django.utils import timezone as tz
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
import pytz
|
import pytz
|
||||||
from aircox.models import Diffusion, Episode
|
from aircox.models import Diffusion
|
||||||
|
|
||||||
#TODO fixture for rerun diffusion
|
|
||||||
@pytest.fixture
|
|
||||||
def diffusions_time_variation(episodes):
|
|
||||||
random_episode = random.choice([episodes[1], episodes[0], 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_diffusion = baker.make(
|
|
||||||
Diffusion,
|
|
||||||
episode=random_episode,
|
|
||||||
start=now_datetime - timedelta(minutes=30),
|
|
||||||
end=now_datetime + timedelta(minutes=30),
|
|
||||||
)
|
|
||||||
after_diffusion = baker.make(
|
|
||||||
Diffusion,
|
|
||||||
episode=random_episode,
|
|
||||||
start=now_datetime + timedelta(minutes=30),
|
|
||||||
end=now_datetime + timedelta(minutes=60),
|
|
||||||
)
|
|
||||||
tomorrow_diffusion = baker.make(
|
|
||||||
Diffusion,
|
|
||||||
episode=random_episode,
|
|
||||||
start=tomorrow_datetime,
|
|
||||||
end=tomorrow_datetime + timedelta(minutes=30),
|
|
||||||
)
|
|
||||||
before_diffusion = baker.make(
|
|
||||||
Diffusion,
|
|
||||||
episode=random_episode,
|
|
||||||
start=now_datetime - timedelta(minutes=60),
|
|
||||||
end=now_datetime - timedelta(minutes=30),
|
|
||||||
)
|
|
||||||
yesterday_diffusion = baker.make(
|
|
||||||
Diffusion,
|
|
||||||
episode=random_episode,
|
|
||||||
start=yesterday_datetime,
|
|
||||||
end=yesterday_datetime + timedelta(minutes=30),
|
|
||||||
)
|
|
||||||
return (
|
|
||||||
now_date,
|
|
||||||
now_datetime,
|
|
||||||
yesterday_diffusion,
|
|
||||||
before_diffusion,
|
|
||||||
now_diffusion,
|
|
||||||
after_diffusion,
|
|
||||||
tomorrow_diffusion,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
|
||||||
def diffusions_episode_variation(episodes):
|
|
||||||
key_episode = episodes[1]
|
|
||||||
another_episode = episodes[2]
|
|
||||||
diffusions_with_the_key_episode = baker.make(
|
|
||||||
Diffusion, _quantity=3, episode=key_episode
|
|
||||||
)
|
|
||||||
diffusions_without_the_key_episode = baker.make(
|
|
||||||
Diffusion, _quantity=3, episode=another_episode
|
|
||||||
)
|
|
||||||
return (
|
|
||||||
key_episode,
|
|
||||||
another_episode,
|
|
||||||
diffusions_with_the_key_episode,
|
|
||||||
diffusions_without_the_key_episode,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class TestDiffusionQuerySet:
|
class TestDiffusionQuerySet:
|
||||||
|
@ -118,11 +52,7 @@ class TestDiffusionQuerySet:
|
||||||
assert diffusion.type == Diffusion.TYPE_ON_AIR
|
assert diffusion.type == Diffusion.TYPE_ON_AIR
|
||||||
assert diffusion.type != Diffusion.TYPE_UNCONFIRMED
|
assert diffusion.type != Diffusion.TYPE_UNCONFIRMED
|
||||||
|
|
||||||
# la méthode "now" filtre les diffusions en cours d'un moment précis.
|
# TODO test si il y a doublon qu'un seul objet soit récupéré.
|
||||||
# elle prend en compte un objet datetime (date + heure)
|
|
||||||
# les diffusions en cours sont définie en fonction de l'argument "now" ou de l'heure actuelle si now=None.
|
|
||||||
# la méthode distinct élimine les doublons de diffusions (si ils ont des valeurs identiques pour tous les champs de la db)
|
|
||||||
# TODO test si il y a doublon qu'un seul objet soit récupéré.
|
|
||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
def test_now_test(self, diffusions_time_variation):
|
def test_now_test(self, diffusions_time_variation):
|
||||||
now = tz.now()
|
now = tz.now()
|
||||||
|
@ -141,11 +71,6 @@ class TestDiffusionQuerySet:
|
||||||
assert result[0] == now_diffusion
|
assert result[0] == now_diffusion
|
||||||
assert result[0].start <= now <= result[0].end
|
assert result[0].start <= now <= result[0].end
|
||||||
|
|
||||||
# méthode date filtre les diffusions en cours d'une date précise.
|
|
||||||
# elle ne prend pas en compte un objet datetime mais un "objet date" uniquement
|
|
||||||
# elle crée deux objets datetime (start and end) à partir de l'argument "date" (if none = today)
|
|
||||||
# elle utilise la méthode "combine" de la classe "datetime" pour créer ces deux objets à partir de la date
|
|
||||||
# elle filtre ensuite les diffusions qui ont lieu entre "start" et "end".
|
|
||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
def test_date_without_date_arg(self, diffusions_time_variation):
|
def test_date_without_date_arg(self, diffusions_time_variation):
|
||||||
(
|
(
|
||||||
|
@ -182,9 +107,6 @@ class TestDiffusionQuerySet:
|
||||||
assert len(result) == 1
|
assert len(result) == 1
|
||||||
assert result[0] == tomorrow_diffusion
|
assert result[0] == tomorrow_diffusion
|
||||||
|
|
||||||
# la méthode at récupère les diffusions à une date donnée.
|
|
||||||
# elle utilise la méthode now si la date est un objet datetime
|
|
||||||
# elle utilise la méthode date si la date est un objet date
|
|
||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
def test_at_datetimeobj(self, diffusions_time_variation):
|
def test_at_datetimeobj(self, diffusions_time_variation):
|
||||||
(
|
(
|
||||||
|
@ -358,7 +280,6 @@ class TestDiffusionQuerySet:
|
||||||
start=start,
|
start=start,
|
||||||
end=end + timedelta(minutes=30),
|
end=end + timedelta(minutes=30),
|
||||||
)
|
)
|
||||||
|
|
||||||
range_diffusion = Diffusion.objects.range(start=start, end=end)
|
range_diffusion = Diffusion.objects.range(start=start, end=end)
|
||||||
|
|
||||||
assert before_diffusion in range_diffusion
|
assert before_diffusion in range_diffusion
|
||||||
|
@ -372,56 +293,104 @@ class TestDiffusionQuerySet:
|
||||||
|
|
||||||
class TestDiffusion:
|
class TestDiffusion:
|
||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
def test__str__initial_diffusion(self, programs):
|
def test__str__initial_diffusion(self, diffusions_with_rerun):
|
||||||
episode = baker.make(
|
(
|
||||||
Episode, program=programs[0], title="Episode title"
|
initial_diffusion,
|
||||||
|
_,
|
||||||
|
) = diffusions_with_rerun
|
||||||
|
initial_diffusion.episode.title = "Episode title"
|
||||||
|
initial_diffusion.start = datetime.datetime(
|
||||||
|
2023, 5, 12, 13, 0, tzinfo=pytz.UTC
|
||||||
)
|
)
|
||||||
diffusion = baker.make(
|
assert (
|
||||||
Diffusion,
|
initial_diffusion.__str__()
|
||||||
episode=episode,
|
== "Episode title - 2023/05/12 13:00+0000"
|
||||||
start=datetime.datetime(2023, 5, 12, 13, 0, tzinfo=pytz.UTC),
|
|
||||||
)
|
)
|
||||||
expected_str = "Episode title - 2023/05/12 13:00+0000"
|
|
||||||
returned_str = diffusion.__str__()
|
|
||||||
|
|
||||||
assert expected_str == returned_str
|
|
||||||
|
|
||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
def test__str__rerun_diffusion(self, programs):
|
def test__str__rerun_diffusion(self, diffusions_with_rerun):
|
||||||
episode = baker.make(
|
(
|
||||||
Episode, program=programs[0], title="Episode title"
|
initial_diffusion,
|
||||||
|
rerun_diffusion,
|
||||||
|
) = diffusions_with_rerun
|
||||||
|
initial_diffusion.episode.title = "Episode title"
|
||||||
|
rerun_diffusion.start = datetime.datetime(
|
||||||
|
2023, 5, 12, 13, 0, tzinfo=pytz.UTC
|
||||||
)
|
)
|
||||||
initial_diffusion = baker.make(Diffusion, episode=episode)
|
assert (
|
||||||
rerun_diffusion = baker.make(
|
rerun_diffusion.__str__()
|
||||||
Diffusion,
|
== "Episode title - 2023/05/12 13:00+0000 (rerun)"
|
||||||
episode=episode,
|
|
||||||
start=datetime.datetime(2023, 5, 12, 13, 0, tzinfo=pytz.UTC),
|
|
||||||
initial=initial_diffusion,
|
|
||||||
)
|
)
|
||||||
expected_str = "Episode title - 2023/05/12 13:00+0000 (rerun)"
|
|
||||||
returned_str = rerun_diffusion.__str__()
|
|
||||||
|
|
||||||
assert expected_str == returned_str
|
|
||||||
|
|
||||||
# dans la méthode self._initial[valeur] est un dictionnaire qui stocke les valeurs initiales des champs de l'objet au moment de sa création
|
# dans la méthode self._initial[valeur] est un dictionnaire qui stocke les valeurs initiales des champs de l'objet au moment de sa création
|
||||||
# save
|
# save
|
||||||
# si diffusion est initial et si son épisode a été modifié depuis la création initiale
|
# si diffusion est initial et si son épisode a été modifié depuis la création initiale
|
||||||
# la méthode save update l'épisode et le programme sur paramètre initial (rerun_set) de la rediffusion (qui représente l'objet diffusion initial).
|
# la méthode save update l'épisode et le programme sur paramètre initial (rerun_set) de la rediffusion (qui représente l'objet diffusion initial).
|
||||||
""" je ne comprends pas rerun_set.update, que la méthode l'update ou pas, on accède quand même à l'épisode mis à jour sur la diffusion initiale"""
|
""" je ne comprends pas rerun_set.update, que la méthode l'update ou pas, on accède quand même à l'épisode mis à jour sur la diffusion initiale"""
|
||||||
@pytest.mark.django_db
|
|
||||||
def test_save_rerun_diffusion(self, episodes, programs):
|
|
||||||
initial_diffusion = baker.make(
|
|
||||||
Diffusion, program=programs[0], episode=episodes[0]
|
|
||||||
)
|
|
||||||
rerun_diffusion = baker.make(
|
|
||||||
Diffusion,
|
|
||||||
program=programs[0],
|
|
||||||
episode=episodes[0],
|
|
||||||
initial=initial_diffusion,
|
|
||||||
)
|
|
||||||
initial_diffusion.episode = episodes[1]
|
|
||||||
initial_diffusion.program = programs[1]
|
|
||||||
initial_diffusion.save()
|
|
||||||
|
|
||||||
|
@pytest.mark.django_db
|
||||||
|
def test_save_rerun_diffusion(self, episodes, diffusions_with_rerun):
|
||||||
|
(
|
||||||
|
initial_diffusion,
|
||||||
|
rerun_diffusion,
|
||||||
|
) = diffusions_with_rerun
|
||||||
|
initial_diffusion.episode = episodes[1]
|
||||||
|
initial_diffusion.program = episodes[1].program
|
||||||
|
initial_diffusion.save()
|
||||||
assert rerun_diffusion.initial.episode == episodes[1]
|
assert rerun_diffusion.initial.episode == episodes[1]
|
||||||
assert rerun_diffusion.initial.program == programs[1]
|
assert rerun_diffusion.initial.program == episodes[1].program
|
||||||
|
|
||||||
|
@pytest.mark.django_db
|
||||||
|
def test_save_rerun(self, diffusions_with_rerun):
|
||||||
|
(
|
||||||
|
initial_diffusion,
|
||||||
|
rerun_diffusion,
|
||||||
|
) = diffusions_with_rerun
|
||||||
|
rerun_diffusion.save_rerun()
|
||||||
|
assert rerun_diffusion.episode == initial_diffusion.episode
|
||||||
|
|
||||||
|
@pytest.mark.django_db
|
||||||
|
def test_save_initial(self, diffusions_with_rerun):
|
||||||
|
(
|
||||||
|
initial_diffusion,
|
||||||
|
rerun_diffusion,
|
||||||
|
) = diffusions_with_rerun
|
||||||
|
initial_diffusion.save_initial()
|
||||||
|
assert initial_diffusion.program == initial_diffusion.episode.program
|
||||||
|
|
||||||
|
@pytest.mark.django_db
|
||||||
|
def test_duration(self, diffusion):
|
||||||
|
assert diffusion.duration == datetime.timedelta(seconds=1800)
|
||||||
|
|
||||||
|
@pytest.mark.django_db
|
||||||
|
def test_date(self, diffusion):
|
||||||
|
assert diffusion.date == datetime.date(2023, 5, 12)
|
||||||
|
|
||||||
|
@pytest.mark.django_db
|
||||||
|
def test_local_start(self, diffusion):
|
||||||
|
assert diffusion.local_start == datetime.datetime(
|
||||||
|
2023, 5, 12, 13, 00, tzinfo=pytz.UTC
|
||||||
|
)
|
||||||
|
|
||||||
|
@pytest.mark.django_db
|
||||||
|
def test_local_end(self, diffusion):
|
||||||
|
assert diffusion.local_end == datetime.datetime(
|
||||||
|
2023, 5, 12, 13, 30, tzinfo=pytz.UTC
|
||||||
|
)
|
||||||
|
|
||||||
|
@pytest.mark.django_db
|
||||||
|
def test_is_now(self, diffusion):
|
||||||
|
diffusion.type = Diffusion.TYPE_ON_AIR
|
||||||
|
diffusion.start = tz.now()
|
||||||
|
diffusion.end = tz.now() + timedelta(minutes=30)
|
||||||
|
assert diffusion.is_now == True
|
||||||
|
|
||||||
|
@pytest.mark.django_db
|
||||||
|
def test_is_live(self, diffusion):
|
||||||
|
diffusion.type = Diffusion.TYPE_ON_AIR
|
||||||
|
diffusion.episode.sound_set == None
|
||||||
|
assert diffusion.is_live == True
|
||||||
|
|
||||||
|
# on ne peut pas changer l'heure de diffusion ?
|
||||||
|
# souci avec save
|
||||||
|
# un autre souci ailleurs : est overlaping devrait être testé partout aussi ?
|
||||||
|
|
Loading…
Reference in New Issue
Block a user