mirror of
https://github.com/pretix/pretix.git
synced 2026-05-08 15:44:02 +00:00
start testing event series widget
This commit is contained in:
@@ -127,6 +127,7 @@ def event(organizer):
|
|||||||
testmode=False,
|
testmode=False,
|
||||||
plugins='pretix.plugins.banktransfer',
|
plugins='pretix.plugins.banktransfer',
|
||||||
)
|
)
|
||||||
|
event.set_defaults()
|
||||||
event.settings.set('timezone', 'Europe/Berlin')
|
event.settings.set('timezone', 'Europe/Berlin')
|
||||||
event.settings.set('locale', 'en')
|
event.settings.set('locale', 'en')
|
||||||
event.settings.set('locales', ['en'])
|
event.settings.set('locales', ['en'])
|
||||||
@@ -672,11 +673,11 @@ def event_series(organizer):
|
|||||||
live=True,
|
live=True,
|
||||||
plugins='pretix.plugins.banktransfer',
|
plugins='pretix.plugins.banktransfer',
|
||||||
)
|
)
|
||||||
|
event.set_defaults()
|
||||||
event.settings.set('timezone', 'Europe/Berlin')
|
event.settings.set('timezone', 'Europe/Berlin')
|
||||||
event.settings.set('locale', 'en')
|
event.settings.set('locale', 'en')
|
||||||
event.settings.set('locales', ['en'])
|
event.settings.set('locales', ['en'])
|
||||||
|
|
||||||
# Create item + category for the series
|
|
||||||
category = ItemCategory.objects.create(
|
category = ItemCategory.objects.create(
|
||||||
event=event,
|
event=event,
|
||||||
name='Tickets',
|
name='Tickets',
|
||||||
@@ -690,11 +691,10 @@ def event_series(organizer):
|
|||||||
active=True,
|
active=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
# Create multiple subevents (dates)
|
|
||||||
subevents = []
|
subevents = []
|
||||||
base_date = _future_dt(days=30, hour=19)
|
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(
|
se = SubEvent.objects.create(
|
||||||
event=event,
|
event=event,
|
||||||
name=f'Concert Night {i+1}',
|
name=f'Concert Night {i+1}',
|
||||||
@@ -778,6 +778,7 @@ def widget_page(page):
|
|||||||
|
|
||||||
# Find number input within that row
|
# Find number input within that row
|
||||||
number_input = item_row.locator('input[type="number"]').first
|
number_input = item_row.locator('input[type="number"]').first
|
||||||
|
number_input.wait_for(state='visible', timeout=5000)
|
||||||
if number_input.count() > 0:
|
if number_input.count() > 0:
|
||||||
number_input.fill(str(quantity))
|
number_input.fill(str(quantity))
|
||||||
else:
|
else:
|
||||||
@@ -805,7 +806,10 @@ def widget_page(page):
|
|||||||
|
|
||||||
def click_buy_button(self):
|
def click_buy_button(self):
|
||||||
"""Click the buy/register button."""
|
"""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()
|
buy_button.first.click()
|
||||||
return self
|
return self
|
||||||
|
|
||||||
|
|||||||
72
src/tests/e2e/test_widget_journey_series.py
Normal file
72
src/tests/e2e/test_widget_journey_series.py
Normal 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)
|
||||||
Reference in New Issue
Block a user