v0.3.3: Comprehensive test improvements
This release focuses on significantly improving test coverage and quality through TDD best practices.
Test Coverage Improvements
- search_parser.py: 44% → 98% coverage (+54 points)
- vfs/resolver.py: 55% → 99% coverage (+44 points)
- repl/shell.py: 56% → 64% coverage (+8 points)
New Test Suites
-
test_search_parser.py (83 tests, 1,026 lines)
- Field-specific searches (
title:Python,author:Knuth) - Boolean operators (AND, OR, NOT)
- Comparison operators (
rating:>=4,rating:3-5) - SQL generation and SQL injection protection
- Edge cases and error handling
- Field-specific searches (
-
test_vfs_resolver.py (47 tests, 695 lines)
- Path resolution (absolute, relative, special paths)
- Parent directory navigation
- Symlink resolution and tab completion
- Edge cases and error handling
-
test_repl.py (35 additional tests)
- Pipeline execution and chaining
- Output redirection
- Text processing commands
- Error handling and validation
Test Quality Improvements
Refactored 12 brittle tests to focus on behavior, not implementation:
- Removed
__repr__format tests → replaced with inspection tests - Refactored hash tests to focus on deduplication behavior
- Refactored unique ID tests to focus on uniqueness guarantees
- Refactored sort name tests to focus on ordering behavior
- Replaced magic number assertions with calculated expectations
- Replaced exact title assertions with ordering logic
Test Design Principles
All new and refactored tests follow TDD best practices:
- Given-When-Then structure for clarity
- Test behavior, not implementation - resilient to refactoring
- Independent and isolated - can run in any order
- Clear failure messages - easy debugging
- Living documentation - tests explain what the system does
Results
- Total tests: 662 passing (no regressions)
- Coverage: 75%+ maintained on refactored modules
- Test quality: All tests survive refactoring
- New tests added: 165 comprehensive tests
- Tests refactored: 12 tests improved for resilience
Benefits
- Can now change hash algorithms without breaking tests
- Can modify ID formats without test failures
- Can improve sort algorithms freely
- Tests serve as executable specifications
- Fearless refactoring enabled
Installation
pip install ebk==0.3.3