diff --git a/la_chariotte/order/tests.py b/la_chariotte/order/tests.py deleted file mode 100644 index 06df934..0000000 --- a/la_chariotte/order/tests.py +++ /dev/null @@ -1,92 +0,0 @@ -import datetime - -from django.test import TestCase -from django.urls import reverse -from django.utils import timezone -from .models import Grouped_order - - -def create_grouped_order(days_before_delivery_date,days_before_deadline,name): - """ - Create a question with the given `question_text` and published the - given number of `days` offset to now (negative for questions published - in the past, positive for questions that have yet to be published). - """ - date = timezone.now().date() + datetime.timedelta(days=days_before_delivery_date) - deadline = timezone.now() + datetime.timedelta(days=days_before_deadline) - return Grouped_order.objects.create(name=name, orga="test orga",delivery_date=date,deadline=deadline) - - -class GroupedOrderModelTests(TestCase): - - def test_is_ongoing_with_ongoing_grouped_order(self): - """ - is_ongoing() returns True if the deadline is not crossed - """ - deadline = timezone.now() + datetime.timedelta(days=10) - ongoing_gr_order = Grouped_order(deadline=deadline) - self.assertIs(ongoing_gr_order.is_ongoing(), True) - - def test_is_ongoing_with_old_grouped_order(self): - """ - is_ongoing() returns False if the deadline is crossed - """ - deadline = timezone.now() - datetime.timedelta(hours=1) - ongoing_gr_order = Grouped_order(deadline=deadline) - self.assertIs(ongoing_gr_order.is_ongoing(), False) - -class GroupedOrderIndexViewTests(TestCase): - - def test_no_grouped_orders(self): - """ - If no grouped order exist, an appropriate message is displayed - """ - response = self.client.get(reverse('order:index')) - self.assertEqual(response.status_code, 200) - self.assertContains(response, "Pas de commande groupée pour l'instant") - self.assertQuerysetEqual(response.context['grouped_order_list']['old_grouped_orders'], []) - self.assertQuerysetEqual(response.context['grouped_order_list']['orders_over_grouped_orders'], []) - self.assertQuerysetEqual(response.context['grouped_order_list']['incoming_grouped_orders'], []) - - def test_grouped_orders_in_right_section(self): - """ - According to their delivery date and deadline, grouped orders are placed in correct section - """ - future_grouped_order = create_grouped_order(days_before_delivery_date=5,days_before_deadline=2,name="future") - crossed_deadline_gr_order = create_grouped_order(days_before_delivery_date=2, days_before_deadline=-1,name="crossed deadline") - passed_deadline_gr_order = create_grouped_order(days_before_delivery_date=-1, days_before_deadline=-3,name="passée") - response = self.client.get(reverse('order:index')) - self.assertEqual(response.status_code, 200) - self.assertNotContains(response, "Pas de commande groupée pour l'instant") - self.assertContains(response, "Commandes groupées à venir") - self.assertContains(response, "Livraison à venir") - self.assertContains(response, "Livraison passée") - self.assertIs(len(response.context['grouped_order_list']['old_grouped_orders']), 1) - self.assertIs(len(response.context['grouped_order_list']['orders_over_grouped_orders']), 1) - self.assertIs(len(response.context['grouped_order_list']['incoming_grouped_orders']), 1) - - def test_grouped_orders_in_right_section__with_only_passed(self): - """ - According to their delivery date and deadline, grouped orders are placed in correct section - """ - passed_deadline_gr_order = create_grouped_order(days_before_delivery_date=-1, days_before_deadline=-3,name="passée") - response = self.client.get(reverse('order:index')) - self.assertEqual(response.status_code, 200) - self.assertNotContains(response, "Pas de commande groupée pour l'instant") - self.assertNotContains(response, "Commandes groupées à venir") - self.assertNotContains(response, "Livraison à venir") - self.assertContains(response, "Livraison passée") - self.assertIs(len(response.context['grouped_order_list']['old_grouped_orders']), 1) - - def test_grouped_orders_in_right_section__with_only_future(self): - """ - According to their delivery date and deadline, grouped orders are placed in correct section - """ - future_grouped_order = create_grouped_order(days_before_delivery_date=5,days_before_deadline=2,name="future") - response = self.client.get(reverse('order:index')) - self.assertEqual(response.status_code, 200) - self.assertNotContains(response, "Pas de commande groupée pour l'instant") - self.assertNotContains(response, "Commandes groupées à venir") - self.assertContains(response, "Livraison à venir") - self.assertNotContains(response, "Livraison passée") - self.assertIs(len(response.context['grouped_order_list']['incoming_grouped_orders']), 1) \ No newline at end of file diff --git a/la_chariotte/order/tests/test_models.py b/la_chariotte/order/tests/test_models.py new file mode 100644 index 0000000..2977c49 --- /dev/null +++ b/la_chariotte/order/tests/test_models.py @@ -0,0 +1,24 @@ +import datetime + +from django.utils import timezone +from la_chariotte.order.models import Grouped_order + + + +class TestGroupedOrdersModel(): + """Tests for Grouped orders model""" + def test_is_ongoing_with_ongoing_grouped_order(self): + """ + is_ongoing() returns True if the deadline is not crossed + """ + deadline = timezone.now() + datetime.timedelta(days=10) + ongoing_gr_order = Grouped_order(deadline=deadline) + assert ongoing_gr_order.is_ongoing() == True + + def test_is_ongoing_with_old_grouped_order(self): + """ + is_ongoing() returns False if the deadline is crossed + """ + deadline = timezone.now() - datetime.timedelta(hours=1) + ongoing_gr_order = Grouped_order(deadline=deadline) + assert not ongoing_gr_order.is_ongoing() \ No newline at end of file diff --git a/la_chariotte/order/tests/test_views.py b/la_chariotte/order/tests/test_views.py new file mode 100644 index 0000000..1074ae3 --- /dev/null +++ b/la_chariotte/order/tests/test_views.py @@ -0,0 +1,81 @@ +import datetime + +import pytest + +from django.urls import reverse +from django.utils import timezone +from la_chariotte.order.models import Grouped_order + +pytestmark = pytest.mark.django_db + +def create_grouped_order(days_before_delivery_date,days_before_deadline,name): + """ + Creates a grouped order. + """ + date = timezone.now().date() + datetime.timedelta(days=days_before_delivery_date) + deadline = timezone.now() + datetime.timedelta(days=days_before_deadline) + return Grouped_order.objects.create(name=name, orga="test orga",delivery_date=date,deadline=deadline) + +class TestGroupedOrderIndexView: + def test_no_grouped_orders(self,client): + """ + If no grouped order exist, an appropriate message is displayed + """ + response = client.get(reverse('order:index')) + assert response.status_code == 200 + assert "Pas de commande groupée pour l'instant" in response.content.decode() + assert len(response.context['grouped_order_list']['old_grouped_orders']) == 0 + assert len(response.context['grouped_order_list']['orders_over_grouped_orders']) == 0 + assert len(response.context['grouped_order_list']['incoming_grouped_orders']) == 0 + + def test_grouped_orders_in_right_section(self,client): + """ + According to their delivery date and deadline, grouped orders are placed in the correct section : several gr orders + """ + future_grouped_order = create_grouped_order(days_before_delivery_date=5,days_before_deadline=2,name="future") + crossed_deadline_gr_order = create_grouped_order(days_before_delivery_date=2, days_before_deadline=-1,name="crossed deadline") + old_gr_order = create_grouped_order(days_before_delivery_date=-1, days_before_deadline=-3,name="old") + response = client.get(reverse('order:index')) + assert response.status_code == 200 + assert "Pas de commande groupée pour l'instant" not in response.content.decode() + assert "Commandes groupées à venir" in response.content.decode() + assert "Livraison à venir" in response.content.decode() + assert "Livraison passée" in response.content.decode() + assert len(response.context['grouped_order_list']['old_grouped_orders']) == 1 + assert len(response.context['grouped_order_list']['orders_over_grouped_orders']) == 1 + assert len(response.context['grouped_order_list']['incoming_grouped_orders']) == 1 + assert response.context['grouped_order_list']['old_grouped_orders'][0] == old_gr_order + assert response.context['grouped_order_list']['orders_over_grouped_orders'][0] == crossed_deadline_gr_order + assert response.context['grouped_order_list']['incoming_grouped_orders'][0] == future_grouped_order + + def test_grouped_orders_in_right_section__with_only_old(self,client): + """ + According to their delivery date and deadline, grouped orders are placed in correct section : only old gr order + """ + old_gr_order = create_grouped_order(days_before_delivery_date=-1, days_before_deadline=-3,name="passée") + response = client.get(reverse('order:index')) + assert response.status_code == 200 + assert "Pas de commande groupée pour l'instant" not in response.content.decode() + assert "Commandes groupées à venir" not in response.content.decode() + assert "Livraison à venir" not in response.content.decode() + assert "Livraison passée" in response.content.decode() + assert len(response.context['grouped_order_list']['old_grouped_orders']) == 1 + assert len(response.context['grouped_order_list']['orders_over_grouped_orders']) == 0 + assert len(response.context['grouped_order_list']['incoming_grouped_orders']) == 0 + assert response.context['grouped_order_list']['old_grouped_orders'][0] == old_gr_order + + def test_grouped_orders_in_right_section__with_only_future(self,client): + """ + According to their delivery date and deadline, grouped orders are placed in correct section : only incoming gr order + """ + future_grouped_order = create_grouped_order(days_before_delivery_date=5,days_before_deadline=2,name="future") + response = client.get(reverse('order:index')) + assert response.status_code == 200 + assert "Pas de commande groupée pour l'instant" not in response.content.decode() + assert "Commandes groupées à venir" in response.content.decode() + assert "Livraison à venir" not in response.content.decode() + assert "Livraison passée" not in response.content.decode() + assert len(response.context['grouped_order_list']['old_grouped_orders']) == 0 + assert len(response.context['grouped_order_list']['orders_over_grouped_orders']) == 0 + assert len(response.context['grouped_order_list']['incoming_grouped_orders']) == 1 + assert response.context['grouped_order_list']['incoming_grouped_orders'][0] == future_grouped_order \ No newline at end of file diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000..fdfd88b --- /dev/null +++ b/setup.cfg @@ -0,0 +1,2 @@ +[tool:pytest] +DJANGO_SETTINGS_MODULE = la_chariotte.settings \ No newline at end of file