diff --git a/aircox/tests/models/test_diffusion.py b/aircox/tests/models/test_diffusion.py index feb8d6c..d6a6608 100644 --- a/aircox/tests/models/test_diffusion.py +++ b/aircox/tests/models/test_diffusion.py @@ -4,21 +4,69 @@ import datetime from model_bakery import baker from django.utils import timezone as tz from datetime import timedelta +import pytz from aircox.models import Diffusion -#TODO créer fixtures pour éviter toutes ces lignes pour créer les fake db. +#TODO déplacer fixutre dans conftest.py / rechercher si il y a une méthode plus lisible que celle utilisée dans ce test pour utiliser ces deux fixtures. +@pytest.fixture +def diffusions_time_variation(episodes): + random_episode = random.choice([episodes[1], episodes[0], episodes[2]]) + now = tz.now() + now_date = datetime.date.today() + now_datetime = tz.now() + tomorrow_datetime = now + timedelta(hours=25) + yesterday_datetime = now - timedelta(hours=25) + now_diffusion = baker.make( + Diffusion, + episode=random_episode, + start=now - timedelta(minutes=30), + end=now + timedelta(minutes=30), + ) + after_diffusion = baker.make( + Diffusion, + episode=random_episode, + start=now + timedelta(minutes=30), + end=now + 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 - timedelta(minutes=60), + end=now - 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: @pytest.mark.django_db - def test_episode_by_obj(self, 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 - ) + def test_episode_by_obj(self, diffusions_episode_variation): + key_episode = diffusions_episode_variation[0] + another_episode = diffusions_episode_variation[1] + diffusions_with_the_key_episode = diffusions_episode_variation[2] + diffusions_without_the_key_episode = diffusions_episode_variation[3] result = Diffusion.objects.episode(episode=key_episode) for diffusion in diffusions_with_the_key_episode: @@ -27,15 +75,11 @@ class TestDiffusionQuerySet: assert diffusion not in result @pytest.mark.django_db - def test_episode_by_id(self, 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 - ) + def test_episode_by_id(self, diffusions_episode_variation): + key_episode = diffusions_episode_variation[0] + another_episode = diffusions_episode_variation[1] + diffusions_with_the_key_episode = diffusions_episode_variation[2] + diffusions_without_the_key_episode = diffusions_episode_variation[3] result = Diffusion.objects.episode(id=key_episode.id) for diffusion in diffusions_with_the_key_episode: @@ -62,27 +106,11 @@ class TestDiffusionQuerySet: # 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 - def test_now(self, episodes): + def test_now_test(self, episodes, diffusions_time_variation): now = tz.now() - random_episode = random.choice([episodes[1], episodes[0], episodes[2]]) - now_diffusion = baker.make( - Diffusion, - episode=random_episode, - start=now - timedelta(minutes=30), - end=now + timedelta(minutes=30), - ) - after_diffusion = baker.make( - Diffusion, - episode=random_episode, - start=now + timedelta(minutes=30), - end=now + timedelta(minutes=60), - ) - before_diffusion = baker.make( - Diffusion, - episode=random_episode, - start=now - timedelta(minutes=60), - end=now - timedelta(minutes=30), - ) + now_diffusion = diffusions_time_variation[4] + after_diffusion = diffusions_time_variation[5] + before_diffusion = diffusions_time_variation[3] result = Diffusion.objects.now(now=now, order=True) assert len(result) == 1 @@ -95,131 +123,80 @@ class TestDiffusionQuerySet: #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 - def test_date_without_date_arg(self, episodes): - today = datetime.date.today() - tomorrow = today + timedelta(days=1) - random_episode = random.choice([episodes[1], episodes[0], episodes[2]]) - second_today_diffusion = baker.make( - Diffusion, - episode=random_episode, - start=tz.datetime.combine(today, datetime.time.min) - + timedelta(minutes=30), - end=tz.datetime.combine(today, datetime.time.max) - + timedelta(minutes=60), - ) - first_today_diffusion = baker.make( - Diffusion, - episode=random_episode, - start=tz.datetime.combine(today, datetime.time.min), - end=tz.datetime.combine(today, datetime.time.max) - + timedelta(minutes=30), - ) - another_day_diffusion = baker.make( - Diffusion, - episode=random_episode, - start=tz.datetime.combine(tomorrow, datetime.time.min), - end=tz.datetime.combine(tomorrow, datetime.time.max), - ) - + def test_date_without_date_arg(self, diffusions_time_variation): + now_diffusion = diffusions_time_variation[4] + after_diffusion = diffusions_time_variation[5] + before_diffusion = diffusions_time_variation[3] result = Diffusion.objects.date() - assert len(result) == 2 - assert result[0] == first_today_diffusion - assert result[1] == second_today_diffusion + assert len(result) == 3 + assert result[0] == before_diffusion + assert result[1] == now_diffusion + assert result[2] == after_diffusion @pytest.mark.django_db - def test_date_with_date_arg(self, episodes): - today = datetime.date.today() - tomorrow = today + timedelta(days=1) - random_episode = random.choice([episodes[1], episodes[0], episodes[2]]) - today_diffusion = baker.make( - Diffusion, - episode=random_episode, - start=tz.datetime.combine(today, datetime.time.min) - - timedelta(minutes=30), - end=tz.datetime.combine(today, datetime.time.min) - + timedelta(minutes=30), - ) - second_tomorrow_diffusion = baker.make( - Diffusion, - episode=random_episode, - start=tz.datetime.combine(tomorrow, datetime.time.min) - + timedelta(minutes=30), - end=tz.datetime.combine(tomorrow, datetime.time.min) - + timedelta(minutes=60), - ) - first_tomorrow_diffusion = baker.make( - Diffusion, - episode=random_episode, - start=tz.datetime.combine(tomorrow, datetime.time.min), - end=tz.datetime.combine(tomorrow, datetime.time.min) - + timedelta(minutes=60), - ) + def test_date_with_date_arg(self, diffusions_time_variation): + today_date = datetime.date.today() + tomorrow_date = today_date + timedelta(days=1) + today_diffusion = diffusions_time_variation[4] + tomorrow_diffusion = diffusions_time_variation[6] + result = Diffusion.objects.date(date=tomorrow_date) - result = Diffusion.objects.date(date=tomorrow) - - assert len(result) == 2 - assert result[0] == first_tomorrow_diffusion - assert result[1] == second_tomorrow_diffusion + assert len(result) == 1 + 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 + #elle utilise la méthode date si la date est un objet date @pytest.mark.django_db - def test_at_datetimeobj(self, episodes): - random_episode = random.choice([episodes[1], episodes[0], episodes[2]]) - today_dt = datetime.datetime.today() - now_diffusion = baker.make( - Diffusion, - episode=random_episode, - start=today_dt - timedelta(minutes=30), - end=today_dt + timedelta(minutes=30), - ) - after_diffusion = baker.make( - Diffusion, - episode=random_episode, - start=today_dt + timedelta(minutes=30), - end=today_dt + timedelta(minutes=60), - ) - before_diffusion = baker.make( - Diffusion, - episode=random_episode, - start=today_dt - timedelta(minutes=60), - end=today_dt - timedelta(minutes=30), - ) - result = Diffusion.objects.at(date=today_dt) + def test_at_datetimeobj(self, diffusions_time_variation): + today_datetime = diffusions_time_variation[1] + now_diffusion = diffusions_time_variation[4] + after_diffusion = diffusions_time_variation[5] + before_diffusion = diffusions_time_variation[3] + result = Diffusion.objects.at(date=today_datetime) assert now_diffusion in result @pytest.mark.django_db - def test_at_dateobj(self, episodes): - today_d = datetime.date.today() - tomorrow_d = today_d + timedelta(days=1) - random_episode = random.choice([episodes[1], episodes[0], episodes[2]]) - second_today_diffusion = baker.make( - Diffusion, - episode=random_episode, - start=tz.datetime.combine(today_d, datetime.time.min) - + timedelta(minutes=30), - end=tz.datetime.combine(today_d, datetime.time.max) - + timedelta(minutes=60), - ) - first_today_diffusion = baker.make( - Diffusion, - episode=random_episode, - start=tz.datetime.combine(today_d, datetime.time.min), - end=tz.datetime.combine(today_d, datetime.time.max) - + timedelta(minutes=30), - ) - another_day_diffusion = baker.make( - Diffusion, - episode=random_episode, - start=tz.datetime.combine(tomorrow_d, datetime.time.min), - end=tz.datetime.combine(tomorrow_d, datetime.time.max), - ) - result = Diffusion.objects.at(date=today_d) + def test_at_dateobj(self, episodes, diffusions_time_variation): + today_date = diffusions_time_variation[0] + after_diffusion = diffusions_time_variation[5] + now_diffusion = diffusions_time_variation[4] + before_diffusion = diffusions_time_variation[3] + another_day_diffusion = diffusions_time_variation[6] + result = Diffusion.objects.at(date=today_date) + + assert len(result) == 3 + assert result[0] == before_diffusion + assert result[1] == now_diffusion + assert result[2] == after_diffusion + + @pytest.mark.django_db + def test_after_without_date_arg(self, diffusions_time_variation): + yesterday_diffusion = diffusions_time_variation[2] + now_diffusion = diffusions_time_variation[4] + tomorrow_diffusion = diffusions_time_variation[6] + from_now_diffusions = Diffusion.objects.after() + + assert tomorrow_diffusion in from_now_diffusions + assert now_diffusion in from_now_diffusions + assert yesterday_diffusion not in from_now_diffusions + + @pytest.mark.django_db + def test_after_with_datetime_arg(self, diffusions_time_variation): + now_datetime = diffusions_time_variation[1] + yesterday_diffusion = diffusions_time_variation[2] + now_diffusion = diffusions_time_variation[4] + tomorrow_diffusion = diffusions_time_variation[6] + from_now_diffusions = Diffusion.objects.after(date=now_datetime) + + assert tomorrow_diffusion in from_now_diffusions + assert now_diffusion in from_now_diffusions + assert yesterday_diffusion not in from_now_diffusions + + #@pytest.mark.django_db + #def test_after_with_date_arg(): + # pass - assert len(result) == 2 - assert result[0] == first_today_diffusion - assert result[1] == second_today_diffusion