Test Integrazione: Flusso Dati Background Color

Percorso File: tests/integration/test_bgcolor_flow.py Tipologia: Test di Integrazione / Anti-Regressione

1. Perché esiste questo file? (Il “Perché”)

Questo test è stato creato in risposta a un bug critico (v5.1.0) in cui i dati di colorazione dello sfondo (background_events), generati correttamente dalla strategia, venivano persi silenziosamente durante il trasporto verso l’interfaccia utente.

Il colpevole era il BacktestWorker, che ricostruiva manualmente il dizionario dei risultati scartando qualsiasi chiave non esplicitamente prevista (“Whitelist filtering”).

Questo test serve a garantire che:

  1. Il Pattern Passthrough (vedi QC DD-DATA-FLOW-PRINCIPLES) sia rispettato.
  2. Qualsiasi dato extra prodotto dal BacktestEngine (come background_events) arrivi intatto al segnale finished del Worker.

2. Come Funziona

Il test simula l’intera pipeline di backtest in memoria, senza avviare la GUI ma utilizzando i componenti reali:

  1. Mock Strategy: Utilizza una MockColorStrategy minimale che chiama self.bgcolor() ad ogni barra.
  2. Dati Dummy: Crea un DataFrame OHLCV sintetico di 10 righe.
  3. Esecuzione Sincrona: Istanzia un BacktestWorker e chiama direttamente il metodo .run() (bypassando il QThreadPool per semplicità di test).
  4. Asserzioni Critiche:
    • Verifica che il segnale finished contenga la chiave background_events (Il Fix).
    • Verifica che la lista contenga esattamente 10 eventi.
    • Verifica l’integrità dei dati (il colore della prima e dell’ultima barra).

3. Come Eseguirlo

Dalla root del progetto:

python tests/integration/test_bgcolor_flow.py

4. Manutenzione

Se in futuro il BacktestWorker dovesse essere rifattorizzato, questo test fallirà se il nuovo codice tornerà a filtrare le chiavi del dizionario invece di usare copy() e update().

Regola d’Oro: Se questo test fallisce, significa che abbiamo interrotto il flusso dei dati tra Engine e UI. NON modificare il test per farlo passare, ma correggere il Worker per lasciar passare i dati.