forked from CGM_Public/pretix_original
first couple widget e2e tests
courtesy of claude most of the tests don't work yet
This commit is contained in:
111
src/tests/e2e/test_widget_loading.py
Normal file
111
src/tests/e2e/test_widget_loading.py
Normal file
@@ -0,0 +1,111 @@
|
||||
"""
|
||||
E2E Tests for Loading States & Performance
|
||||
|
||||
Tests that verify:
|
||||
- Loading spinner appears during widget initialization
|
||||
- Loading spinner disappears after content loads
|
||||
- Widget loads within acceptable time
|
||||
- No JavaScript errors during widget initialization
|
||||
"""
|
||||
import pytest
|
||||
from playwright.sync_api import Page, expect
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
class TestLoadingStates:
|
||||
"""Test loading states and transitions."""
|
||||
|
||||
def test_loading_spinner_disappears_after_load(
|
||||
self,
|
||||
page: Page,
|
||||
live_server_url: str,
|
||||
widget_organizer,
|
||||
widget_event,
|
||||
widget_items,
|
||||
widget_page
|
||||
):
|
||||
"""
|
||||
Loading spinner should be hidden once widget content loads.
|
||||
"""
|
||||
widget_page.goto_widget_test_page(
|
||||
live_server_url, widget_organizer.slug, widget_event.slug)
|
||||
widget_page.wait_for_widget_load()
|
||||
|
||||
# Loading spinner should be hidden (display:none)
|
||||
loading = page.locator('.pretix-widget-loading')
|
||||
expect(loading).to_be_hidden()
|
||||
|
||||
def test_widget_loads_within_timeout(
|
||||
self,
|
||||
page: Page,
|
||||
live_server_url: str,
|
||||
widget_organizer,
|
||||
widget_event,
|
||||
widget_items,
|
||||
widget_page
|
||||
):
|
||||
"""
|
||||
Widget should fully load within 15 seconds.
|
||||
"""
|
||||
widget_page.goto_widget_test_page(
|
||||
live_server_url, widget_organizer.slug, widget_event.slug)
|
||||
|
||||
# Widget should appear within 15s
|
||||
page.wait_for_selector('.pretix-widget', timeout=15000)
|
||||
|
||||
# Items should be visible within 15s total
|
||||
expect(page.locator(
|
||||
f'.pretix-widget-item:has-text("{widget_items[0].name}")'
|
||||
)).to_be_visible(timeout=15000)
|
||||
|
||||
def test_no_javascript_errors_on_load(
|
||||
self,
|
||||
page: Page,
|
||||
live_server_url: str,
|
||||
widget_organizer,
|
||||
widget_event,
|
||||
widget_items,
|
||||
widget_page
|
||||
):
|
||||
"""
|
||||
Widget should load without any JavaScript console errors.
|
||||
"""
|
||||
errors = []
|
||||
page.on('pageerror', lambda err: errors.append(str(err)))
|
||||
|
||||
widget_page.goto_widget_test_page(
|
||||
live_server_url, widget_organizer.slug, widget_event.slug)
|
||||
widget_page.wait_for_widget_load()
|
||||
|
||||
# No JS errors should have occurred
|
||||
assert len(errors) == 0, f"JavaScript errors: {errors}"
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
class TestWidgetReload:
|
||||
"""Test widget behavior on page interactions."""
|
||||
|
||||
def test_widget_css_loads_correctly(
|
||||
self,
|
||||
page: Page,
|
||||
live_server_url: str,
|
||||
widget_organizer,
|
||||
widget_event,
|
||||
widget_items,
|
||||
widget_page
|
||||
):
|
||||
"""
|
||||
Widget CSS should load and apply styles.
|
||||
No SCSS syntax should leak into rendered styles.
|
||||
"""
|
||||
widget_page.goto_widget_test_page(
|
||||
live_server_url, widget_organizer.slug, widget_event.slug)
|
||||
widget_page.wait_for_widget_load()
|
||||
|
||||
# Check that widget has actual styled dimensions
|
||||
# (not zero-height which would indicate CSS failure)
|
||||
widget = page.locator('.pretix-widget')
|
||||
box = widget.bounding_box()
|
||||
assert box is not None
|
||||
assert box['height'] > 50 # Widget should have meaningful height
|
||||
assert box['width'] > 100 # Widget should have meaningful width
|
||||
Reference in New Issue
Block a user