import pytest from playwright.sync_api import Page import subprocess @pytest.fixture(autouse=True) def setup_test_data(): """Setup test data before each test session""" subprocess.run(["uv", "run", "manage.py", "create_test_users"], check=True) yield subprocess.run(["uv", "run", "manage.py", "cleanup_test_data"], check=True) @pytest.fixture(autouse=True) def setup_page(page: Page): """Configure page for tests""" # Set viewport size page.set_viewport_size({"width": 1280, "height": 720}) # Set default navigation timeout page.set_default_timeout(5000) # Listen for console errors page.on( "console", lambda msg: ( print(f"Browser console {msg.type}: {msg.text}") if msg.type == "error" else None ), ) yield page @pytest.fixture def auth_page(page: Page): """Fixture for authenticated page""" # Login page.goto("http://localhost:8000/accounts/login/") page.get_by_label("Username").fill("testuser") page.get_by_label("Password").fill("testpass123") page.get_by_role("button", name="Sign In").click() yield page @pytest.fixture def mod_page(page: Page): """Fixture for moderator page""" # Login as moderator page.goto("http://localhost:8000/accounts/login/") page.get_by_label("Username").fill("moderator") page.get_by_label("Password").fill("modpass123") page.get_by_role("button", name="Sign In").click() yield page @pytest.fixture def test_park(auth_page: Page): """Fixture for test park""" # Create test park auth_page.goto("http://localhost:8000/parks/create/") auth_page.get_by_label("Name").fill("Test Park") auth_page.get_by_label("Location").fill("Orlando, FL") auth_page.get_by_label("Description").fill("A test theme park") auth_page.get_by_label("Photo").set_input_files("tests/fixtures/test_photo.jpg") auth_page.get_by_role("button", name="Create Park").click() yield auth_page @pytest.fixture def test_ride(test_park: Page): """Fixture for test ride""" # Create test ride test_park.goto("http://localhost:8000/rides/create/") test_park.get_by_label("Name").fill("Test Ride") test_park.get_by_label("Park").select_option("Test Park") test_park.get_by_label("Type").select_option("Roller Coaster") test_park.get_by_label("Description").fill("A test ride") test_park.get_by_label("Photo").set_input_files("tests/fixtures/test_photo.jpg") test_park.get_by_role("button", name="Create Ride").click() yield test_park @pytest.fixture def test_review(test_park: Page): """Fixture for test review""" # Create test review test_park.goto("http://localhost:8000/parks/test-park/") test_park.get_by_role("tab", name="Reviews").click() test_park.get_by_role("button", name="Write Review").click() test_park.get_by_label("Rating").select_option("5") test_park.get_by_label("Title").fill("Test Review") test_park.get_by_label("Review").fill("This is a test review") test_park.get_by_role("button", name="Submit Review").click() yield test_park