Files
e-trznice/backend/product/tests.py
2025-10-02 00:54:34 +02:00

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()