- Deleted `TESTING_SETUP.md` and `TEST_UPDATES_SUMMARY.md` as they were outdated. - Introduced `CHANGELOG.md` to document notable changes and version history. - Added `DEVELOPMENT.md` for detailed development setup, testing framework, and debugging guidance. - Created `FEATURES.md` to outline core features and functionalities of TheChart. - Established `README.md` as a centralized documentation index for users and developers.
9.9 KiB
9.9 KiB
TheChart - Development Documentation
Development Environment Setup
Prerequisites
- Python 3.13+: Required for the application
- uv: Fast Python package manager (10-100x faster than pip/Poetry)
- Git: Version control
Quick Setup
# Clone and setup
git clone <repository-url>
cd thechart
# Install with uv (recommended)
make install
# Or manual setup
uv venv --python 3.13
uv sync
uv run pre-commit install --install-hooks --overwrite
Environment Activation
# fish shell (default)
source .venv/bin/activate.fish
# or
make shell
# bash/zsh
source .venv/bin/activate
# Using uv run (recommended)
uv run python src/main.py
Testing Framework
Test Infrastructure
Professional testing setup with comprehensive coverage and automation.
Testing Tools
- pytest: Modern Python testing framework
- pytest-cov: Coverage reporting (HTML, XML, terminal)
- pytest-mock: Mocking support for isolated testing
- coverage: Detailed coverage analysis
Test Statistics
- 93% Overall Code Coverage (482 total statements, 33 missed)
- 112 Total Tests across 6 test modules
- 80 Tests Passing (71.4% pass rate)
Coverage by Module
| Module | Coverage | Status |
|---|---|---|
| constants.py | 100% | ✅ Complete |
| logger.py | 100% | ✅ Complete |
| graph_manager.py | 97% | ✅ Excellent |
| init.py | 95% | ✅ Excellent |
| ui_manager.py | 93% | ✅ Very Good |
| main.py | 91% | ✅ Very Good |
| data_manager.py | 87% | ✅ Good |
Test Structure
Test Files
tests/test_data_manager.py(16 tests): CSV operations, validation, error handlingtests/test_graph_manager.py(14 tests): Matplotlib integration, dose calculationstests/test_ui_manager.py(21 tests): Tkinter UI components, user interactionstests/test_main.py(18 tests): Application integration, workflow testingtests/test_constants.py(12 tests): Configuration validationtests/test_logger.py(8 tests): Logging functionalitytests/test_init.py(23 tests): Initialization and setup
Test Fixtures (tests/conftest.py)
- Temporary Files: Safe testing without affecting real data
- Sample Data: Comprehensive test datasets with realistic dose information
- Mock Loggers: Isolated logging for testing
- Environment Mocking: Controlled test environments
Running Tests
Basic Testing
# Run all tests
make test
# or
uv run pytest
# Run specific test file
uv run pytest tests/test_graph_manager.py -v
# Run tests with specific pattern
uv run pytest -k "dose_calculation" -v
Coverage Testing
# Generate coverage report
uv run pytest --cov=src --cov-report=html
# Coverage with specific module
uv run pytest tests/test_graph_manager.py --cov=src.graph_manager --cov-report=term-missing
Continuous Testing
# Watch for changes and re-run tests
uv run pytest --watch
# Quick test runner script
./scripts/run_tests.py
Pre-commit Testing
Automated testing prevents commits when core functionality is broken.
Configuration
Located in .pre-commit-config.yaml:
- Core Tests: 3 essential tests run before each commit
- Fast Execution: Only critical functionality tested
- Commit Blocking: Prevents commits when tests fail
Core Tests
test_init: DataManager initializationtest_initialize_csv_creates_file_with_headers: CSV file creationtest_load_data_with_valid_data: Data loading functionality
Usage
# Automatic on commit
git commit -m "Your changes"
# Manual pre-commit check
pre-commit run --all-files
# Run just test check
pre-commit run pytest-check --all-files
Dose Calculation Testing
Comprehensive testing for the complex dose parsing and calculation system.
Test Categories
- Standard Format:
2025-07-28 18:59:45:150mg→ 150.0mg - Multiple Doses:
2025-07-28 18:59:45:150mg|2025-07-28 19:34:19:75mg→ 225.0mg - With Symbols:
• • • • 2025-07-30 07:50:00:300→ 300.0mg - Decimal Values:
2025-07-28 18:59:45:12.5mg|2025-07-28 19:34:19:7.5mg→ 20.0mg - No Timestamps:
100mg|50mg→ 150.0mg - Mixed Formats:
• 2025-07-30 22:50:00:10|75mg→ 85.0mg - Edge Cases: Empty strings, NaN values, malformed data → 0.0mg
Test Implementation
# Example test case
def test_calculate_daily_dose_standard_format(self, graph_manager):
dose_str = "2025-07-28 18:59:45:150mg|2025-07-28 19:34:19:75mg"
result = graph_manager._calculate_daily_dose(dose_str)
assert result == 225.0
Medicine Plotting Tests
Testing for the enhanced graph functionality with medicine dose visualization.
Test Areas
- Toggle Functionality: Medicine show/hide controls
- Dose Plotting: Bar chart generation for medicine doses
- Color Coding: Proper color assignment and consistency
- Legend Enhancement: Multi-column layout and average calculations
- Data Integration: Proper data flow from CSV to visualization
UI Testing Strategy
Testing user interface components with mock frameworks to avoid GUI dependencies.
UI Test Coverage
- Component Creation: Widget creation and configuration
- Event Handling: User interactions and callbacks
- Data Binding: Variable synchronization and updates
- Layout Management: Grid and frame arrangements
- Error Handling: User input validation and error messages
Mocking Strategy
# Example UI test with mocking
@patch('tkinter.Tk')
def test_create_input_frame(self, mock_tk, ui_manager):
parent = Mock()
result = ui_manager.create_input_frame(parent, {}, {})
assert result is not None
assert isinstance(result, dict)
Code Quality
Tools and Standards
- ruff: Fast Python linter and formatter (Rust-based)
- pre-commit: Git hook management for code quality
- Type Hints: Comprehensive type annotations
- Docstrings: Detailed function and class documentation
Code Formatting
# Format code
make format
# or
uv run ruff format .
# Check formatting
make lint
# or
uv run ruff check .
Pre-commit Hooks
Automatically installed hooks ensure code quality:
- Code Formatting: ruff formatting
- Linting Checks: Code quality validation
- Import Sorting: Consistent import organization
- Basic File Checks: Trailing whitespace, file endings
Development Workflow
Feature Development
- Create Feature Branch:
git checkout -b feature/new-feature - Implement Changes: Follow existing patterns and architecture
- Add Tests: Ensure new functionality is tested
- Run Tests:
make testto verify functionality - Code Quality:
make format && make lint - Commit Changes: Pre-commit hooks run automatically
- Create Pull Request: For code review
Medicine System Development
Adding new medicines or modifying the medicine system:
# Example: Adding a new medicine programmatically
from medicine_manager import MedicineManager, Medicine
medicine_manager = MedicineManager()
new_medicine = Medicine(
key="sertraline",
display_name="Sertraline",
dosage_info="50mg",
quick_doses=["25", "50", "100"],
color="#9B59B6",
default_enabled=False
)
medicine_manager.add_medicine(new_medicine)
Testing New Features
- Unit Tests: Add tests for new functionality
- Integration Tests: Test feature integration with existing system
- UI Tests: Test user interface changes
- Dose Calculation Tests: If affecting dose calculations
- Regression Tests: Ensure existing functionality still works
Debugging and Troubleshooting
Logging
Application logs are stored in logs/ directory:
app.log: General application logsapp.error.log: Error messages onlyapp.warning.log: Warning messages only
Debug Mode
Enable debug logging by modifying src/logger.py configuration.
Common Issues
Test Failures
- Matplotlib Mocking: Ensure proper matplotlib component mocking
- Tkinter Dependencies: Use headless testing for UI components
- File Path Issues: Use absolute paths in tests
- Mock Configuration: Proper mock setup for external dependencies
Development Environment
- Python Version: Ensure Python 3.13+ is used
- Virtual Environment: Always work within the virtual environment
- Dependencies: Keep dependencies up to date with
uv sync --upgrade
Performance Testing
- Dose Calculation Performance: Test with large datasets
- UI Responsiveness: Test with extensive medicine lists
- Memory Usage: Monitor memory consumption with large CSV files
- Graph Rendering: Test graph performance with large datasets
Architecture Documentation
Core Components
- MedTrackerApp: Main application class
- MedicineManager: Medicine CRUD operations
- PathologyManager: Pathology/symptom management
- GraphManager: Visualization and plotting
- UIManager: User interface creation
- DataManager: Data persistence and CSV operations
Data Flow
- User Input → UIManager → DataManager → CSV
- Data Loading → DataManager → pandas DataFrame → GraphManager
- Visualization → GraphManager → matplotlib → UI Display
Extension Points
- Medicine System: Add new medicine properties
- Graph Types: Add new visualization types
- Export Formats: Add new data export options
- UI Components: Add new interface elements
Deployment Testing
Standalone Executable
# Build executable
make deploy
# Test deployment
./dist/thechart
Docker Testing
# Build container
make build
# Test container
make start
make attach
Cross-platform Testing
- Linux: Primary development and testing platform
- macOS: Planned support (testing needed)
- Windows: Planned support (testing needed)
For user documentation, see README.md. For feature details, see docs/FEATURES.md.