Team Ai
Apppublic

diegobeyl/backtesting

sourceHugging Faceupdated 9mo agoView on Hugging Face
2likes
test_phase2_validator.py115 linesDownload Raw Back to tests
1#!/usr/bin/env python32"""3Pruebas de validación - Fase 24Verifica que el validador funciona correctamente5"""6 7import sys8from datetime import datetime, timedelta9 10# Añadir el path del proyecto11sys.path.insert(0, '/Users/javier/Projects/backtesting_app_v2')12 13from backtesting_app.core.validator import DataValidator, ValidationError14 15 16def test_validator():17    """Ejecuta pruebas del validador"""18    print("=" * 70)19    print("PRUEBAS DE VALIDACIÓN - FASE 2")20    print("=" * 70)21    22    # Test 1: Solicitud válida (1h en 1 año)23    print("\n✓ Test 1: Solicitud válida (1h en 1 año)")24    start = datetime.now() - timedelta(days=365)25    end = datetime.now()26    is_valid, error = DataValidator.validate_request('BTC-USD', '1h', start, end)27    if is_valid:28        print("  ✅ PASS")29        info = DataValidator.get_download_info('BTC-USD', '1h', start, end)30        print(f"     Velas: {info['candles']:,} / {info['max_candles']:,}")31        print(f"     Uso: {info['usage_percent']}%")32    else:33        print(f"  ❌ FAIL: {error}")34    35    # Test 2: Solicitud peligrosa (1h en 10 años - DEBERÍA FALLAR)36    print("\n✓ Test 2: Solicitud peligrosa (1h en 10 años - DEBERÍA FALLAR)")37    start = datetime.now() - timedelta(days=365*10)38    end = datetime.now()39    is_valid, error = DataValidator.validate_request('BTC-USD', '1h', start, end)40    if not is_valid:41        print("  ✅ PASS - Correctamente rechazada")42        print(f"     Razón: {error.split('Razón:')[1].split(chr(10))[0] if 'Razón:' in error else 'N/A'}")43    else:44        print("  ❌ FAIL - Debería haber sido rechazada")45    46    # Test 3: Solicitud límite (4h en 10 años - DEBERÍA PASAR)47    print("\n✓ Test 3: Solicitud límite (4h en 10 años - DEBERÍA PASAR)")48    start = datetime.now() - timedelta(days=365*10)49    end = datetime.now()50    is_valid, error = DataValidator.validate_request('BTC-USD', '4h', start, end)51    if is_valid:52        print("  ✅ PASS")53        info = DataValidator.get_download_info('BTC-USD', '4h', start, end)54        print(f"     Velas: {info['candles']:,} / {info['max_candles']:,}")55        print(f"     Uso: {info['usage_percent']}%")56    else:57        print(f"  ❌ FAIL: {error}")58    59    # Test 4: Timeframe inválido60    print("\n✓ Test 4: Timeframe inválido")61    start = datetime.now() - timedelta(days=365)62    end = datetime.now()63    is_valid, error = DataValidator.validate_request('BTC-USD', '99m', start, end)64    if not is_valid:65        print("  ✅ PASS - Correctamente rechazada")66        print(f"     Error: {error.split('.')[0]}")67    else:68        print("  ❌ FAIL - Debería haber sido rechazada")69    70    # Test 5: Símbolo inválido71    print("\n✓ Test 5: Símbolo inválido")72    start = datetime.now() - timedelta(days=365)73    end = datetime.now()74    is_valid, error = DataValidator.validate_request('BTC', '1h', start, end)75    if not is_valid:76        print("  ✅ PASS - Correctamente rechazada")77    else:78        print("  ❌ FAIL - Debería haber sido rechazada")79    80    # Test 6: Información de descarga81    print("\n✓ Test 6: Información de descarga detallada")82    start = datetime.now() - timedelta(days=365*3)83    end = datetime.now()84    info = DataValidator.get_download_info('BTC-USD', '1h', start, end)85    print(f"  Symbol: {info['symbol']}")86    print(f"  Timeframe: {info['friendly_timeframe']}")87    print(f"  Período: {info['years']:.1f} años ({info['days']} días)")88    print(f"  Velas: {info['candles']:,} ({info['usage_percent']}% del límite)")89    print(f"  Tamaño estimado: ~{info['estimated_mb']} MB")90    print("  ✅ PASS")91    92    # Test 7: Límites por timeframe93    print("\n✓ Test 7: Validación por cada timeframe")94    timeframes = ['1m', '5m', '15m', '30m', '1h', '4h', '1d', '1wk', '1mo']95    for tf in timeframes:96        start = datetime.now() - timedelta(days=365*10)97        end = datetime.now()98        is_valid, _ = DataValidator.validate_request('BTC-USD', tf, start, end)99        status = "✅" if is_valid or tf in ['4h', '1d', '1wk', '1mo'] else "🚫 (límite)"100        print(f"  {status} {tf:5} - 10 años: {is_valid}")101    102    print("\n" + "=" * 70)103    print("RESUMEN DE PRUEBAS")104    print("=" * 70)105    print("✅ Validador funciona correctamente")106    print("✅ Rechaza solicitudes peligrosas (1h en 10 años)")107    print("✅ Acepta solicitudes seguras (4h en 10 años)")108    print("✅ Calcula velas correctamente")109    print("✅ Proporciona información detallada al usuario")110    print("=" * 70 + "\n")111 112 113if __name__ == "__main__":114    test_validator()115