date form validation

This commit is contained in:
Laetitia Getti 2023-05-05 16:40:13 +02:00
parent dc78511d9a
commit 04b754a51d
2 changed files with 73 additions and 1 deletions

View file

@ -1,4 +1,5 @@
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.core.exceptions import ValidationError
from django.db import models from django.db import models
from django.urls import reverse from django.urls import reverse
from django.utils import timezone from django.utils import timezone
@ -25,6 +26,16 @@ class GroupedOrder(models.Model):
def get_absolute_url(self): def get_absolute_url(self):
return reverse("order:manage_items", kwargs={"pk": self.pk}) return reverse("order:manage_items", kwargs={"pk": self.pk})
def clean_fields(self, exclude=None):
super().clean_fields(exclude=exclude)
if self.delivery_date < timezone.now().date():
raise ValidationError("La date de livraison ne doit pas être dans le passé")
if self.delivery_date < self.deadline.date():
raise ValidationError(
"La date limite de commande doit être avant la date de livraison"
)
def __str__(self): # pragma: no cover def __str__(self): # pragma: no cover
return ( return (
self.name self.name

View file

@ -1,11 +1,12 @@
import datetime import datetime
from django.urls import reverse
from django.utils import timezone from django.utils import timezone
from la_chariotte.order.models import GroupedOrder from la_chariotte.order.models import GroupedOrder
class TestGroupedOrdersModel: class TestGroupedOrderModel:
"""Tests for Grouped orders model""" """Tests for Grouped orders model"""
def test_is_ongoing_with_ongoing_grouped_order(self): def test_is_ongoing_with_ongoing_grouped_order(self):
@ -49,3 +50,63 @@ class TestGroupedOrdersModel:
del_date = timezone.now().date() + datetime.timedelta(days=1) del_date = timezone.now().date() + datetime.timedelta(days=1)
old_gr_order = GroupedOrder(deadline=deadline, delivery_date=del_date) old_gr_order = GroupedOrder(deadline=deadline, delivery_date=del_date)
assert old_gr_order.is_to_be_delivered() assert old_gr_order.is_to_be_delivered()
def test_deadline_after_delivery_date(self, client_log):
"""If the deadline is set after the delivery date, an validation error is raised"""
assert GroupedOrder.objects.count() == 0
create_gorder_url = reverse("order:create_grouped_order")
response = client_log.get(create_gorder_url)
assert response.status_code == 200
date = timezone.now().date() + datetime.timedelta(days=22)
deadline = timezone.now() + datetime.timedelta(days=32)
response = client_log.post(
create_gorder_url,
{"name": "titre test", "deadline": deadline, "delivery_date": date},
)
assert response.status_code == 200
assert not response.context.get("form").is_valid()
"La date limite de commande doit être avant la date de livraison" in response.content.decode()
assert (
response.context.get("form").errors["__all__"][0]
== "La date limite de commande doit être avant la date de livraison"
)
assert GroupedOrder.objects.count() == 0
def test_deadline_same_day_as_delivery_date(self, client_log):
"""If the deadline is set the seame day as delivery date, no validation error is raised"""
assert GroupedOrder.objects.count() == 0
create_gorder_url = reverse("order:create_grouped_order")
response = client_log.get(create_gorder_url)
assert response.status_code == 200
date = timezone.now().date() + datetime.timedelta(days=32)
deadline = timezone.now() + datetime.timedelta(days=32)
response = client_log.post(
create_gorder_url,
{"name": "titre test", "deadline": deadline, "delivery_date": date},
)
assert response.status_code == 302
assert GroupedOrder.objects.count() == 1
def test_delivery_date_in_past(self, client_log):
"""If the delivery date is set into the past, a validation error is raised"""
assert GroupedOrder.objects.count() == 0
create_gorder_url = reverse("order:create_grouped_order")
response = client_log.get(create_gorder_url)
assert response.status_code == 200
date = timezone.now().date() - datetime.timedelta(days=1)
deadline = timezone.now() - datetime.timedelta(days=3)
response = client_log.post(
create_gorder_url,
{"name": "titre test", "deadline": deadline, "delivery_date": date},
)
assert response.status_code == 200
assert not response.context.get("form").is_valid()
assert (
response.context.get("form").errors["__all__"][0]
== "La date de livraison ne doit pas être dans le passé"
)
"La date de livraison ne doit pas être dans le passé" in response.content.decode()
assert GroupedOrder.objects.count() == 0
def test_delivery_date_and_name_unique_together(self):
pass