mirror of
https://framagit.org/la-chariotte/la-chariotte.git
synced 2025-05-01 19:32:26 +02:00
date form validation
This commit is contained in:
parent
dc78511d9a
commit
04b754a51d
2 changed files with 73 additions and 1 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
Loading…
Reference in a new issue