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.core.exceptions import ValidationError
from django.db import models
from django.urls import reverse
from django.utils import timezone
@ -25,6 +26,16 @@ class GroupedOrder(models.Model):
def get_absolute_url(self):
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
return (
self.name

View file

@ -1,11 +1,12 @@
import datetime
from django.urls import reverse
from django.utils import timezone
from la_chariotte.order.models import GroupedOrder
class TestGroupedOrdersModel:
class TestGroupedOrderModel:
"""Tests for Grouped orders model"""
def test_is_ongoing_with_ongoing_grouped_order(self):
@ -49,3 +50,63 @@ class TestGroupedOrdersModel:
del_date = timezone.now().date() + datetime.timedelta(days=1)
old_gr_order = GroupedOrder(deadline=deadline, delivery_date=del_date)
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