mirror of
https://github.com/pretix/pretix.git
synced 2026-06-11 01:25:13 +00:00
add test for order.subevents cases
This commit is contained in:
@@ -157,7 +157,7 @@ class RelativeDate:
|
|||||||
if choice.base == "order" and isinstance(base, Order):
|
if choice.base == "order" and isinstance(base, Order):
|
||||||
event = base.event
|
event = base.event
|
||||||
base_date = getattr(base, choice.attribute)
|
base_date = getattr(base, choice.attribute)
|
||||||
elif choice.base == "order.subevent" and isinstance(base, Order):
|
elif choice.base == "order.subevents" and isinstance(base, Order):
|
||||||
if not base.event.has_subevents:
|
if not base.event.has_subevents:
|
||||||
raise ValueError("The order is for an event without subevents")
|
raise ValueError("The order is for an event without subevents")
|
||||||
if choice.modifier == "first":
|
if choice.modifier == "first":
|
||||||
@@ -165,12 +165,13 @@ class RelativeDate:
|
|||||||
if op is None:
|
if op is None:
|
||||||
raise ValueError("The order has no positions for subevents")
|
raise ValueError("The order has no positions for subevents")
|
||||||
event = op.event
|
event = op.event
|
||||||
base_date = getattr(base, choice.attribute)
|
base_date = getattr(op.subevent, choice.attribute)
|
||||||
elif choice.modifier == "last":
|
elif choice.modifier == "last":
|
||||||
op = base.all_positions.order_by(f"subevent__{choice.attribute}").last()
|
op = base.all_positions.order_by(f"subevent__{choice.attribute}").last()
|
||||||
if op is None:
|
if op is None:
|
||||||
raise ValueError("The order has no positions for subevents")
|
raise ValueError("The order has no positions for subevents")
|
||||||
base_date = getattr(base, choice.attribute)
|
event = op.event
|
||||||
|
base_date = getattr(op.subevent, choice.attribute)
|
||||||
else:
|
else:
|
||||||
raise ValueError("The selected modifier does not exist")
|
raise ValueError("The selected modifier does not exist")
|
||||||
elif choice.base == "event" and isinstance(base, SubEvent):
|
elif choice.base == "event" and isinstance(base, SubEvent):
|
||||||
|
|||||||
@@ -20,12 +20,13 @@
|
|||||||
# <https://www.gnu.org/licenses/>.
|
# <https://www.gnu.org/licenses/>.
|
||||||
#
|
#
|
||||||
from datetime import datetime, time, timedelta
|
from datetime import datetime, time, timedelta
|
||||||
|
from decimal import Decimal
|
||||||
from zoneinfo import ZoneInfo
|
from zoneinfo import ZoneInfo
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from django_scopes import scope
|
from django_scopes import scope, scopes_disabled
|
||||||
|
|
||||||
from pretix.base.models import Event, Order, Organizer
|
from pretix.base.models import Event, Order, OrderPosition, Organizer
|
||||||
from pretix.base.reldate import RelativeDate, RelativeDateWrapper
|
from pretix.base.reldate import RelativeDate, RelativeDateWrapper
|
||||||
|
|
||||||
TOKYO = ZoneInfo('Asia/Tokyo')
|
TOKYO = ZoneInfo('Asia/Tokyo')
|
||||||
@@ -40,7 +41,6 @@ def event():
|
|||||||
date_from=datetime(2017, 12, 27, 5, 0, 0, tzinfo=TOKYO),
|
date_from=datetime(2017, 12, 27, 5, 0, 0, tzinfo=TOKYO),
|
||||||
presale_start=datetime(2017, 12, 1, 5, 0, 0, tzinfo=TOKYO),
|
presale_start=datetime(2017, 12, 1, 5, 0, 0, tzinfo=TOKYO),
|
||||||
plugins='pretix.plugins.banktransfer'
|
plugins='pretix.plugins.banktransfer'
|
||||||
|
|
||||||
)
|
)
|
||||||
event.settings.timezone = "Asia/Tokyo"
|
event.settings.timezone = "Asia/Tokyo"
|
||||||
return event
|
return event
|
||||||
@@ -206,3 +206,73 @@ def test_relative_to_order(event):
|
|||||||
rdw = RelativeDateWrapper(RelativeDate(days=1, time=None, base_date_name='order__datetime', minutes=None, is_after=True))
|
rdw = RelativeDateWrapper(RelativeDate(days=1, time=None, base_date_name='order__datetime', minutes=None, is_after=True))
|
||||||
assert rdw.datetime(order).astimezone(TOKYO) == datetime(2020, 3, 30, 18, 0, 0, tzinfo=TOKYO)
|
assert rdw.datetime(order).astimezone(TOKYO) == datetime(2020, 3, 30, 18, 0, 0, tzinfo=TOKYO)
|
||||||
assert rdw.to_string() == 'RELDATE/1/-/order__datetime/after'
|
assert rdw.to_string() == 'RELDATE/1/-/order__datetime/after'
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.django_db
|
||||||
|
@scopes_disabled()
|
||||||
|
def test_relative_to_subevent(event):
|
||||||
|
event.has_subevents = True
|
||||||
|
event.save()
|
||||||
|
se1 = event.subevents.create(
|
||||||
|
name="Foobar",
|
||||||
|
date_from=datetime(2023, 6, 27, 5, 0, 0, tzinfo=TOKYO),
|
||||||
|
date_to=datetime(2023, 7, 27, 5, 0, 0, tzinfo=TOKYO),
|
||||||
|
date_admission=datetime(2023, 6, 27, 6, 0, 0, tzinfo=TOKYO),
|
||||||
|
)
|
||||||
|
se2 = event.subevents.create(
|
||||||
|
name="Foobar1",
|
||||||
|
date_from=datetime(2024, 6, 27, 5, 0, 0, tzinfo=TOKYO),
|
||||||
|
date_to=datetime(2024, 7, 27, 5, 0, 0, tzinfo=TOKYO),
|
||||||
|
date_admission=datetime(2024, 6, 27, 6, 0, 0, tzinfo=TOKYO),
|
||||||
|
)
|
||||||
|
|
||||||
|
order_moment = datetime(2020, 3, 29, 18, 0, 0, tzinfo=TOKYO)
|
||||||
|
|
||||||
|
order = Order.objects.create(
|
||||||
|
code='FOO', event=event, email='dummy@dummy.test',
|
||||||
|
status=Order.STATUS_PENDING, secret="k24fiuwvu8kxz3y1",
|
||||||
|
datetime=order_moment,
|
||||||
|
expires=order_moment + timedelta(days=10),
|
||||||
|
sales_channel=event.organizer.sales_channels.get(identifier="web"),
|
||||||
|
total=23, locale='en'
|
||||||
|
)
|
||||||
|
item = event.items.create(name="Budget Ticket", default_price=23)
|
||||||
|
OrderPosition.objects.create(
|
||||||
|
order=order,
|
||||||
|
subevent=se1,
|
||||||
|
item=item,
|
||||||
|
tax_value=Decimal("3"),
|
||||||
|
price=Decimal("23"),
|
||||||
|
attendee_name_parts={'full_name': "Peter"},
|
||||||
|
secret="z3fsn8jyufm5kpk768q69gkbyr5f4h6w"
|
||||||
|
)
|
||||||
|
OrderPosition.objects.create(
|
||||||
|
order=order,
|
||||||
|
subevent=se2,
|
||||||
|
item=item,
|
||||||
|
tax_value=Decimal("3"),
|
||||||
|
price=Decimal("23"),
|
||||||
|
attendee_name_parts={'full_name': "Peter"},
|
||||||
|
secret="z3fsn8jyufm5kpk768q69gkbyr5f4h6w"
|
||||||
|
)
|
||||||
|
|
||||||
|
rdw = RelativeDate(days=1, time=None, base_date_name='order.subevents__date_from__first', minutes=None, is_after=True)
|
||||||
|
assert rdw.datetime(order).astimezone(TOKYO) == datetime(2023, 6, 28, 5, 0, 0, tzinfo=TOKYO)
|
||||||
|
assert rdw.to_string() == 'RELDATE/1/-/order.subevents__date_from__first/after'
|
||||||
|
rdw = RelativeDate(days=1, time=None, base_date_name='order.subevents__date_from__last', minutes=None, is_after=True)
|
||||||
|
assert rdw.datetime(order).astimezone(TOKYO) == datetime(2024, 6, 28, 5, 0, 0, tzinfo=TOKYO)
|
||||||
|
assert rdw.to_string() == 'RELDATE/1/-/order.subevents__date_from__last/after'
|
||||||
|
|
||||||
|
rdw = RelativeDate(days=1, time=None, base_date_name='order.subevents__date_to__first', minutes=None, is_after=True)
|
||||||
|
assert rdw.datetime(order).astimezone(TOKYO) == datetime(2023, 7, 28, 5, 0, 0, tzinfo=TOKYO)
|
||||||
|
assert rdw.to_string() == 'RELDATE/1/-/order.subevents__date_to__first/after'
|
||||||
|
rdw = RelativeDate(days=1, time=None, base_date_name='order.subevents__date_to__last', minutes=None, is_after=True)
|
||||||
|
assert rdw.datetime(order).astimezone(TOKYO) == datetime(2024, 7, 28, 5, 0, 0, tzinfo=TOKYO)
|
||||||
|
assert rdw.to_string() == 'RELDATE/1/-/order.subevents__date_to__last/after'
|
||||||
|
|
||||||
|
rdw = RelativeDate(days=1, time=None, base_date_name='order.subevents__date_admission__first', minutes=None, is_after=True)
|
||||||
|
assert rdw.datetime(order).astimezone(TOKYO) == datetime(2023, 6, 28, 6, 0, 0, tzinfo=TOKYO)
|
||||||
|
assert rdw.to_string() == 'RELDATE/1/-/order.subevents__date_admission__first/after'
|
||||||
|
rdw = RelativeDate(days=1, time=None, base_date_name='order.subevents__date_admission__last', minutes=None, is_after=True)
|
||||||
|
assert rdw.datetime(order).astimezone(TOKYO) == datetime(2024, 6, 28, 6, 0, 0, tzinfo=TOKYO)
|
||||||
|
assert rdw.to_string() == 'RELDATE/1/-/order.subevents__date_admission__last/after'
|
||||||
|
|||||||
Reference in New Issue
Block a user