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