# Park Search Tests

## Why These Tests Are Disabled

These tests were disabled because they need updating to work with the new `ParkLocation` model instead of the generic `Location` model. The model refactoring changed how location data is stored and accessed for parks.

## Re-enabling These Tests

To re-enable these tests, follow these steps:

1. **Update model imports** in `test_filters.py` and `test_models.py`:
   - Replace `from apps.locations.models import Location` with `from apps.parks.models import ParkLocation`
   - Update any other location-related imports

2. **Update test fixtures** to use `ParkLocation` instead of `Location`:
   - Change factory classes to create `ParkLocation` instances
   - Update fixture data to match the new model structure

3. **Update assertions** to match new model structure:
   - Adjust field references (e.g., `park.location` may now be `park.park_location`)
   - Update any serializer-based assertions

4. **Move files** back to the active test directory:
   ```bash
   mv backend/apps/parks/tests_disabled/*.py backend/apps/parks/tests/
   ```

5. **Run tests** to verify they pass:
   ```bash
   uv run pytest backend/apps/parks/tests/
   ```

**Tracking**: See TODO(THRILLWIKI-XXX) for tracking issue

---

## Overview

Test suite for the park search functionality including:
- Autocomplete widget integration
- Search form validation
- Filter integration
- HTMX interaction
- View mode persistence

## Running Tests

```bash
# Run all park tests
uv run pytest parks/tests/

# Run specific search tests
uv run pytest parks/tests/test_search.py

# Run with coverage
uv run pytest --cov=parks parks/tests/
```

## Test Coverage

### Search API Tests
- `test_search_json_format`: Validates API response structure
- `test_empty_search_json`: Tests empty search handling
- `test_search_format_validation`: Verifies all required fields and types
- `test_suggestion_limit`: Confirms 8-item result limit

### Search Functionality Tests
- `test_autocomplete_results`: Validates real-time suggestion filtering
- `test_search_with_filters`: Tests filter integration with search
- `test_partial_match_search`: Verifies partial text matching works

### UI Integration Tests
- `test_view_mode_persistence`: Ensures view mode is maintained
- `test_empty_search`: Tests default state behavior
- `test_htmx_request_handling`: Validates HTMX interactions

### Data Format Tests
- Field types validation
- Location formatting
- Status display formatting
- URL generation
- Response structure

### Frontend Integration
- HTMX partial updates
- Alpine.js state management
- Loading indicators
- View mode persistence
- Keyboard navigation

### Test Commands
```bash
# Run all park tests
uv run pytest parks/tests/

# Run search tests specifically
uv run pytest parks/tests/test_search.py

# Run with coverage
uv run pytest --cov=parks parks/tests/
```

### Coverage Areas
1. Search Functionality:
   - Suggestion generation
   - Result filtering
   - Partial matching
   - Empty state handling

2. UI Integration:
   - HTMX requests
   - View mode switching
   - Loading states
   - Error handling

3. Performance:
   - Result limiting
   - Debouncing
   - Query optimization

4. Accessibility:
   - ARIA attributes
   - Keyboard controls
   - Screen reader support

## Configuration

Tests use pytest-django and require:
- PostgreSQL database
- HTMX middleware
- Autocomplete app configuration

## Fixtures

The test suite uses standard Django test fixtures. No additional fixtures required.

## Common Issues

1. Database Errors
   - Ensure PostGIS extensions are installed
   - Verify database permissions

2. HTMX Tests
   - Use `HTTP_HX_REQUEST` header for HTMX requests
   - Check response content for HTMX attributes

## Adding New Tests

When adding tests, ensure:
1. Database isolation using `@pytest.mark.django_db`
2. Proper test naming following `test_*` convention
3. Clear test descriptions in docstrings
4. Coverage for both success and failure cases
5. HTMX interaction testing where applicable

## Future Improvements

- Add performance benchmarks
- Include accessibility tests
- Add Playwright e2e tests
- Implement geographic search tests