82 lines
3.0 KiB
Python
82 lines
3.0 KiB
Python
import json
|
|
from pathlib import Path
|
|
|
|
from plugin_eval.engine import EvalEngine
|
|
from plugin_eval.models import Depth, EvalConfig
|
|
from plugin_eval.reporter import Reporter, _effective_depth
|
|
|
|
|
|
class TestReporter:
|
|
def test_json_output(self, sample_skill_dir: Path):
|
|
config = EvalConfig(depth=Depth.QUICK)
|
|
engine = EvalEngine(config)
|
|
result = engine.evaluate_skill(sample_skill_dir)
|
|
|
|
reporter = Reporter()
|
|
output = reporter.to_json(result)
|
|
parsed = json.loads(output)
|
|
assert "composite" in parsed
|
|
assert "layers" in parsed
|
|
assert parsed["composite"]["confidence_label"] == "Estimated"
|
|
|
|
def test_markdown_output(self, sample_skill_dir: Path):
|
|
config = EvalConfig(depth=Depth.QUICK)
|
|
engine = EvalEngine(config)
|
|
result = engine.evaluate_skill(sample_skill_dir)
|
|
|
|
reporter = Reporter()
|
|
output = reporter.to_markdown(result)
|
|
assert "# PluginEval Report" in output
|
|
assert "Overall Score" in output
|
|
assert "Layer Breakdown" in output
|
|
assert "Dimension Scores" in output
|
|
|
|
|
|
class TestDepthDowngradeWarning:
|
|
"""When plugin-level evaluation silently downgrades a deep/standard request
|
|
to static-only, the reporter must surface the downgrade in-band so the
|
|
consumer cannot mistake the score for a deeply-evaluated one.
|
|
"""
|
|
|
|
def test_effective_depth_matches_layers_run(self, sample_skill_dir: Path) -> None:
|
|
config = EvalConfig(depth=Depth.QUICK)
|
|
engine = EvalEngine(config)
|
|
result = engine.evaluate_skill(sample_skill_dir)
|
|
assert _effective_depth(result) is Depth.QUICK
|
|
|
|
def test_markdown_shows_no_warning_when_depth_was_honored(
|
|
self, sample_skill_dir: Path
|
|
) -> None:
|
|
config = EvalConfig(depth=Depth.QUICK)
|
|
engine = EvalEngine(config)
|
|
result = engine.evaluate_skill(sample_skill_dir)
|
|
|
|
output = Reporter().to_markdown(result)
|
|
assert "(requested)" not in output
|
|
assert "downgraded" not in output
|
|
|
|
def test_markdown_shows_warning_when_plugin_eval_downgrades_depth(
|
|
self, sample_plugin_dir: Path
|
|
) -> None:
|
|
# Plugin-level eval at deep depth: the engine runs only the static
|
|
# layer regardless. The report must say so clearly.
|
|
config = EvalConfig(depth=Depth.DEEP)
|
|
engine = EvalEngine(config)
|
|
result = engine.evaluate_plugin(sample_plugin_dir)
|
|
|
|
output = Reporter().to_markdown(result)
|
|
assert "deep (requested)" in output
|
|
assert "quick (effective)" in output
|
|
assert "downgraded" in output
|
|
|
|
def test_markdown_shows_warning_when_standard_depth_is_downgraded(
|
|
self, sample_plugin_dir: Path
|
|
) -> None:
|
|
config = EvalConfig(depth=Depth.STANDARD)
|
|
engine = EvalEngine(config)
|
|
result = engine.evaluate_plugin(sample_plugin_dir)
|
|
|
|
output = Reporter().to_markdown(result)
|
|
assert "standard (requested)" in output
|
|
assert "quick (effective)" in output
|