diff --git a/aircox/tests/models/test_diffusion.py b/aircox/tests/models/test_diffusion.py index 74d6a51..feb8d6c 100644 --- a/aircox/tests/models/test_diffusion.py +++ b/aircox/tests/models/test_diffusion.py @@ -6,6 +6,7 @@ from django.utils import timezone as tz from datetime import timedelta from aircox.models import Diffusion +#TODO créer fixtures pour éviter toutes ces lignes pour créer les fake db. class TestDiffusionQuerySet: @pytest.mark.django_db @@ -54,7 +55,12 @@ class TestDiffusionQuerySet: for diffusion in result: assert diffusion.type == Diffusion.TYPE_ON_AIR assert diffusion.type != Diffusion.TYPE_UNCONFIRMED - + + # la méthode "now" filtre les diffusions en cours d'un moment précis. + # 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 def test_now(self, episodes): now = tz.now() @@ -83,6 +89,11 @@ class TestDiffusionQuerySet: assert result[0] == now_diffusion 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 def test_date_without_date_arg(self, episodes): today = datetime.date.today() @@ -121,7 +132,7 @@ class TestDiffusionQuerySet: today = datetime.date.today() tomorrow = today + timedelta(days=1) random_episode = random.choice([episodes[1], episodes[0], episodes[2]]) - first_today_diffusion = baker.make( + today_diffusion = baker.make( Diffusion, episode=random_episode, start=tz.datetime.combine(today, datetime.time.min) @@ -151,6 +162,64 @@ class TestDiffusionQuerySet: assert result[0] == first_tomorrow_diffusion assert result[1] == second_tomorrow_diffusion - # @pytest.mark.django_db - # def test_at(self, episodes): - # date = datetime.date.today() + #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 + 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) + + 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) + + assert len(result) == 2 + assert result[0] == first_today_diffusion + assert result[1] == second_today_diffusion +