vpa / tests /test_environment.py
dipsubhro's picture
feat: add VPA environment and tests
178eb76
from vpa_env.environment import VpaEnvironment
from vpa_env.models import VpaAction
def test_reset_selects_requested_task() -> None:
env = VpaEnvironment()
observation = env.reset(task_id="easy-secret-rotation")
assert observation.task_id == "easy-secret-rotation"
assert observation.score == 0.2
def test_easy_task_reaches_full_score() -> None:
env = VpaEnvironment()
env.reset(task_id="easy-secret-rotation")
result = env.step(
VpaAction(
file_updates={
"app.py": (
"import os\n\n"
"def get_api_key() -> str:\n"
' return os.getenv("PAYMENT_API_KEY", "")\n'
)
},
submit=True,
)
)
assert result.done is True
assert result.reward == 0.8
assert result.score == 1.0
def test_hard_task_blocks_partial_fix_without_root_guard() -> None:
env = VpaEnvironment()
env.reset(task_id="hard-path-traversal")
result = env.step(
VpaAction(
file_updates={
"app.py": (
"from pathlib import Path\n\n"
'TEMPLATE_ROOT = Path("templates")\n\n'
"def read_template(name: str) -> str:\n"
' if ".." in name:\n'
' raise ValueError("unsafe path")\n'
" target = TEMPLATE_ROOT / name\n"
" return target.read_text()\n"
)
}
)
)
assert result.done is False
assert result.score == 0.5
assert "resolve paths" in result.remaining_findings[0]