# AutoBackups - Playwright E2E Testing Integration ## Overview This project now includes comprehensive end-to-end (E2E) testing using **Playwright**, integrated with the Model Context Protocol (MCP) for automated testing of the AutoBackups Flask application. ## Features - 🎭 **Cross-browser testing** (Chromium, Firefox, WebKit) - 🔧 **Automated setup** with the Flask development server - 📊 **Comprehensive reporting** with HTML reports and screenshots - 🐛 **Debug mode** for test development - 🚀 **CI/CD ready** with GitHub Actions integration - 📱 **Responsive testing** across different viewport sizes - 🔌 **API testing** for backend endpoints ## Test Suites ### 1. Dashboard Tests (`dashboard.spec.js`) - Main dashboard loading and rendering - Navigation elements verification - Responsive design testing across different viewports - Visual regression testing with screenshots ### 2. Configuration Tests (`configuration.spec.js`) - Configuration page accessibility - Form elements detection and interaction - Data submission workflow - Input validation testing ### 3. API Tests (`api.spec.js`) - Health check endpoints - Backup API endpoints testing - CORS headers validation - POST request handling ### 4. Backup Workflow Tests (`backup-workflow.spec.js`) - Backup status display - Manual backup trigger functionality - Project list visualization - Backup scheduling interface - Progress and logging display ## Quick Start ### Prerequisites 1. **Conda environment** with AutoBackups dependencies: ```bash conda env create -f environment.yml conda activate autobackups ``` 2. **Node.js dependencies**: ```bash npm install ``` 3. **Playwright browsers**: ```bash npx playwright install ``` ### Running Tests #### Windows (PowerShell) ```powershell # Run all tests .\run-tests.bat # Run tests in headed mode (visible browser) .\run-tests.bat headed # Run specific test file .\run-tests.bat specific tests/e2e/dashboard.spec.js # Debug mode .\run-tests.bat debug # Show test report .\run-tests.bat report ``` #### Linux/Mac (Bash) ```bash # Make script executable chmod +x run-tests.sh # Run all tests ./run-tests.sh # Run tests in headed mode ./run-tests.sh headed # Run specific test file ./run-tests.sh specific tests/e2e/dashboard.spec.js # Debug mode ./run-tests.sh debug # Show test report ./run-tests.sh report ``` #### Direct NPX Commands ```bash # Run all tests npx playwright test # Run tests with visible browser npx playwright test --headed # Run specific test file npx playwright test tests/e2e/dashboard.spec.js # Run in debug mode npx playwright test --debug # Generate and show HTML report npx playwright show-report ``` ## Test Configuration ### Playwright Config (`playwright.config.js`) Key configurations: - **Base URL**: `http://localhost:5000` (Flask dev server) - **Timeout**: 30 seconds per test - **Retries**: 2 retries on CI, 0 locally - **Browsers**: Chromium, Firefox, WebKit - **Web Server**: Automatically starts Flask app before tests ### Test Data and Helpers The `tests/e2e/helpers/test-helpers.js` file provides: - Common test utilities - Form filling helpers - Screenshot utilities - Console logging setup - Test data generators ## Project Structure ``` ├── tests/ │ └── e2e/ │ ├── dashboard.spec.js # Dashboard functionality tests │ ├── configuration.spec.js # Configuration page tests │ ├── api.spec.js # API endpoint tests │ ├── backup-workflow.spec.js # Backup workflow tests │ ├── setup.js # Global test setup │ └── helpers/ │ └── test-helpers.js # Test utilities ├── playwright.config.js # Playwright configuration ├── package.json # Node.js dependencies ├── run-tests.sh # Linux/Mac test runner ├── run-tests.bat # Windows test runner ├── playwright-report/ # HTML test reports └── test-results/ # Test artifacts and screenshots ``` ## Environment Variables You can customize test behavior with environment variables: ```bash # Custom base URL export PLAYWRIGHT_BASE_URL=http://localhost:8080 # CI mode export CI=true # Debug mode export DEBUG=pw:api ``` ## Continuous Integration ### GitHub Actions The project includes a GitHub Actions workflow (`.github/workflows/e2e-tests.yml`) that: 1. Sets up Python 3.12 with Conda 2. Installs dependencies 3. Runs Playwright tests 4. Uploads test artifacts 5. Generates test reports ### Running in CI Tests automatically run on: - Push to `main` or `develop` branches - Pull requests to `main` or `develop` branches ## Test Reports ### HTML Report - Interactive report with test results - Screenshots and videos of failures - Trace viewer for debugging - Access via: `npx playwright show-report` ### JSON Report - Machine-readable test results - Located at: `test-results/playwright-results.json` - Useful for CI/CD integrations ## Best Practices ### Writing Tests 1. **Use Page Object Model** for complex interactions 2. **Wait for elements** properly with `page.waitForSelector()` 3. **Take screenshots** for visual verification 4. **Use data-testid** attributes for reliable element selection 5. **Test across browsers** by running full suite ### Debugging Tests 1. **Headed mode**: See browser interactions in real-time 2. **Debug mode**: Step through tests with Playwright Inspector 3. **Console logs**: Browser console messages are captured 4. **Screenshots**: Automatic screenshots on failures 5. **Video recording**: Videos of failed test runs ### Performance 1. **Parallel execution**: Tests run in parallel by default 2. **Selective testing**: Run specific test files during development 3. **CI optimization**: Different configurations for CI vs local development ## Troubleshooting ### Common Issues 1. **Port conflicts**: Ensure Flask app port (5000) is available 2. **Conda environment**: Make sure `autobackups` environment is activated 3. **Browser installation**: Run `npx playwright install` if browsers are missing 4. **Timeouts**: Increase timeout in `playwright.config.js` if needed ### Debug Commands ```bash # Check Playwright installation npx playwright --version # Verify browser installation npx playwright install --dry-run # Test configuration npx playwright test --list # Debug specific test npx playwright test tests/e2e/dashboard.spec.js --debug ``` ## Integration with MCP This Playwright setup is designed to work seamlessly with Model Context Protocol (MCP): 1. **Automated test generation** based on application features 2. **Dynamic test adaptation** as the application evolves 3. **Intelligent test selection** based on code changes 4. **Report analysis** and recommendation generation ## Next Steps 1. **Expand test coverage** for specific AutoBackups features 2. **Add visual regression testing** with baseline screenshots 3. **Integrate performance testing** with Playwright's performance APIs 4. **Set up test data management** for more complex scenarios 5. **Add accessibility testing** with axe-playwright integration ## Resources - [Playwright Documentation](https://playwright.dev/docs/intro) - [Playwright Best Practices](https://playwright.dev/docs/best-practices) - [Playwright CI/CD](https://playwright.dev/docs/ci) - [VS Code Playwright Extension](https://marketplace.visualstudio.com/items?itemName=ms-playwright.playwright)