forked from Rockachopa/Timmy-time-dashboard
57 lines
2.1 KiB
Python
57 lines
2.1 KiB
Python
"""Unit tests for multimodal helper scripts."""
|
|
|
|
from pathlib import Path
|
|
|
|
import pytest
|
|
import scripts.doc_drift_detector as drift
|
|
import scripts.visual_log_analyzer as logs
|
|
|
|
pytestmark = pytest.mark.unit
|
|
|
|
|
|
def test_scan_codebase_finds_python_and_config(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> None:
|
|
src = tmp_path / "src"
|
|
src.mkdir()
|
|
(src / "alpha.py").write_text(
|
|
"import json\n\n\ndef do_work():\n return json.dumps({'ok': True})\n",
|
|
encoding="utf-8",
|
|
)
|
|
(tmp_path / "settings.yml").write_text("enabled: true\n", encoding="utf-8")
|
|
|
|
monkeypatch.chdir(tmp_path)
|
|
detector = drift.ArchitectureDriftDetector(str(src))
|
|
components = detector.scan_codebase()
|
|
|
|
alpha = next(c for c in components if c.name == "alpha")
|
|
assert alpha.path == "src/alpha.py"
|
|
assert alpha.component_type == "module"
|
|
assert alpha.lines_of_code >= 2
|
|
assert any(c.path.endswith("settings.yml") and c.component_type == "config" for c in components)
|
|
|
|
|
|
def test_detect_drift_matches_normalized_component_names() -> None:
|
|
detector = drift.ArchitectureDriftDetector("src")
|
|
diagram = [drift.DiagramComponent(name="Alpha Service", component_type="service")]
|
|
code = [drift.CodeComponent(name="alpha_service", path="src/alpha_service.py", component_type="module", lines_of_code=75)]
|
|
|
|
report = detector.detect_drift(diagram, code)
|
|
|
|
assert report.missing_from_code == []
|
|
assert report.missing_from_docs == []
|
|
assert report.confidence == 1.0
|
|
|
|
|
|
def test_visual_log_analyzer_builds_prompts() -> None:
|
|
analyzer = logs.VisualLogAnalyzer()
|
|
|
|
analyze = analyzer.analyze_screenshot("/tmp/htop.png", "htop")
|
|
assert analyze["screenshot_path"] == "/tmp/htop.png"
|
|
assert analyze["monitor_type"] == "htop"
|
|
assert "CPU usage above 80%" in analyze["prompt"]
|
|
assert analyze["instruction"] == "Use vision_analyze tool with this prompt"
|
|
|
|
compare = analyzer.compare_screenshots("before.png", "after.png")
|
|
assert compare["before"] == "before.png"
|
|
assert compare["after"] == "after.png"
|
|
assert "Overall health trend" in compare["prompt"] or "Overall health trend".lower() in compare["prompt"].lower()
|