File size: 1,263 Bytes
981aa5d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from pathlib import Path
import ast


PROJECT_ROOT = Path(__file__).resolve().parents[1]
APP_PY = PROJECT_ROOT / "src" / "codex_dashboard" / "app.py"


def _method_source(class_name: str, method_name: str) -> str:
    source = APP_PY.read_text(encoding="utf-8")
    tree = ast.parse(source)
    for node in ast.walk(tree):
        if isinstance(node, ast.ClassDef) and node.name == class_name:
            for item in node.body:
                if isinstance(item, ast.FunctionDef) and item.name == method_name:
                    return ast.get_source_segment(source, item) or ""
    raise AssertionError(f"missing {class_name}.{method_name}")


def test_session_refresh_status_distinguishes_database_error_from_no_sessions():
    source = _method_source("CodexDashboard", "refresh_sessions")

    assert "list_threads_result" in source
    assert ".error" in source
    assert "Session database error" in source
    assert "No Codex sessions found" not in source


def test_log_refresh_status_distinguishes_database_error_from_no_logs():
    source = _method_source("CodexDashboard", "refresh_logs")

    assert "list_logs_result" in source
    assert ".error" in source
    assert "Log database error" in source
    assert "No Codex logs found" not in source