mirror of
https://github.com/kennethreitz/kjvstudy.org.git
synced 2026-06-05 23:00:16 +00:00
81311dd32f
New test files: - test_edge_cases.py: Edge cases, error handling, validation (60+ tests) - test_web_routes.py: Web pages and HTML endpoints (40+ tests) - conftest.py: Shared fixtures and configuration - README.md: Test documentation and usage guide Test coverage includes: - API endpoints (all endpoints) - Edge cases and error handling - Book abbreviations and normalization - Search functionality - Content validation - Web page routes - HTML structure and metadata - Navigation and accessibility - Performance with large datasets - Boundary conditions Fixtures (shared via conftest.py): - client: TestClient for requests - sample_verses: Common verse references - sample_books: Sample book names - book_abbreviations: Abbreviation mappings - bible_facts: Known Bible facts Updated test_api.py to use shared fixtures from conftest.py. Run with: uv run pytest tests/ -v 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
146 lines
3.5 KiB
Markdown
146 lines
3.5 KiB
Markdown
# KJV Study API Tests
|
|
|
|
Comprehensive test suite for the KJV Study API and web application.
|
|
|
|
## Test Files
|
|
|
|
### `test_api.py`
|
|
Core API endpoint tests covering:
|
|
- Health checks
|
|
- Verse endpoints (single, range, verse of the day)
|
|
- Book endpoints (list, details, chapters, full text)
|
|
- Bible endpoint (entire Bible)
|
|
- Search functionality
|
|
- Interlinear data
|
|
- Cross-references
|
|
- Topics and reading plans
|
|
- Book name normalization
|
|
|
|
### `test_edge_cases.py`
|
|
Edge case and error handling tests:
|
|
- Invalid inputs and error responses
|
|
- Verse range edge cases
|
|
- Book abbreviations (comprehensive)
|
|
- Search functionality edge cases
|
|
- Book boundaries (shortest, longest, etc.)
|
|
- Cross-references edge cases
|
|
- Interlinear data edge cases
|
|
- Topics and reading plans edge cases
|
|
- Performance tests with large data
|
|
- Content validation
|
|
|
|
### `test_web_routes.py`
|
|
Web page and HTML endpoint tests:
|
|
- Homepage
|
|
- Book listing and detail pages
|
|
- Chapter and verse pages
|
|
- Search pages
|
|
- Topics and reading plans pages
|
|
- Resource pages
|
|
- 404 handling
|
|
- Redirects
|
|
- HTML structure and metadata
|
|
- Navigation elements
|
|
- Accessibility features
|
|
- Content types
|
|
|
|
### `conftest.py`
|
|
Shared pytest configuration and fixtures:
|
|
- `client` - TestClient for API requests
|
|
- `sample_verses` - Common verse references
|
|
- `sample_books` - Sample book names
|
|
- `book_abbreviations` - Abbreviation mappings
|
|
- `bible_facts` - Known Bible facts for validation
|
|
|
|
## Running Tests
|
|
|
|
### Run all tests
|
|
```bash
|
|
uv run pytest tests/ -v
|
|
```
|
|
|
|
### Run specific test file
|
|
```bash
|
|
uv run pytest tests/test_api.py -v
|
|
```
|
|
|
|
### Run specific test class
|
|
```bash
|
|
uv run pytest tests/test_api.py::TestVerseEndpoints -v
|
|
```
|
|
|
|
### Run specific test
|
|
```bash
|
|
uv run pytest tests/test_api.py::TestVerseEndpoints::test_get_single_verse -v
|
|
```
|
|
|
|
### Run with coverage
|
|
```bash
|
|
uv run pytest tests/ --cov=kjvstudy_org --cov-report=html
|
|
```
|
|
|
|
### Run tests in parallel (faster)
|
|
```bash
|
|
uv run pytest tests/ -n auto
|
|
```
|
|
|
|
## Test Categories
|
|
|
|
### Functional Tests
|
|
- API endpoints return correct data
|
|
- Web pages load correctly
|
|
- Search functionality works
|
|
- Data integrity
|
|
|
|
### Edge Cases
|
|
- Invalid inputs
|
|
- Boundary conditions
|
|
- Error handling
|
|
- Performance with large datasets
|
|
|
|
### Integration Tests
|
|
- Book name normalization
|
|
- Cross-references linking
|
|
- Interlinear data availability
|
|
- Content validation
|
|
|
|
## Fixtures
|
|
|
|
Fixtures are defined in `conftest.py` and automatically available to all test files:
|
|
|
|
- **client**: FastAPI TestClient for making requests
|
|
- **sample_verses**: Dictionary of common verse references
|
|
- **sample_books**: Dictionary of sample book names
|
|
- **book_abbreviations**: Mapping of abbreviations to full names
|
|
- **bible_facts**: Known facts about the KJV Bible
|
|
|
|
## Best Practices
|
|
|
|
1. **Use fixtures** - Leverage shared fixtures from conftest.py
|
|
2. **Descriptive names** - Test names should describe what they test
|
|
3. **Arrange-Act-Assert** - Follow AAA pattern in tests
|
|
4. **One assertion per concept** - Keep tests focused
|
|
5. **Test edge cases** - Don't just test happy paths
|
|
6. **Use parametrize** - For testing multiple similar cases
|
|
|
|
## Adding New Tests
|
|
|
|
When adding new functionality:
|
|
|
|
1. Add API tests to `test_api.py`
|
|
2. Add edge case tests to `test_edge_cases.py`
|
|
3. Add web route tests to `test_web_routes.py`
|
|
4. Update fixtures in `conftest.py` if needed
|
|
5. Run tests to ensure they pass
|
|
6. Add documentation if needed
|
|
|
|
## CI/CD Integration
|
|
|
|
These tests are designed to run in CI/CD pipelines:
|
|
|
|
```yaml
|
|
# Example GitHub Actions workflow
|
|
- name: Run tests
|
|
run: uv run pytest tests/ -v --cov
|
|
```
|