# Test Desktop App Skill **Description**: Run and test desktop applications locally during development. ## When to Use - Developing new desktop features - Verifying fixes before release - Manual testing workflows - Debugging desktop-specific issues ## Prerequisites ### Environment Setup - Backend services running (if applicable) - Python 3.12+ with virtual environment - Required platform-specific dependencies - Configuration files with necessary secrets ### LysnrAI Desktop Specific ```bash # Backend must be running ./run-local-all-services.sh start # Verify backend health curl http://127.0.0.1:8000/health # Azure credentials required ls ~/.lysnrai/.env # Must contain AZURE_SPEECH_KEY, AZURE_OPENAI_KEY, etc. ``` ## Testing Workflow ### 1. Prepare Environment ```bash # Activate virtual environment source .venv/bin/activate # Or create if doesn't exist python3 -m venv .venv source .venv/bin/activate # Install dependencies pip install -r requirements.txt ``` ### 2. Verify Configuration ```bash # Check environment file ls ~/.lysnrai/.env || echo "Missing env file" # Verify required variables grep -E "AZURE_SPEECH_KEY|AZURE_OPENAI_KEY" ~/.lysnrai/.env ``` ### 3. Launch Application ```bash # Python desktop app python3 -m src.main # Or with specific module python src/main.py # For Electron apps npm run dev # For Qt apps python main.py ``` ### 4. Test Core Functionality Create a test checklist: #### Basic Functionality - [ ] Application window opens correctly - [ ] Menu bar/toolbar appears - [ ] App icon shows in dock/taskbar - [ ] Window can be resized and moved #### Authentication - [ ] Login/registration flow works - [ ] License key activation (if applicable) - [ ] Session persistence - [ ] Logout functionality #### Core Features - [ ] Main feature works (e.g., dictation, recording) - [ ] Settings panel opens and saves - [ ] File operations (save/load) - [ ] Keyboard shortcuts work #### Platform Integration - [ ] Menu bar integration (macOS) - [ ] System tray icon (Windows/Linux) - [ ] Global hotkeys - [ ] Notifications ### 5. Platform-Specific Testing #### macOS ```bash # Test menu bar integration # Verify Fn/Globe key works (if applicable) # Check sandboxing permissions # Test Notarization (if signed) # macOS specific checks spctl -a -v /Applications/YourApp.app codesign -dv --verbose=4 /Applications/YourApp.app ``` #### Windows ```bash # Test Windows integration # Check registry entries # Verify installer works # Test auto-startup # Windows specific checks signtool verify /pa YourApp.exe ``` #### Linux ```bash # Test Linux integration # Verify desktop entry # Check file associations # Test package installation # Linux specific checks desktop-file-validate yourapp.desktop ``` ## Debugging Desktop Apps ### Logging Setup ```python # Python logging example import structlog logger = structlog.get_logger() # In main() logger.info("Application starting", version="1.0.0") logger.error("Failed to connect", service="backend", error=str(e)) ``` ### Common Issues 1. **Application won't start** ```bash # Check Python version python --version # Check dependencies pip list # Run with verbose output python -v src/main.py ``` 2. **Backend connection issues** ```bash # Verify backend is running curl http://localhost:8000/health # Check network configuration netstat -an | grep 8000 ``` 3. **Permission issues** ```bash # macOS: check sandboxing spctl -a -v YourApp.app # Check file permissions ls -la ~/.lysnrai/ ``` ### Debug Mode ```python # Add debug flag import argparse parser = argparse.ArgumentParser() parser.add_argument('--debug', action='store_true') args = parser.parse_args() if args.debug: logging.basicConfig(level=logging.DEBUG) ``` ## Test Data Management ### Sample Data Setup ```python # Create test data directory os.makedirs(os.path.expanduser('~/.lysnrai/test_data'), exist_ok=True) # Sample configuration test_config = { "user_id": "test-user-123", "license_key": "LYSNR-TEST-1234-5678", "theme": "dark" } ``` ### Reset Test Environment ```bash # Clear test data rm -rf ~/.lysnrai/test_data # Reset settings rm ~/.lysnrai/settings.json # Clear logs > ~/.lysnrai/app.log ``` ## Automated Testing ### Unit Tests for Desktop ```python # tests/test_desktop.py import pytest from src.main import DesktopApp class TestDesktopApp: def test_app_initialization(self): app = DesktopApp() assert app.is_initialized def test_settings_load(self): app = DesktopApp() settings = app.load_settings() assert 'theme' in settings def test_backend_connection(self): app = DesktopApp() assert app.check_backend_health() ``` ### UI Automation (Python) ```python # Using PyAutoGUI for UI testing import pyautogui def test_main_window(): # Find and click menu pyautogui.click('File', duration=0.25) pyautogui.click('New', duration=0.25) # Verify new window assert pyautogui.locateOnScreen('new_window.png') ``` ## Performance Testing ### Memory Usage ```bash # Monitor memory usage top -pid $(pgrep -f "python.*main.py") # Or with psutil python -c " import psutil import time while True: p = psutil.Process() print(f'Memory: {p.memory_info().rss / 1024 / 1024:.2f} MB') time.sleep(1) " ``` ### Startup Time ```python import time import subprocess start = time.time() subprocess.run(['python', 'src/main.py']) startup_time = time.time() - start print(f"Startup time: {startup_time:.2f}s") ``` ## Test Documentation ### Test Report Template ```markdown # Desktop Test Report ## Environment - OS: macOS 14.0 - Python: 3.12.0 - App Version: 1.0.0 ## Test Results | Feature | Status | Notes | | --------- | ------ | ---------------------------- | | Launch | ✅ | Starts in 2.3s | | Login | ✅ | Works with test account | | Recording | ❌ | Fails without mic permission | | Settings | ✅ | Saves correctly | ## Issues Found 1. Microphone permission not requested on first launch 2. High memory usage (~200MB idle) ## Recommendations 1. Add permission request on startup 2. Investigate memory leak ``` ## CI/CD Integration ### GitHub Actions for Desktop Tests ```yaml name: Test Desktop App on: [push, pull_request] jobs: test: runs-on: ${{ matrix.os }} strategy: matrix: os: [macos-latest, windows-latest, ubuntu-latest] steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v4 with: python-version: '3.12' - name: Install dependencies run: | pip install -r requirements.txt pip install pytest - name: Run unit tests run: pytest tests/test_desktop.py - name: Test app launch run: | timeout 10s python -m src.main || true # Check if process started pgrep -f "python.*main.py" && echo "App started successfully" ``` ## Best Practices ### Testing Strategy 1. **Test early, test often** - Run tests after each change 2. **Automate repetitive tests** - Use scripts for common workflows 3. **Test on target platforms** - Don't rely on cross-platform behavior 4. **Document test cases** - Keep track of what needs testing ### Test Environment 1. **Isolate test data** - Use separate directory for tests 2. **Clean state** - Reset between test runs 3. **Mock external services** - Don't depend on real APIs 4. **Version control test data** - Commit test fixtures ## Notes - **Platform differences matter** - Test on all target platforms - **Permissions are critical** - Especially on macOS and Windows - **User interaction varies** - Consider different user workflows - **Performance matters** - Monitor startup time and memory usage ## Related Skills - [Desktop Release](./desktop-release.md) - After testing - [Debug Service](./debug-service.md) - When tests fail - [Production Readiness](./production-readiness.md) - Pre-release testing - [Security Auditing](./security-auditing.md) - Security testing