File size: 2,383 Bytes
a345062
 
5ab2ded
 
a345062
8489475
 
 
 
d407fda
a345062
8489475
 
 
 
5ab2ded
d407fda
 
8489475
 
5ab2ded
 
d407fda
 
5ab2ded
d407fda
 
 
a345062
8489475
 
a345062
d407fda
 
a345062
 
d407fda
 
5ab2ded
d407fda
5ab2ded
 
d407fda
5ab2ded
d407fda
5ab2ded
 
d407fda
5ab2ded
 
d407fda
5ab2ded
 
d407fda
 
 
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
56
57
import pandas as pd
import pytest
import gradio as gr
from pandas.testing import assert_frame_equal

from app import run_single_analysis_display, run_auto_suite_display

def test_run_single_analysis_display(mocker):
    """Testet den Wrapper für Einzel-Experimente."""
    mock_results = {"verdict": "V", "stats": {"mean_delta": 1}, "state_deltas": [1.0, 2.0]}
    mocker.patch('app.run_seismic_analysis', return_value=mock_results)
    mocker.patch('app.cleanup_memory')

    verdict, df, raw = run_single_analysis_display(progress=mocker.MagicMock())

    assert "V" in verdict and "1.0000" in verdict
    assert isinstance(df, pd.DataFrame) and len(df) == 2
    assert "State Change (Delta)" in df.columns

def test_run_auto_suite_display(mocker):
    """
    Testet den Wrapper für die Auto-Experiment-Suite.
    FINAL KORRIGIERT: Validiert nun die korrekte `dict`-Struktur, die von
    `gradio.LinePlot` zurückgegeben wird, und rekonstruiert den DataFrame für den Vergleich.
    """
    mock_summary_df = pd.DataFrame([{"Experiment": "E1", "Mean Delta": 1.5}])
    mock_plot_df = pd.DataFrame([{"Step": 0, "Delta": 1.0, "Experiment": "E1"}, {"Step": 1, "Delta": 2.0, "Experiment": "E1"}])
    mock_results = {"E1": {"stats": {"mean_delta": 1.5}}}

    mocker.patch('app.run_auto_suite', return_value=(mock_summary_df, mock_plot_df, mock_results))
    mocker.patch('app.cleanup_memory')

    summary_df, plot_component, raw_json_str = run_auto_suite_display(
        "mock-model", 100, 42, "mock_exp", progress=mocker.MagicMock()
    )

    # Teste den DataFrame-Output
    assert_frame_equal(summary_df, mock_summary_df)

    # KORREKTUR: Teste die Gradio-Plot-Komponente. Ihr `value` ist ein Dictionary, kein DataFrame.
    assert isinstance(plot_component, gr.LinePlot)
    assert isinstance(plot_component.value, dict)
    assert 'data' in plot_component.value and 'columns' in plot_component.value

    # Rekonstruiere den DataFrame aus dem serialisierten Dictionary für einen exakten Vergleich.
    reconstructed_df = pd.DataFrame(
        plot_component.value['data'],
        columns=plot_component.value['columns']
    )

    # Nun sollte der Vergleich mit `assert_frame_equal` funktionieren.
    assert_frame_equal(reconstructed_df, mock_plot_df)

    # Teste den JSON-Output
    assert isinstance(raw_json_str, str)
    assert '"mean_delta": 1.5' in raw_json_str