#!/usr/bin/env python3 """ Example E2E test demonstrating LoRa Manager testing workflow. This script shows how to: 1. Start the standalone server 2. Use Chrome DevTools MCP to interact with the UI 3. Verify functionality end-to-end Note: This is a template. Actual execution requires Chrome DevTools MCP. """ import subprocess import sys import time def run_test(): """Run example E2E test flow.""" print("=" * 60) print("LoRa Manager E2E Test Example") print("=" * 60) # Step 1: Start server print("\n[1/5] Starting LoRa Manager standalone server...") result = subprocess.run( [sys.executable, "start_server.py", "--port", "8188", "--wait", "--timeout", "30"], capture_output=True, text=True ) if result.returncode != 0: print(f"Failed to start server: {result.stderr}") return 1 print("Server ready!") # Step 2: Open Chrome (manual step - show command) print("\n[2/5] Open Chrome with debug mode:") print("google-chrome --remote-debugging-port=9222 --user-data-dir=/tmp/chrome-lora-manager http://127.0.0.1:8188/loras") print("(In actual test, this would be automated via MCP)") # Step 3: Navigate and verify page load print("\n[3/5] Page Load Verification:") print(""" MCP Commands to execute: 1. navigate_page(type="url", url="http://127.0.0.1:8188/loras") 2. wait_for(text="LoRAs", timeout=10000) 3. snapshot = take_snapshot() """) # Step 4: Test search functionality print("\n[4/5] Search Functionality Test:") print(""" MCP Commands to execute: 1. fill(uid="search-input", value="test") 2. press_key(key="Enter") 3. wait_for(text="Results", timeout=5000) 4. result = evaluate_script(function=""" () => { const cards = document.querySelectorAll('.lora-card'); return { count: cards.length }; } """) """) # Step 5: Verify API print("\n[5/5] API Verification:") print(""" MCP Commands to execute: 1. api_result = evaluate_script(function=""" async () => { const response = await fetch('/loras/api/list'); const data = await response.json(); return { count: data.length, status: response.status }; } """) 2. Verify api_result['status'] == 200 """) print("\n" + "=" * 60) print("Test flow completed!") print("=" * 60) return 0 def example_restart_flow(): """Example: Testing configuration change that requires restart.""" print("\n" + "=" * 60) print("Example: Server Restart Flow") print("=" * 60) print(""" Scenario: Change setting and verify after restart Steps: 1. Navigate to settings page - navigate_page(type="url", url="http://127.0.0.1:8188/settings") 2. Change a setting (e.g., theme) - fill(uid="theme-select", value="dark") - click(uid="save-settings-button") 3. Restart server - subprocess.run([python, "start_server.py", "--restart", "--wait"]) 4. Refresh browser - navigate_page(type="reload", ignoreCache=True) - wait_for(text="LoRAs", timeout=15000) 5. Verify setting persisted - navigate_page(type="url", url="http://127.0.0.1:8188/settings") - theme = evaluate_script(function="() => document.querySelector('#theme-select').value") - assert theme == "dark" """) def example_modal_interaction(): """Example: Testing modal dialog interaction.""" print("\n" + "=" * 60) print("Example: Modal Dialog Interaction") print("=" * 60) print(""" Scenario: Add new LoRA via modal Steps: 1. Open modal - click(uid="add-lora-button") - wait_for(text="Add LoRA", timeout=3000) 2. Fill form - fill_form(elements=[ {"uid": "lora-name", "value": "Test Character"}, {"uid": "lora-path", "value": "/models/test.safetensors"}, ]) 3. Submit - click(uid="modal-submit-button") 4. Verify success - wait_for(text="Successfully added", timeout=5000) - snapshot = take_snapshot() """) def example_network_monitoring(): """Example: Network request monitoring.""" print("\n" + "=" * 60) print("Example: Network Request Monitoring") print("=" * 60) print(""" Scenario: Verify API calls during user interaction Steps: 1. Clear network log (implicit on navigation) - navigate_page(type="url", url="http://127.0.0.1:8188/loras") 2. Perform action that triggers API call - fill(uid="search-input", value="character") - press_key(key="Enter") 3. List network requests - requests = list_network_requests(resourceTypes=["xhr", "fetch"]) 4. Find search API call - search_requests = [r for r in requests if "/api/search" in r.get("url", "")] - assert len(search_requests) > 0, "Search API was not called" 5. Get request details - if search_requests: details = get_network_request(reqid=search_requests[0]["reqid"]) - Verify request method, response status, etc. """) if __name__ == "__main__": print("LoRa Manager E2E Test Examples\n") print("This script demonstrates E2E testing patterns.\n") print("Note: Actual execution requires Chrome DevTools MCP connection.\n") run_test() example_restart_flow() example_modal_interaction() example_network_monitoring() print("\n" + "=" * 60) print("All examples shown!") print("=" * 60)