67 lines
1.7 KiB
Python
67 lines
1.7 KiB
Python
from django.test import TestCase
|
|
from django.utils import timezone
|
|
from datetime import timedelta
|
|
from django.core.exceptions import ValidationError
|
|
|
|
from booking.models import Square, Event
|
|
from .models import Product, EventProduct
|
|
|
|
|
|
class EventProductDateComparisonTests(TestCase):
|
|
def setUp(self):
|
|
self.square = Square.objects.create(
|
|
name="Test Square",
|
|
street="Test Street",
|
|
city="Test City",
|
|
psc=12345,
|
|
width=10,
|
|
height=10,
|
|
grid_rows=10,
|
|
grid_cols=10,
|
|
cellsize=10,
|
|
)
|
|
today = timezone.now().date()
|
|
self.event = Event.objects.create(
|
|
name="Test Event",
|
|
square=self.square,
|
|
start=today,
|
|
end=today + timedelta(days=2),
|
|
price_per_m2=10,
|
|
)
|
|
self.product = Product.objects.create(name="Prod 1")
|
|
|
|
def test_event_product_inside_event_range_passes(self):
|
|
now = timezone.now()
|
|
ep = EventProduct(
|
|
product=self.product,
|
|
event=self.event,
|
|
start_selling_date=now,
|
|
end_selling_date=now + timedelta(hours=2),
|
|
)
|
|
# Should not raise (specifically regression for datetime.date vs datetime comparison)
|
|
ep.full_clean() # Will call clean()
|
|
ep.save()
|
|
self.assertIsNotNone(ep.id)
|
|
|
|
def test_event_product_outside_event_range_fails(self):
|
|
now = timezone.now()
|
|
ep = EventProduct(
|
|
product=self.product,
|
|
event=self.event,
|
|
start_selling_date=now - timedelta(days=1), # before event start
|
|
end_selling_date=now,
|
|
)
|
|
with self.assertRaises(ValidationError):
|
|
ep.full_clean()
|
|
|
|
def test_event_product_end_after_event_range_fails(self):
|
|
now = timezone.now()
|
|
ep = EventProduct(
|
|
product=self.product,
|
|
event=self.event,
|
|
start_selling_date=now,
|
|
end_selling_date=now + timedelta(days=5), # after event end
|
|
)
|
|
with self.assertRaises(ValidationError):
|
|
ep.full_clean()
|