upskill-event-manager/wordpress-dev/TESTING.md
bengizmo 261ab99e88 docs: Update testing documentation and add deployment resilience scripts
- Enhanced documentation with selector stability best practices
- Added recommendations for resilient testing and deployment
- Created verify-selectors.sh script to validate critical selectors pre-deployment
- Added pre-deploy-validation.sh for comprehensive environment validation
- Improved troubleshooting section with specific recommendations

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-05-21 20:37:32 -03:00

184 lines
No EOL
5.9 KiB
Markdown

# HVAC Community Events Testing Guide
This document provides guidance for running tests in the HVAC Community Events plugin, with a focus on the certificate functionality testing.
## Test Infrastructure
The testing infrastructure uses the following components:
- **Playwright**: For end-to-end (E2E) testing of the UI
- **PHPUnit**: For unit and integration testing of PHP code
- **Shell Scripts**: For test automation and test data generation
## Setting Up the Testing Environment
### Prerequisites
- Node.js 16+
- npm 7+
- Staging environment access (Cloudways)
- SSH access to staging server
### Installation
1. Install dependencies:
```bash
npm install
```
2. Install Playwright browsers:
```bash
npx playwright install
```
## E2E Testing
The E2E tests use the Page Object Model (POM) pattern:
- `BasePage.ts`: Common functionality for all pages
- `LoginPage.ts`: Login-related actions
- `DashboardPage.ts`: Dashboard actions
- `CertificatePage.ts`: Certificate-specific actions
### Running Certificate Tests
The certificate tests verify the generation and filtering of certificates:
```bash
# Run all certificate tests
npx playwright test tests/e2e/certificates.test.ts
# Run certificate generation test
npx playwright test tests/e2e/certificate-generation-checked-in.test.ts
```
### Using Test Scripts
Several automated test scripts are available in the `bin` directory:
#### Certificate Filter Testing
The `test-certificate-filter.sh` script allows you to test different certificate filter combinations:
```bash
./bin/test-certificate-filter.sh
```
This interactive script lets you:
- Run all certificate filter tests
- Run only event filtering tests
- Run only attendee filtering tests
- Run a custom filter test
#### E2E Test Optimization
The `optimize-e2e-tests.sh` script helps troubleshoot and optimize the E2E testing infrastructure:
```bash
./bin/optimize-e2e-tests.sh
```
This script:
- Checks for Playwright installation issues
- Validates the test directory structure
- Analyzes the Playwright configuration
- Provides recommendations for improvement
## Test Data Generation
To generate test data for certificate testing:
1. Create test events with attendees:
```bash
./bin/create-test-data-with-checkins.sh
```
2. Generate certificates for checked-in attendees:
```bash
./bin/generate-test-certificates.sh
```
3. Verify test data:
```bash
./bin/verify-certificate-data.sh
```
## Testing Best Practices
1. **Test Independence**:
- Each test should create its own test data
- Tests should not depend on the state from other tests
- Clean up test data when possible
- Use isolated test users for different test suites
2. **Explicit Waits**:
- Use explicit waits rather than fixed timeouts
- Wait for specific elements/conditions, not fixed times
- Use appropriate timeouts for WordPress's slower operations
- Add logging for long-running operations
3. **Error Handling**:
- Implement proper error handling in tests
- Use try/catch blocks for potentially unstable operations
- Take screenshots on failures for easier debugging
- Implement comprehensive error message detection
4. **Selector Stability**:
- Use CSS selectors that are less likely to change
- Prefer attribute selectors (e.g., `input[name="log"]`) over ID selectors
- Use multiple selector strategies with fallbacks for critical elements
- Create debug scripts to verify selectors when UI changes
- Centralize selectors in page objects for easier maintenance
5. **Resilient Deployment**:
- Run pre-deployment selector verification tests
- Implement health check scripts to validate the environment
- Use canary deployments with automatic rollback on test failures
- Maintain versioned snapshots of UI components
- Add comprehensive monitoring of test execution
## Continuous Integration
The tests are configured to run in CI environments:
- `playwright.config.ts`: Contains CI-specific configuration
- Test retries are enabled for CI environments to handle flaky tests
- Detailed reporting is set up for CI environments
## Troubleshooting Common Issues
1. **Timeouts**: If tests are timing out, check network connectivity and server response times.
2. **Selector Issues**: If elements can't be found, check if selectors need updating due to UI changes.
- Use the `debug-login-page.spec.ts` script to analyze login form structure
- Use robust attribute selectors (e.g., `input[name="log"]`) instead of ID selectors
- Implement multiple selector strategies with fallbacks for critical elements
- Run selector verification tests before and after WordPress updates
3. **Authentication Problems**: Make sure test credentials are correct and the user has appropriate permissions.
- Use the `bin/create-test-users.sh` script to ensure test users exist with correct roles
- Verify login form structure with the debug scripts before running main tests
- Implement robust error message detection in the LoginPage class
4. **Data Dependencies**: Ensure tests handle the case where expected data isn't present.
- Use data generation scripts to create known test data
- Implement check-and-create patterns in test setup
5. **Plugin Activation**: Some tests require the plugin to be freshly activated; use the plugin deactivation/activation commands.
- Run `bin/verify-plugin-status.sh` before tests to ensure plugin is active
- Consider automating plugin activation as part of test setup
## Testing Certificate Features
The certificate features have dedicated tests:
1. **Certificate Generation**: Tests the process of generating certificates for event attendees.
2. **Certificate Filtering**: Tests filtering certificates by:
- Event
- Attendee name/email
- Combined filters
3. **Certificate Management**: Tests certificate actions like viewing, downloading, and revoking.
For detailed information on certificate testing, see the `tests/e2e/TESTING-STRATEGY.md` file.