File size: 1,838 Bytes
a345062
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import pandas as pd
import pytest

# Importiere die zu testende Funktion aus der App-Datei
from app import run_and_display

def test_run_and_display_logic(mocker):
    """
    Testet die Datenverarbeitungs- und UI-Formatierungslogik in `app.py`.
    Wir mocken die teure `run_seismic_analysis`-Funktion, um uns nur auf die
    Logik von `run_and_display` zu konzentrieren.
    """
    # 1. Definiere die Schein-Ausgabe, die `run_seismic_analysis` zurückgeben soll
    mock_results = {
        "verdict": "Mock Verdict",
        "stats": {
            "mean_delta": 0.5,
            "std_delta": 0.1,
            "max_delta": 1.0,
        },
        "state_deltas": [0.4, 0.5, 0.6]
    }
    mocker.patch('app.run_seismic_analysis', return_value=mock_results)

    # Mocke den Gradio Progress-Callback
    mock_progress = mocker.MagicMock()

    # 2. Rufe die zu testende Funktion auf
    verdict_md, plot_df, raw_json = run_and_display(
        model_id="mock_model",
        prompt_type="mock_prompt",
        seed=42,
        num_steps=3,
        progress=mock_progress
    )

    # 3. Validiere die Ausgaben mit granularen Assertions

    # ASSERT 1: Die Markdown-Ausgabe muss die korrekten Statistiken enthalten
    assert "Mock Verdict" in verdict_md
    assert "Mean Delta:" in verdict_md
    assert "0.5000" in verdict_md
    assert "Std Dev Delta:" in verdict_md
    assert "0.1000" in verdict_md

    # ASSERT 2: Der Pandas DataFrame für den Plot muss korrekt erstellt werden
    assert isinstance(plot_df, pd.DataFrame)
    assert "Internal Step" in plot_df.columns
    assert "State Change (Delta)" in plot_df.columns
    assert len(plot_df) == 3
    assert plot_df["State Change (Delta)"].tolist() == [0.4, 0.5, 0.6]

    # ASSERT 3: Die Raw-JSON-Ausgabe muss die Originaldaten enthalten
    assert raw_json == mock_results