mirror of
https://github.com/basnijholt/compose-farm.git
synced 2026-02-03 14:13:26 +00:00
102 lines
2.9 KiB
Python
102 lines
2.9 KiB
Python
"""Demo: Stack actions.
|
|
|
|
Records a ~30 second demo showing:
|
|
- Navigating to a stack page
|
|
- Viewing compose file in Monaco editor
|
|
- Triggering Restart action via command palette
|
|
- Watching terminal output stream
|
|
- Triggering Logs action
|
|
|
|
Run: pytest docs/demos/web/demo_stack.py -v --no-cov
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import TYPE_CHECKING
|
|
|
|
import pytest
|
|
from conftest import (
|
|
open_command_palette,
|
|
pause,
|
|
slow_type,
|
|
wait_for_sidebar,
|
|
)
|
|
|
|
if TYPE_CHECKING:
|
|
from playwright.sync_api import Page
|
|
|
|
|
|
@pytest.mark.browser # type: ignore[misc]
|
|
def test_demo_stack(recording_page: Page, server_url: str) -> None:
|
|
"""Record stack actions demo."""
|
|
page = recording_page
|
|
|
|
# Start on dashboard
|
|
page.goto(server_url)
|
|
wait_for_sidebar(page)
|
|
pause(page, 800)
|
|
|
|
# Navigate to grocy via command palette
|
|
open_command_palette(page)
|
|
pause(page, 400)
|
|
slow_type(page, "#cmd-input", "grocy", delay=100)
|
|
pause(page, 500)
|
|
page.keyboard.press("Enter")
|
|
page.wait_for_url("**/stack/grocy", timeout=5000)
|
|
pause(page, 1000) # Show stack page
|
|
|
|
# Click on Compose File collapse to show the Monaco editor
|
|
# The collapse uses a checkbox input, click it via the parent collapse div
|
|
compose_collapse = page.locator(".collapse", has_text="Compose File").first
|
|
compose_collapse.locator("input[type=checkbox]").click(force=True)
|
|
pause(page, 500)
|
|
|
|
# Wait for Monaco editor to load and show content
|
|
page.wait_for_selector("#compose-editor .monaco-editor", timeout=10000)
|
|
pause(page, 2000) # Let viewer see the compose file
|
|
|
|
# Smoothly scroll down to show more of the editor
|
|
page.evaluate("""
|
|
const editor = document.getElementById('compose-editor');
|
|
if (editor) {
|
|
editor.scrollIntoView({ behavior: 'smooth', block: 'center' });
|
|
}
|
|
""")
|
|
pause(page, 1200) # Wait for smooth scroll animation
|
|
|
|
# Close the compose file section
|
|
compose_collapse.locator("input[type=checkbox]").click(force=True)
|
|
pause(page, 500)
|
|
|
|
# Open command palette for stack actions
|
|
open_command_palette(page)
|
|
pause(page, 400)
|
|
|
|
# Filter to Restart action
|
|
slow_type(page, "#cmd-input", "restart", delay=120)
|
|
pause(page, 600)
|
|
|
|
# Execute Restart
|
|
page.keyboard.press("Enter")
|
|
pause(page, 300)
|
|
|
|
# Wait for terminal to expand and show output
|
|
page.wait_for_selector("#terminal-output .xterm", timeout=5000)
|
|
pause(page, 2500) # Let viewer see terminal streaming
|
|
|
|
# Open palette again for Logs
|
|
open_command_palette(page)
|
|
pause(page, 400)
|
|
|
|
# Filter to Logs action
|
|
slow_type(page, "#cmd-input", "logs", delay=120)
|
|
pause(page, 600)
|
|
|
|
# Execute Logs
|
|
page.keyboard.press("Enter")
|
|
pause(page, 300)
|
|
|
|
# Show log output
|
|
page.wait_for_selector("#terminal-output .xterm", timeout=5000)
|
|
pause(page, 2500) # Final view of logs
|