- Updated architecture documentation to include details on UI rendering checks and Playwright end-to-end tests. - Revised testing documentation to specify Playwright for frontend E2E tests and added details on running tests. - Implemented feedback mechanism in scenario form for successful creation notifications. - Added feedback div in ScenarioForm.html for user notifications. - Created new fixtures for Playwright tests to manage server and browser instances. - Developed comprehensive E2E tests for consumption, costs, equipment, maintenance, production, and scenarios. - Added smoke tests to verify UI page loading and form submissions. - Enhanced unit tests for simulation and validation, including new tests for report generation and validation errors. - Created new test files for router validation to ensure consistent error handling. - Established a new test suite for UI routes to validate dashboard and reporting functionalities. - Implemented validation tests to ensure proper handling of JSON payloads.
50 lines
1.4 KiB
Python
50 lines
1.4 KiB
Python
import subprocess
|
|
import time
|
|
from typing import Generator
|
|
|
|
import pytest
|
|
from playwright.sync_api import Browser, Page, Playwright, sync_playwright
|
|
|
|
# Use a different port for the test server to avoid conflicts
|
|
TEST_PORT = 8001
|
|
BASE_URL = f"http://localhost:{TEST_PORT}"
|
|
|
|
|
|
@pytest.fixture(scope="function")
|
|
def live_server() -> Generator[str, None, None]:
|
|
"""Launch a live test server in a separate process."""
|
|
process = subprocess.Popen(
|
|
["uvicorn", "main:app", f"--port={TEST_PORT}"],
|
|
stdout=subprocess.PIPE,
|
|
stderr=subprocess.PIPE,
|
|
)
|
|
time.sleep(2) # Give the server a moment to start
|
|
yield BASE_URL
|
|
process.terminate()
|
|
process.wait()
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def playwright_instance() -> Generator[Playwright, None, None]:
|
|
"""Provide a Playwright instance for the test session."""
|
|
with sync_playwright() as p:
|
|
yield p
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def browser(
|
|
playwright_instance: Playwright,
|
|
) -> Generator[Browser, None, None]:
|
|
"""Provide a browser instance for the test session."""
|
|
browser = playwright_instance.chromium.launch()
|
|
yield browser
|
|
browser.close()
|
|
|
|
|
|
@pytest.fixture()
|
|
def page(browser: Browser, live_server: str) -> Generator[Page, None, None]:
|
|
"""Provide a new page for each test."""
|
|
page = browser.new_page(base_url=live_server)
|
|
yield page
|
|
page.close()
|