en cours - test model diffusion

This commit is contained in:
Laurent Van Wambeke 2023-05-12 15:08:20 +02:00
parent 7bf2989090
commit 8464a41da3
2 changed files with 190 additions and 319 deletions

View File

@ -107,37 +107,37 @@ def podcasts(episodes):
@pytest.fixture
def diffusions_time_variation(episodes):
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_diffusion = baker.make(
now_diff = baker.make(
models.Diffusion,
episode=random_episode,
start=now_datetime - timedelta(minutes=30),
end=now_datetime + timedelta(minutes=30),
)
after_diffusion = baker.make(
after_diff = baker.make(
models.Diffusion,
episode=random_episode,
start=now_datetime + timedelta(minutes=30),
end=now_datetime + timedelta(minutes=60),
)
tomorrow_diffusion = baker.make(
tomorrow_diff = baker.make(
models.Diffusion,
episode=random_episode,
start=tomorrow_datetime,
end=tomorrow_datetime + timedelta(minutes=30),
)
before_diffusion = baker.make(
before_diff = baker.make(
models.Diffusion,
episode=random_episode,
start=now_datetime - timedelta(minutes=60),
end=now_datetime - timedelta(minutes=30),
)
yesterday_diffusion = baker.make(
yesterday_diff = baker.make(
models.Diffusion,
episode=random_episode,
start=yesterday_datetime,
@ -146,50 +146,50 @@ def diffusions_time_variation(episodes):
return (
now_date,
now_datetime,
yesterday_diffusion,
before_diffusion,
now_diffusion,
after_diffusion,
tomorrow_diffusion,
yesterday_diff,
before_diff,
now_diff,
after_diff,
tomorrow_diff,
)
@pytest.fixture
def diffusions_episode_variation(episodes):
def diff_episode_var(episodes):
key_episode = episodes[1]
another_episode = episodes[2]
diffusions_with_the_key_episode = baker.make(
diff_with_key_episode = baker.make(
models.Diffusion, _quantity=3, episode=key_episode
)
diffusions_without_the_key_episode = baker.make(
diff_without_key_ep = baker.make(
models.Diffusion, _quantity=3, episode=another_episode
)
return (
key_episode,
another_episode,
diffusions_with_the_key_episode,
diffusions_without_the_key_episode,
diff_with_key_episode,
diff_without_key_ep,
)
@pytest.fixture
def diffusions_with_rerun(episodes, programs):
initial_diffusion = baker.make(
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_diffusion = baker.make(
rerun_diff = baker.make(
models.Diffusion,
program=programs[0],
episode=episodes[0],
initial=initial_diffusion,
initial=initial_diff,
)
return initial_diffusion, rerun_diffusion
return initial_diff, rerun_diff
@pytest.fixture
def diffusion(diffusions_with_rerun):
return diffusions_with_rerun[0]
def diff(diff_with_rerun):
return diff_with_rerun[0]

View File

@ -10,387 +10,258 @@ from aircox.models import Diffusion
class TestDiffusionQuerySet:
@pytest.mark.django_db
def test_episode_by_obj(self, diffusions_episode_variation):
(
key_episode,
_,
diffusions_with_the_key_episode,
diffusions_without_the_key_episode,
) = diffusions_episode_variation
def test_episode_by_obj(self, diff_episode_var):
key_episode = diff_episode_var[0]
diff_with_key_episode = diff_episode_var[2]
diff_without_key_episode = diff_episode_var[3]
result = Diffusion.objects.episode(episode=key_episode)
for diffusion in diffusions_with_the_key_episode:
assert diffusion in result
for diffusion in diffusions_without_the_key_episode:
assert diffusion not in result
assert all(diff in result for diff in diff_with_key_episode)
assert all(diff not in result for diff in diff_without_key_episode)
@pytest.mark.django_db
def test_episode_by_id(self, diffusions_episode_variation):
(
key_episode,
_,
diffusions_with_the_key_episode,
diffusions_without_the_key_episode,
) = diffusions_episode_variation
def test_episode_by_id(self, diff_episode_var):
key_episode = diff_episode_var[0]
diff_with_key_episode = diff_episode_var[2]
diff_without_key_episode = diff_episode_var[3]
result = Diffusion.objects.episode(id=key_episode.id)
for diffusion in diffusions_with_the_key_episode:
assert diffusion in result
for diffusion in diffusions_without_the_key_episode:
assert diffusion not in result
assert all(diff in result for diff in diff_with_key_episode)
assert all(diff not in result for diff in diff_without_key_episode)
@pytest.mark.django_db
def test_on_air(self, episodes):
for episode in episodes:
random_type = random.choice(
baker.make(
Diffusion,
episode=episode,
type=random.choice(
[Diffusion.TYPE_ON_AIR, Diffusion.TYPE_UNCONFIRMED]
),
)
assert all(
diff.type == Diffusion.TYPE_ON_AIR
for diff in Diffusion.objects.on_air()
)
baker.make(Diffusion, episode=episode, type=random_type)
result = Diffusion.objects.on_air()
for diffusion in result:
assert diffusion.type == Diffusion.TYPE_ON_AIR
assert diffusion.type != Diffusion.TYPE_UNCONFIRMED
# TODO test si il y a doublon qu'un seul objet soit récupéré.
# TODO test si il y a doublon qu'un seul objet soit récupéré.
@pytest.mark.django_db
def test_now_test(self, diffusions_time_variation):
now = tz.now()
(
_,
_,
_,
_,
now_diffusion,
_,
_,
) = diffusions_time_variation
result = Diffusion.objects.now(now=now, order=True)
assert len(result) == 1
assert result[0] == now_diffusion
assert result[0].start <= now <= result[0].end
def test_now_test(self, diff_time_var):
now_diff, result = diff_time_var[4], Diffusion.objects.now(now=tz.now(), order=True)
assert len(result) == 1 and result[0] == now_diff and now_diff.start <= tz.now() <= now_diff.end
@pytest.mark.django_db
def test_date_without_date_arg(self, diffusions_time_variation):
(
_,
_,
_,
before_diffusion,
now_diffusion,
after_diffusion,
_,
) = diffusions_time_variation
def test_date_without_date_arg(self, diff_time_var):
before_diff, now_diff, after_diff = diff_time_var[3:6]
result = Diffusion.objects.date()
assert len(result) == 3
assert result[0] == before_diffusion
assert result[1] == now_diffusion
assert result[2] == after_diffusion
assert before_diff, now_diff and after_diff in result
@pytest.mark.django_db
def test_date_with_date_arg(self, diffusions_time_variation):
today_date = datetime.date.today()
tomorrow_date = today_date + timedelta(days=1)
(
_,
_,
_,
_,
_,
_,
tomorrow_diffusion,
) = diffusions_time_variation
result = Diffusion.objects.date(date=tomorrow_date)
assert len(result) == 1
assert result[0] == tomorrow_diffusion
def test_date_with_date_arg(self, diff_time_var):
tomorrow_date = datetime.date.today() + timedelta(days=1)
tomorrow_diff = diff_time_var[6]
assert Diffusion.objects.date(date=tomorrow_date).count() == 1
assert Diffusion.objects.date(date=tomorrow_date)[0] == tomorrow_diff
@pytest.mark.django_db
def test_at_datetimeobj(self, diffusions_time_variation):
(
_,
now_datetime,
_,
_,
now_diffusion,
_,
_,
) = diffusions_time_variation
result = Diffusion.objects.at(date=now_datetime)
assert len(result) == 1
assert now_diffusion in result
def test_at_datetimeobj(self, diff_time_var):
now_datetime, now_diff = diff_time_var[1], diff_time_var[4]
assert Diffusion.objects.at(date=now_datetime).count() == 1
assert Diffusion.objects.at(date=now_datetime)[0] == now_diff
@pytest.mark.django_db
def test_at_dateobj(self, diffusions_time_variation):
(
now_date,
_,
_,
before_diffusion,
now_diffusion,
after_diffusion,
_,
) = diffusions_time_variation
def test_at_dateobj(self, diff_time_var):
now_date=diff_time_var[0]
before_diff=diff_time_var[3]
now_diff=diff_time_var[4]
after_diff=diff_time_var[5]
result = Diffusion.objects.at(date=now_date)
assert len(result) == 3
assert result[0] == before_diffusion
assert result[1] == now_diffusion
assert result[2] == after_diffusion
assert before_diff, now_diff and after_diff in result
@pytest.mark.django_db
def test_after_without_arg(self, diffusions_time_variation):
(
_,
_,
yesterday_diffusion,
before_diffusion,
now_diffusion,
after_diffusion,
tomorrow_diffusion,
) = diffusions_time_variation
from_now_diffusions = Diffusion.objects.after()
assert tomorrow_diffusion in from_now_diffusions
assert after_diffusion in from_now_diffusions
assert now_diffusion in from_now_diffusions
assert before_diffusion not in from_now_diffusions
assert yesterday_diffusion not in from_now_diffusions
def test_after_without_arg(self, diff_time_var):
yesterday_diff=diff_time_var[2]
before_diff=diff_time_var[3]
now_diff=diff_time_var[4]
after_diff=diff_time_var[5]
tomorrow_diff=diff_time_var[6]
from_now_diff = Diffusion.objects.after()
assert set([tomorrow_diff, after_diff, now_diff]).issubset(set(from_now_diff))
assert before_diff not in from_now_diff and yesterday_diff not in from_now_diff
@pytest.mark.django_db
def test_after_with_datetime_arg(self, diffusions_time_variation):
(
_,
now_datetime,
yesterday_diffusion,
before_diffusion,
now_diffusion,
after_diffusion,
tomorrow_diffusion,
) = diffusions_time_variation
from_now_diffusions = Diffusion.objects.after(date=now_datetime)
assert tomorrow_diffusion in from_now_diffusions
assert after_diffusion in from_now_diffusions
assert now_diffusion in from_now_diffusions
assert before_diffusion not in from_now_diffusions
assert yesterday_diffusion not in from_now_diffusions
def test_after_with_datetime_arg(self, diff_time_var):
now_datetime=diff_time_var[1]
yesterday_diff=diff_time_var[2]
before_diff=diff_time_var[3]
now_diff=diff_time_var[4]
after_diff=diff_time_var[5]
tomorrow_diff=diff_time_var[6]
from_now_diff = Diffusion.objects.after(date=now_datetime)
assert set([tomorrow_diff, after_diff, now_diff]).issubset(set(from_now_diff))
assert before_diff not in from_now_diff and yesterday_diff not in from_now_diff
@pytest.mark.django_db
def test_after_with_date_arg(self, diffusions_time_variation):
(
now_date,
_,
yesterday_diffusion,
before_diffusion,
now_diffusion,
after_diffusion,
tomorrow_diffusion,
) = diffusions_time_variation
from_today_diffusions = Diffusion.objects.after(date=now_date)
assert tomorrow_diffusion in from_today_diffusions
assert after_diffusion in from_today_diffusions
assert now_diffusion in from_today_diffusions
assert before_diffusion in from_today_diffusions
assert yesterday_diffusion not in from_today_diffusions
def test_after_with_date_arg(self, diff_time_var):
now_date=diff_time_var[0]
yesterday_diff=diff_time_var[2]
before_diff=diff_time_var[3]
now_diff=diff_time_var[4]
after_diff=diff_time_var[5]
tomorrow_diff=diff_time_var[6]
from_today_diff = Diffusion.objects.after(date=now_date)
assert set([tomorrow_diff, after_diff, now_diff, before_diff]).issubset(set(from_today_diff))
assert yesterday_diff not in from_today_diff
@pytest.mark.django_db
def test_before_without_arg(self, diffusions_time_variation):
(
_,
_,
yesterday_diffusion,
before_diffusion,
now_diffusion,
after_diffusion,
tomorrow_diffusion,
) = diffusions_time_variation
before_now_diffusions = Diffusion.objects.before()
def test_before_without_arg(self, diff_time_var):
yesterday_diff=diff_time_var[2]
before_diff=diff_time_var[3]
now_diff=diff_time_var[4]
after_diff=diff_time_var[5]
tomorrow_diff=diff_time_var[6]
before_now_diff = Diffusion.objects.before()
assert tomorrow_diff not in before_now_diff and after_diff not in before_now_diff
assert set([now_diff, before_diff, yesterday_diff]).issubset(set(before_now_diff))
assert tomorrow_diffusion not in before_now_diffusions
assert after_diffusion not in before_now_diffusions
assert now_diffusion in before_now_diffusions
assert before_diffusion in before_now_diffusions
assert yesterday_diffusion in before_now_diffusions
@pytest.mark.django_db
def test_before_with_datetime_arg(self, diffusions_time_variation):
(
_,
now_datetime,
yesterday_diffusion,
before_diffusion,
now_diffusion,
after_diffusion,
tomorrow_diffusion,
) = diffusions_time_variation
before_now_diffusions = Diffusion.objects.before(date=now_datetime)
assert tomorrow_diffusion not in before_now_diffusions
assert after_diffusion not in before_now_diffusions
assert now_diffusion in before_now_diffusions
assert before_diffusion in before_now_diffusions
assert yesterday_diffusion in before_now_diffusions
def test_before_with_datetime_arg(self, diff_time_var):
now_datetime=diff_time_var[1]
yesterday_diff=diff_time_var[2]
before_diff=diff_time_var[3]
now_diff=diff_time_var[4]
after_diff=diff_time_var[5]
tomorrow_diff=diff_time_var[6]
before_now_diff = Diffusion.objects.before(date=now_datetime)
assert tomorrow_diff not in before_now_diff and after_diff not in before_now_diff
assert set([now_diff, before_diff, yesterday_diff]).issubset(set(before_now_diff))
@pytest.mark.django_db
def test_before_with_date_arg(self, diffusions_time_variation):
(
now_date,
_,
yesterday_diffusion,
before_diffusion,
now_diffusion,
after_diffusion,
tomorrow_diffusion,
) = diffusions_time_variation
before_today_diffusions = Diffusion.objects.before(date=now_date)
assert tomorrow_diffusion not in before_today_diffusions
assert after_diffusion not in before_today_diffusions
assert now_diffusion not in before_today_diffusions
assert before_diffusion not in before_today_diffusions
assert yesterday_diffusion in before_today_diffusions
def test_before_with_date_arg(self, diff_time_var):
now_date=diff_time_var[0]
yesterday_diff=diff_time_var[2]
before_diff=diff_time_var[3]
now_diff=diff_time_var[4]
after_diff=diff_time_var[5]
tomorrow_diff=diff_time_var[6]
before_today_diff = Diffusion.objects.before(date=now_date)
assert all(diff not in before_today_diff for diff in [tomorrow_diff, after_diff, now_diff])
assert yesterday_diff in before_today_diff
@pytest.mark.django_db
def test_range(self, episodes, diffusions_time_variation):
(
_,
_,
yesterday_diffusion,
before_diffusion,
now_diffusion,
after_diffusion,
tomorrow_diffusion,
) = diffusions_time_variation
start = before_diffusion.start
end = after_diffusion.end
overlaping_start_diffusion = baker.make(
Diffusion,
episode=episodes[0],
start=start - timedelta(minutes=30),
end=end,
)
overlaping_end_diffusion = baker.make(
Diffusion,
episode=episodes[0],
start=start,
end=end + timedelta(minutes=30),
)
range_diffusion = Diffusion.objects.range(start=start, end=end)
assert before_diffusion in range_diffusion
assert after_diffusion in range_diffusion
assert now_diffusion in range_diffusion
assert overlaping_start_diffusion not in range_diffusion
assert overlaping_end_diffusion not in range_diffusion
assert tomorrow_diffusion not in range_diffusion
assert yesterday_diffusion not in range_diffusion
def test_range(self, episodes, diff_time_var):
start, end = diff_time_var[3].start, diff_time_var[5].end
yesterday_diff, before_diff, now_diff, after_diff, tomorrow_diff = diff_time_var[2:7]
overlaping_start_diff = baker.make(Diffusion, episode=episodes[0], start=start - timedelta(minutes=30), end=end)
overlaping_end_diff = baker.make(Diffusion, episode=episodes[0], start=start, end=end + timedelta(minutes=30))
range_diff = Diffusion.objects.range(start=start, end=end)
assert set([before_diff, after_diff, now_diff]).issubset(range_diff)
assert not set([overlaping_start_diff, overlaping_end_diff, tomorrow_diff, yesterday_diff]).intersection(range_diff)
#TODO CLEAN ce qu'il y a en dessous et terminer les tests de diffusion.py
class TestDiffusion:
@pytest.mark.django_db
def test__str__initial_diffusion(self, diffusions_with_rerun):
def test__str__initial_diff(self, diff_with_rerun):
(
initial_diffusion,
initial_diff,
_,
) = diffusions_with_rerun
initial_diffusion.episode.title = "Episode title"
initial_diffusion.start = datetime.datetime(
) = diff_with_rerun
initial_diff.episode.title = "Episode title"
initial_diff.start = datetime.datetime(
2023, 5, 12, 13, 0, tzinfo=pytz.UTC
)
assert (
initial_diffusion.__str__()
== "Episode title - 2023/05/12 13:00+0000"
initial_diff.__str__() == "Episode title - 2023/05/12 13:00+0000"
)
@pytest.mark.django_db
def test__str__rerun_diffusion(self, diffusions_with_rerun):
def test__str__rerun_diff(self, diff_with_rerun):
(
initial_diffusion,
rerun_diffusion,
) = diffusions_with_rerun
initial_diffusion.episode.title = "Episode title"
rerun_diffusion.start = datetime.datetime(
initial_diff,
rerun_diff,
) = diff_with_rerun
initial_diff.episode.title = "Episode title"
rerun_diff.start = datetime.datetime(
2023, 5, 12, 13, 0, tzinfo=pytz.UTC
)
assert (
rerun_diffusion.__str__()
rerun_diff.__str__()
== "Episode title - 2023/05/12 13:00+0000 (rerun)"
)
# 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
# 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).
""" 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"""
# si diff 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 rediff (qui représente l'objet diff 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 diff initiale"""
@pytest.mark.django_db
def test_save_rerun_diffusion(self, episodes, diffusions_with_rerun):
def test_save_rerun_diff(self, episodes, diff_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.program == episodes[1].program
initial_diff,
rerun_diff,
) = diff_with_rerun
initial_diff.episode = episodes[1]
initial_diff.program = episodes[1].program
initial_diff.save()
assert rerun_diff.initial.episode == episodes[1]
assert rerun_diff.initial.program == episodes[1].program
@pytest.mark.django_db
def test_save_rerun(self, diffusions_with_rerun):
def test_save_rerun(self, diff_with_rerun):
(
initial_diffusion,
rerun_diffusion,
) = diffusions_with_rerun
rerun_diffusion.save_rerun()
assert rerun_diffusion.episode == initial_diffusion.episode
initial_diff,
rerun_diff,
) = diff_with_rerun
rerun_diff.save_rerun()
assert rerun_diff.episode == initial_diff.episode
@pytest.mark.django_db
def test_save_initial(self, diffusions_with_rerun):
def test_save_initial(self, diff_with_rerun):
(
initial_diffusion,
rerun_diffusion,
) = diffusions_with_rerun
initial_diffusion.save_initial()
assert initial_diffusion.program == initial_diffusion.episode.program
initial_diff,
rerun_diff,
) = diff_with_rerun
initial_diff.save_initial()
assert initial_diff.program == initial_diff.episode.program
@pytest.mark.django_db
def test_duration(self, diffusion):
assert diffusion.duration == datetime.timedelta(seconds=1800)
def test_duration(self, diff):
assert diff.duration == datetime.timedelta(seconds=1800)
@pytest.mark.django_db
def test_date(self, diffusion):
assert diffusion.date == datetime.date(2023, 5, 12)
def test_date(self, diff):
assert diff.date == datetime.date(2023, 5, 12)
@pytest.mark.django_db
def test_local_start(self, diffusion):
assert diffusion.local_start == datetime.datetime(
def test_local_start(self, diff):
assert diff.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(
def test_local_end(self, diff):
assert diff.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
def test_is_now(self, diff):
diff.type = Diffusion.TYPE_ON_AIR
diff.start = tz.now()
diff.end = tz.now() + timedelta(minutes=30)
assert diff.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
def test_is_live(self, diff):
diff.type = Diffusion.TYPE_ON_AIR
diff.episode.sound_set == None
assert diff.is_live == True
# on ne peut pas changer l'heure de diffusion ?
# on ne peut pas changer l'heure de diff ?
# souci avec save
# un autre souci ailleurs : est overlaping devrait être testé partout aussi ?