fix tests

This commit is contained in:
Lukas Bockstaller
2026-05-07 11:12:15 +02:00
parent 4db98def79
commit 582cb90bb0
2 changed files with 11 additions and 11 deletions

View File

@@ -71,20 +71,18 @@ class RelativeDateWrapper:
:param reference:
:return:
"""
from .models import SubEvent, Event, Order
from .models import Event, Order, SubEvent
if self.data.base_date_name in ORDER_CHOICES_KEYS:
if not isinstance(reference, Order):
raise ValueError('A order-based relative datetime choice must be used with an order object')
event = reference.event
base_date = getattr(order, self.data.base_date_name)
base_date = getattr(reference, self.data.base_date_name)
elif isinstance(reference, SubEvent):
event = reference.event
base_date = (
getattr(reference, self.data.base_date_name)
or getattr(reference.event, self.data.base_date_name)
or reference.date_from
)
base_date = (getattr(reference, self.data.base_date_name) or
getattr(reference.event, self.data.base_date_name) or
reference.date_from)
elif isinstance(reference, Event):
event = reference
base_date = getattr(reference, self.data.base_date_name) or event.date_from
@@ -188,7 +186,7 @@ class RelativeDateWrapper:
minutes=None,
is_after=len(parts) > 4 and parts[4] == "after",
)
if data.base_date_name in [k[0] for k in ORDER_CHOICES] and parts[4] == "before":
if data.base_date_name in [k[0] for k in ORDER_CHOICES] and parts[4] != "after":
raise ValueError('ORDER_CHOICE: {} cannot be combined with "before"'.format(data.base_date_name))
if data.base_date_name not in [k[0] for k in EVENT_CHOICES + ORDER_CHOICES]:
raise ValueError('{} is not a valid base date'.format(data.base_date_name))
@@ -569,7 +567,6 @@ class RelativeDateField(RelativeDateTimeField):
elif data.status == 'relative' and data.rel_days_relationto in ORDER_CHOICES_KEYS and data.rel_days_relation == 'before':
raise ValidationError(_('A relative date in relation to an order can only be after the order has been placed'))
return forms.MultiValueField.clean(self, value)

View File

@@ -25,7 +25,7 @@ from zoneinfo import ZoneInfo
import pytest
from django_scopes import scope
from pretix.base.models import Event, Organizer, Order
from pretix.base.models import Event, Order, Organizer
from pretix.base.reldate import RelativeDate, RelativeDateWrapper
TOKYO = ZoneInfo('Asia/Tokyo')
@@ -46,7 +46,6 @@ def event():
return event
@pytest.mark.django_db
def test_absolute_date(event):
d = datetime(2017, 12, 25, 5, 0, 0, tzinfo=TOKYO)
@@ -149,6 +148,7 @@ def test_unserialize():
rdw = RelativeDateWrapper.from_string('RELDATE/minutes/60/date_from/')
assert rdw.data == RelativeDate(days=0, time=None, base_date_name='date_from', minutes=60)
@pytest.mark.django_db
def test_relative_to_order(event):
with scope(organizer=event.organizer):
@@ -166,6 +166,9 @@ def test_relative_to_order(event):
rdw = RelativeDateWrapper(RelativeDate(days=1, time=None, base_date_name='datetime', minutes=None))
assert rdw.datetime(order).astimezone(TOKYO) == datetime(2020, 3, 28, 18, 0, 0, tzinfo=TOKYO)
assert rdw.to_string() == 'RELDATE/1/-/datetime/'
# this is expressible as a RelativeDate but the Wrapper should catch it as invalid when parsing
with pytest.raises(ValueError):
rdw.from_string(rdw.to_string())
rdw = RelativeDateWrapper(RelativeDate(days=1, time=None, base_date_name='datetime', minutes=None, is_after=True))
assert rdw.datetime(order).astimezone(TOKYO) == datetime(2020, 3, 30, 18, 0, 0, tzinfo=TOKYO)