Spaces:
				
			
			
	
			
			
					
		Running
		
	
	
	
			
			
	
	
	
	
		
		
					
		Running
		
	Pre-Commit Hook System
Overview
This project now enforces the rule: ALL TESTS MUST PASS BEFORE COMMITTING. This is implemented through a Git pre-commit hook that automatically runs tests before allowing any commit.
What It Does
	
		
	
	
		β
 Pre-Commit Hook (.git/hooks/pre-commit)
	
- Automatically runs tests before every git commit
- Blocks commits if any tests fail
- Provides helpful error messages and guidance
- Can be bypassed with --no-verify(not recommended)
	
		
	
	
		β
 Test Runner Script (scripts/run-tests.sh)
	
- Comprehensive test suite runner for manual testing
- Runs different test categories separately
- Provides detailed reporting and success/failure tracking
- Helps identify which specific tests are failing
How It Works
1. Automatic Test Execution
Every time you run git commit, the pre-commit hook:
- Runs core tests (main, middleware, logging, errors)
- Checks if all tests pass
- Allows commit if tests pass
- Blocks commit if tests fail
2. Test Categories
- Core Tests: Always run in pre-commit hook - test_main.py- Main application tests
- test_middleware.py- Request middleware tests
- test_logging.py- Logging system tests
- test_errors.py- Error handling tests
 
- Full Test Suite: Available via - scripts/run-tests.sh- All test files including API, services, 502 prevention, etc.
 
Usage
Normal Development Workflow
# Make your changes
git add .
git commit -m "Your commit message"
# Tests run automatically - commit only succeeds if tests pass
Manual Test Running
# Run comprehensive test suite
./scripts/run-tests.sh
# Run specific test files
python -m pytest tests/test_main.py -v
# Run all tests
python -m pytest tests/ -v
Emergency Bypass (NOT RECOMMENDED)
# Only use in emergencies - bypasses all tests
git commit --no-verify -m "Emergency commit"
Benefits
π‘οΈ Quality Assurance
- Prevents broken code from being committed
- Enforces test-driven development
- Maintains code quality standards
- Prevents regressions from being introduced
π Development Efficiency
- Catches issues early before they reach the repository
- Provides immediate feedback on code changes
- Reduces debugging time in production
- Maintains consistent code quality
π Team Collaboration
- Ensures all team members follow the same standards
- Prevents "it works on my machine" issues
- Maintains repository stability
- Facilitates code reviews
Configuration
Pre-Commit Hook Location
- File: .git/hooks/pre-commit
- Permissions: Executable (chmod +x)
- Scope: Project-specific (not shared via git)
Test Runner Location
- File: scripts/run-tests.sh
- Permissions: Executable (chmod +x)
- Scope: Project-wide (shared via git)
Troubleshooting
Tests Fail in Pre-Commit Hook
- Fix the failing tests first
- Run tests manually to verify: python -m pytest tests/ -v
- Try committing again
Pre-Commit Hook Not Working
- Check permissions: ls -la .git/hooks/pre-commit
- Make executable: chmod +x .git/hooks/pre-commit
- Verify content: cat .git/hooks/pre-commit
Need to Disable Temporarily
# Rename the hook to disable it
mv .git/hooks/pre-commit .git/hooks/pre-commit.disabled
# Rename back to enable it
mv .git/hooks/pre-commit.disabled .git/hooks/pre-commit
Best Practices
β Do
- Write tests for all new features
- Fix failing tests before committing
- Run full test suite before major changes
- Use descriptive commit messages
β Don't
- Bypass tests with --no-verifyunless absolutely necessary
- Commit broken code even temporarily
- Ignore test failures or warnings
- Skip writing tests for new functionality
Success Metrics
- β Zero broken commits in repository history
- β All tests pass before every commit
- β Consistent code quality across all changes
- β Reduced production bugs due to early detection
- β Faster development cycles with immediate feedback
Remember: The pre-commit hook is your friend! It helps maintain code quality and prevents issues from reaching production. Embrace it as part of your development workflow.