#103 test model diffusion

This commit is contained in:
Laurent Van Wambeke 2023-05-11 13:12:12 +02:00
parent fd7bcdf2e8
commit 80f56b167e

View File

@ -4,13 +4,52 @@ import datetime
from model_bakery import baker 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
from aircox.models import Diffusion 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
class TestDiffusionQuerySet: @pytest.fixture
@pytest.mark.django_db def diffusions_episode_variation(episodes):
def test_episode_by_obj(self, episodes):
key_episode = episodes[1] key_episode = episodes[1]
another_episode = episodes[2] another_episode = episodes[2]
diffusions_with_the_key_episode = baker.make( diffusions_with_the_key_episode = baker.make(
@ -19,6 +58,15 @@ class TestDiffusionQuerySet:
diffusions_without_the_key_episode = baker.make( diffusions_without_the_key_episode = baker.make(
Diffusion, _quantity=3, episode=another_episode 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, 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) result = Diffusion.objects.episode(episode=key_episode)
for diffusion in diffusions_with_the_key_episode: for diffusion in diffusions_with_the_key_episode:
@ -27,15 +75,11 @@ class TestDiffusionQuerySet:
assert diffusion not in result assert diffusion not in result
@pytest.mark.django_db @pytest.mark.django_db
def test_episode_by_id(self, episodes): def test_episode_by_id(self, diffusions_episode_variation):
key_episode = episodes[1] key_episode = diffusions_episode_variation[0]
another_episode = episodes[2] another_episode = diffusions_episode_variation[1]
diffusions_with_the_key_episode = baker.make( diffusions_with_the_key_episode = diffusions_episode_variation[2]
Diffusion, _quantity=3, episode=key_episode diffusions_without_the_key_episode = diffusions_episode_variation[3]
)
diffusions_without_the_key_episode = baker.make(
Diffusion, _quantity=3, episode=another_episode
)
result = Diffusion.objects.episode(id=key_episode.id) result = Diffusion.objects.episode(id=key_episode.id)
for diffusion in diffusions_with_the_key_episode: 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) # 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é. #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(self, episodes): def test_now_test(self, episodes, diffusions_time_variation):
now = tz.now() now = tz.now()
random_episode = random.choice([episodes[1], episodes[0], episodes[2]]) now_diffusion = diffusions_time_variation[4]
now_diffusion = baker.make( after_diffusion = diffusions_time_variation[5]
Diffusion, before_diffusion = diffusions_time_variation[3]
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),
)
result = Diffusion.objects.now(now=now, order=True) result = Diffusion.objects.now(now=now, order=True)
assert len(result) == 1 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 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". #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, episodes): def test_date_without_date_arg(self, diffusions_time_variation):
today = datetime.date.today() now_diffusion = diffusions_time_variation[4]
tomorrow = today + timedelta(days=1) after_diffusion = diffusions_time_variation[5]
random_episode = random.choice([episodes[1], episodes[0], episodes[2]]) before_diffusion = diffusions_time_variation[3]
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),
)
result = Diffusion.objects.date() result = Diffusion.objects.date()
assert len(result) == 2 assert len(result) == 3
assert result[0] == first_today_diffusion assert result[0] == before_diffusion
assert result[1] == second_today_diffusion assert result[1] == now_diffusion
assert result[2] == after_diffusion
@pytest.mark.django_db @pytest.mark.django_db
def test_date_with_date_arg(self, episodes): def test_date_with_date_arg(self, diffusions_time_variation):
today = datetime.date.today() today_date = datetime.date.today()
tomorrow = today + timedelta(days=1) tomorrow_date = today_date + timedelta(days=1)
random_episode = random.choice([episodes[1], episodes[0], episodes[2]]) today_diffusion = diffusions_time_variation[4]
today_diffusion = baker.make( tomorrow_diffusion = diffusions_time_variation[6]
Diffusion, result = Diffusion.objects.date(date=tomorrow_date)
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),
)
result = Diffusion.objects.date(date=tomorrow) assert len(result) == 1
assert result[0] == tomorrow_diffusion
assert len(result) == 2
assert result[0] == first_tomorrow_diffusion
assert result[1] == second_tomorrow_diffusion
#la méthode at récupère les diffusions à une date donnée. #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 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 @pytest.mark.django_db
def test_at_datetimeobj(self, episodes): def test_at_datetimeobj(self, diffusions_time_variation):
random_episode = random.choice([episodes[1], episodes[0], episodes[2]]) today_datetime = diffusions_time_variation[1]
today_dt = datetime.datetime.today() now_diffusion = diffusions_time_variation[4]
now_diffusion = baker.make( after_diffusion = diffusions_time_variation[5]
Diffusion, before_diffusion = diffusions_time_variation[3]
episode=random_episode, result = Diffusion.objects.at(date=today_datetime)
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 assert now_diffusion in result
@pytest.mark.django_db @pytest.mark.django_db
def test_at_dateobj(self, episodes): def test_at_dateobj(self, episodes, diffusions_time_variation):
today_d = datetime.date.today() today_date = diffusions_time_variation[0]
tomorrow_d = today_d + timedelta(days=1) after_diffusion = diffusions_time_variation[5]
random_episode = random.choice([episodes[1], episodes[0], episodes[2]]) now_diffusion = diffusions_time_variation[4]
second_today_diffusion = baker.make( before_diffusion = diffusions_time_variation[3]
Diffusion, another_day_diffusion = diffusions_time_variation[6]
episode=random_episode, result = Diffusion.objects.at(date=today_date)
start=tz.datetime.combine(today_d, datetime.time.min)
+ timedelta(minutes=30), assert len(result) == 3
end=tz.datetime.combine(today_d, datetime.time.max) assert result[0] == before_diffusion
+ timedelta(minutes=60), assert result[1] == now_diffusion
) assert result[2] == after_diffusion
first_today_diffusion = baker.make(
Diffusion, @pytest.mark.django_db
episode=random_episode, def test_after_without_date_arg(self, diffusions_time_variation):
start=tz.datetime.combine(today_d, datetime.time.min), yesterday_diffusion = diffusions_time_variation[2]
end=tz.datetime.combine(today_d, datetime.time.max) now_diffusion = diffusions_time_variation[4]
+ timedelta(minutes=30), tomorrow_diffusion = diffusions_time_variation[6]
) from_now_diffusions = Diffusion.objects.after()
another_day_diffusion = baker.make(
Diffusion, assert tomorrow_diffusion in from_now_diffusions
episode=random_episode, assert now_diffusion in from_now_diffusions
start=tz.datetime.combine(tomorrow_d, datetime.time.min), assert yesterday_diffusion not in from_now_diffusions
end=tz.datetime.combine(tomorrow_d, datetime.time.max),
) @pytest.mark.django_db
result = Diffusion.objects.at(date=today_d) 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