# Testing Guide ## Overview This guide explains how to test the Python implementation and validate it against the SQL query. ## Quick Start ### 1. Run Validation Script Compare Python output with SQL output: ```bash cd backend/python_service python scripts/validate_against_sql.py ``` This will: - Run the SQL query - Run the Python processing - Compare outputs - Generate a detailed report ### 2. Test API Endpoint Start the service and test the endpoint: ```bash # Terminal 1: Start Python service cd backend/python_service uvicorn main:app --reload --port 8010 # Terminal 2: Test endpoint curl "http://localhost:8010/api/options-flow?start_date=2024-01-01&end_date=2024-01-02" ``` ### 3. Integration Test with Node.js Test the full stack: ```bash # Terminal 1: Start Python service cd backend/python_service uvicorn main:app --reload --port 8010 # Terminal 2: Start Node.js backend cd backend npm run dev # Terminal 3: Test Node.js endpoint (should call Python service) curl "http://localhost:3010/api/options/flow?startDate=2024-01-01&endDate=2024-01-02" ``` ## Validation Checklist ### ✅ Data Accuracy - [ ] Row counts match SQL - [ ] All columns present - [ ] Numeric values match (within tolerance) - [ ] Text values match - [ ] Dates/times formatted correctly ### ✅ Business Logic - [ ] Badge calculations correct - [ ] Rocket scores match - [ ] Price context correct - [ ] Alert matching works - [ ] Filtering logic matches SQL ### ✅ Performance - [ ] Processing time acceptable - [ ] Memory usage reasonable - [ ] Database queries optimized - [ ] No N+1 query problems ### ✅ Error Handling - [ ] Handles missing data gracefully - [ ] Handles invalid dates - [ ] Handles database errors - [ ] Returns meaningful error messages ## Manual Testing ### Test Edge Cases 1. **Empty Data:** ```python # Test with date range that has no data start_date = "2020-01-01" end_date = "2020-01-02" ``` 2. **Null Values:** - Test with missing Premium - Test with missing dates - Test with missing prices 3. **Date Formats:** - Test various date formats in input - Test timezone conversions 4. **Large Datasets:** - Test with 10,000+ rows - Monitor memory usage - Check processing time ### Test Badge Logic Verify each badge type: - 💎 Diamond badge conditions - ⭐ Star badge conditions - 💰 Money badge conditions - ✔ Check badge conditions - ⚡ Flash badge conditions - 🚀 Rocket badge conditions ### Test Scoring Verify rocket score calculation: - Premium tier scoring - Net premium imbalance - Volume > OI bonus - Session weights - Catalyst flag - OTM bias - Tape alignment ## Automated Testing ### Unit Tests (Recommended) Create unit tests for each component: ```python # tests/test_options_flow_processor.py import pytest from services.options_flow_processor import OptionsFlowProcessor def test_normalize_call_put(): processor = OptionsFlowProcessor() assert processor.normalize_call_put('C') == 'CALL' assert processor.normalize_call_put('P') == 'PUT' assert processor.normalize_call_put('invalid') is None def test_calculate_moneyness(): # Test ITM/OTM calculations pass # Add more tests... ``` ### Integration Tests Test the full pipeline: ```python # tests/test_integration.py import pytest from datetime import datetime from services.options_flow_processor import OptionsFlowProcessor @pytest.mark.asyncio async def test_full_pipeline(): # Load test data # Run processing # Verify output pass ``` ## Performance Testing ### Benchmark Script ```python import time from datetime import datetime, timedelta start = time.time() # Run processing end = time.time() print(f"Processing time: {end - start:.2f} seconds") ``` ### Load Testing Use tools like: - `locust` for load testing - `ab` (Apache Bench) for simple load tests - Custom scripts for specific scenarios ## Debugging ### Enable Debug Logging ```python from utils.logger import setup_logger logger = setup_logger(level=logging.DEBUG) ``` ### Check Intermediate Results Add logging at each step: ```python logger.debug(f"After step X: {len(df)} rows, columns: {df.columns.tolist()}") ``` ### Compare Step-by-Step Compare each processing step with SQL equivalent: 1. Base normalization 2. Flow filtering 3. Moneyness calculation 4. Aggregations 5. Badges 6. Price context 7. Alert matching 8. Final formatting ## Common Issues ### Issue: Row Count Mismatch **Possible causes:** - Date filtering differences - NULL handling differences - Filter logic differences **Solution:** - Check date parsing - Verify NULL handling - Compare WHERE clause logic ### Issue: Value Differences **Possible causes:** - Floating point precision - Rounding differences - Calculation order **Solution:** - Use tolerance for comparisons - Check rounding logic - Verify calculation formulas ### Issue: Missing Columns **Possible causes:** - Column name mismatches - Missing processing steps - Output formatting issues **Solution:** - Check column mappings - Verify all processing steps - Compare output formatter ## Next Steps 1. Create comprehensive unit tests 2. Set up CI/CD with automated testing 3. Add performance benchmarks 4. Create test data fixtures 5. Add regression tests