- 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>
184 lines
No EOL
5.9 KiB
Markdown
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. |