start testing event series widget

This commit is contained in:
rash
2026-02-20 13:18:06 +01:00
parent 961253bac4
commit 3f92868dba
2 changed files with 80 additions and 4 deletions

View File

@@ -127,6 +127,7 @@ def event(organizer):
testmode=False,
plugins='pretix.plugins.banktransfer',
)
event.set_defaults()
event.settings.set('timezone', 'Europe/Berlin')
event.settings.set('locale', 'en')
event.settings.set('locales', ['en'])
@@ -672,11 +673,11 @@ def event_series(organizer):
live=True,
plugins='pretix.plugins.banktransfer',
)
event.set_defaults()
event.settings.set('timezone', 'Europe/Berlin')
event.settings.set('locale', 'en')
event.settings.set('locales', ['en'])
# Create item + category for the series
category = ItemCategory.objects.create(
event=event,
name='Tickets',
@@ -690,11 +691,10 @@ def event_series(organizer):
active=True,
)
# Create multiple subevents (dates)
subevents = []
base_date = _future_dt(days=30, hour=19)
for i in range(15): # Create 15 dates across 2 months
for i in range(15):
se = SubEvent.objects.create(
event=event,
name=f'Concert Night {i+1}',
@@ -778,6 +778,7 @@ def widget_page(page):
# Find number input within that row
number_input = item_row.locator('input[type="number"]').first
number_input.wait_for(state='visible', timeout=5000)
if number_input.count() > 0:
number_input.fill(str(quantity))
else:
@@ -805,7 +806,10 @@ def widget_page(page):
def click_buy_button(self):
"""Click the buy/register button."""
buy_button = self.page.locator('button:has-text("Buy"), button:has-text("Register")')
buy_button = self.page.locator("""
.pretix-widget-action button:has-text("Buy"),
.pretix-widget-action button:has-text("Register")
""")
buy_button.first.click()
return self

View File

@@ -0,0 +1,72 @@
import pytest
from playwright.sync_api import Page, expect
@pytest.mark.django_db
class TestEventSeriesJourney:
"""
Complete purchase journeys for an event series.
Tests the different views (calendar, list) and adds multiple items to the cart.
"""
def test_multi_subevent_journey_list_view(
self,
page: Page,
live_server_url: str,
organizer,
event_series,
widget_page
):
event, _subevents = event_series
widget_page.goto(
live_server_url,
organizer.slug,
event.slug,
**{'list-type': 'list'}
)
# page.pause()
page.locator('.pretix-widget-event-list-entry').first.click()
# expect(
# page.locator(
# '.pretix-widget-item:has-text("Concert Ticket")')
# ).to_be_visible(timeout=15000)
widget_page.select_item_quantity('Concert Ticket', 2)
widget_page.click_buy_button()
iframe = widget_page.wait_for_iframe_checkout()
expect(
iframe.locator('text=/45\\.00/').first
).to_be_visible(timeout=15000)
# Close iframe and go back to list view
widget_page.close_iframe()
page.locator('a[rel="back"]').click()
# widget_page.goto(
# live_server_url,
# organizer.slug,
# event.slug,
# **{'list-type': 'list'}
# )
page.locator('.pretix-widget-event-list-entry').nth(1).click()
# expect(
# page.locator('.pretix-widget-item:has-text("Concert Ticket")')
# ).to_be_visible(timeout=15000)
# widget_page.select_item_quantity('Concert Ticket', 1)
# Dispatch change event so the widget detects items are selected
# (calcItemsSelected listens for 'change', not 'input')
# page.locator(
# '.pretix-widget-item:has-text("Concert Ticket") '
# 'input[type=number]'
# ).dispatch_event('change')
page.pause()
widget_page.click_buy_button()
iframe = widget_page.wait_for_iframe_checkout()
# TODO a bit janky selector
expect(
iframe.locator('text=/90\\.00/').first
).to_be_visible(timeout=15000)