# Testing Documentation for Panasonic Heatpump Component

This directory contains comprehensive tests for the `panasonic_heatpump` ESPHome component.

## Test Structure

### Unit Tests (`test_panasonic_heatpump_unit.py`)
- Tests Python configuration validation
- Tests component metadata (CODEOWNERS, DEPENDENCIES, etc.)
- Tests configuration schema structure
- Tests all platform imports (sensor, binary_sensor, text_sensor, number, select, switch, climate)
- Tests code generation logic

### Integration Tests (`test_panasonic_heatpump_integration.py`)
- Tests minimal feature configuration on ESP32 board
- Tests full feature configuration on ESP32 board
- Tests configuration on ESP32-S2 board
- Tests configuration on ESP32-C3 board
- Tests configuration with CZ-TAW1 (UART-proxy)

### Test Configuration Files
- `test_panasonic_heatpump_esp32s2.yaml` - ESP32-S2 Wemos S2 Mini
- `test_panasonic_heatpump_esp32c3.yaml` - ESP32-C3 mini (RISC-V)
- `test_panasonic_heatpump_cztaw1.yaml` - UART proxy setup for CZ-TAW1 client support
- `test_panasonic_heatpump_mini.yaml` - Minimal ESP32 configuration for basic testing
- `test_panasonic_heatpump_full.yaml` - Comprehensive ESP32 configuration with all features

## Running Tests Locally

### Prerequisites
```bash
pip install -r tests/requirements.txt
```

### Run All Tests
```bash
pytest tests/panasonic_heatpump/ -v
```

### Run Only Unit Tests
```bash
pytest tests/panasonic_heatpump/test_panasonic_heatpump_unit.py -v
```

### Run Only Integration Tests
```bash
pytest tests/panasonic_heatpump/test_panasonic_heatpump_integration.py -v
```

### Run with Coverage
```bash
pytest tests/panasonic_heatpump/ -v --cov=components/panasonic_heatpump --cov-report=html
```

View coverage report by opening `htmlcov/index.html` in a browser.

### Run Specific Test
```bash
pytest tests/panasonic_heatpump/test_panasonic_heatpump_unit.py::TestPanasonicHeatpumpConfig::test_component_metadata -v
```

## GitHub Actions Workflow

The GitHub Actions workflow (`.github/workflows/test_panasonic_heatpump.yml`) includes:

### Jobs

1. **test-build**: Validates and compiles the component
   - Tests on multiple board types: ESP32 (full), ESP32-S2, ESP32-C3 and with CZ-TAW1 (UART-proxy)
   - Uses esphome/build-action for firmware compilation

2. **lint-code**: Runs clang-format on C++ code
   - Ensures consistent code formatting
   - Checks all .cpp and .h files

3. **lint-python**: Runs Python linters
   - black: Code formatting
   - flake8: Style guide enforcement

4. **test-python**: Runs Python unit tests
   - Executes pytest with coverage
   - Uploads coverage to Codecov

5. **test-minimal-config**: Tests minimal configuration
   - Validates minimal configuration file
   - Ensures component works with bare minimum settings

6. **test-full-config**: Tests full configuration
   - Validates full feature configuration with all platforms

7. **summary**: Aggregates all test results
   - Fails if any test job fails
   - Provides overview of all test results

### Triggers

The workflow runs on:
- Push to `main` or `heatpump**` branches
- Pull requests to `main` branch
- Manual workflow dispatch
- When relevant files change:
  - `components/panasonic_heatpump/**`
  - `tests/panasonic_heatpump/**`
  - `.github/workflows/test_panasonic_heatpump.yml`

## Test Coverage

The test suite covers:

✅ Component configuration validation  
✅ UART dependency checking  
✅ All sensor platforms  
✅ All binary sensor platforms  
✅ All text sensor platforms  
✅ All number control platforms  
✅ All select control platforms  
✅ All switch control platforms  
✅ All climate control platforms  
✅ Code compilation for different ESP boards  
✅ C++ code formatting  
✅ Python code formatting and style  

## Configuration Examples

### Minimal Configuration
```yaml
uart:
  - id: uart_hp
    tx_pin: GPIO1
    rx_pin: GPIO3
    baud_rate: 9600
    parity: EVEN

panasonic_heatpump:
  id: hp
```

### Full Configuration
```yaml
uart:
  - id: uart_heatpump
    tx_pin: GPIO37
    rx_pin: GPIO39
    baud_rate: 9600
    parity: EVEN
  - id: uart_client
    tx_pin: GPIO18
    rx_pin: GPIO16
    baud_rate: 9600
    parity: EVEN

panasonic_heatpump:
  id: my_heatpump
  uart_id: uart_heatpump
  uart_client_id: uart_client
  log_uart_msg: true
  update_interval: 3s
```

## Adding New Tests

When adding new features to the component:

1. Update `test_panasonic_heatpump.yaml` with new configuration options
2. Add unit tests in `test_panasonic_heatpump_unit.py`
3. Add integration tests in `test_panasonic_heatpump_integration.py` if needed
4. Update this README with new test coverage information

## Troubleshooting

### ESPHome Not Found
If you get "ESPHome not installed" errors, install it:
```bash
pip install esphome
```

### Import Errors
Make sure you're running pytest from the repository root:
```bash
cd /path/to/esphome_components
pytest tests/ -v
```

### Timeout Errors
Some tests may timeout on slower systems. Increase the timeout in `pytest.ini`:
```ini
timeout = 600  # 10 minutes
```

## Continuous Integration

All tests must pass before merging to main branch. The GitHub Actions workflow ensures:
- Code compiles successfully
- Code follows formatting standards
- All unit and integration tests pass
- Latest ESPHome versions is supported
- Only ESP32 boards are supported

## Contributing

When contributing to the panasonic_heatpump component:
1. Write tests for new features
2. Ensure all existing tests pass
3. Maintain or improve code coverage
4. Follow the existing code style
5. Update this documentation as needed
