Files
hermes-webui/tests/test_cron_no_agent_edit.py
2026-05-08 13:18:29 +08:00

72 lines
2.4 KiB
Python

"""Regression coverage for issue #1820: no-agent cron edits do not require prompts."""
from __future__ import annotations
import re
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
PANELS_JS = (ROOT / "static" / "panels.js").read_text()
def _function_body(name: str) -> str:
marker = f"function {name}("
start = PANELS_JS.find(marker)
assert start != -1, f"{name} not found"
paren = PANELS_JS.find("(", start)
assert paren != -1, f"{name} params not found"
depth = 0
for idx in range(paren, len(PANELS_JS)):
ch = PANELS_JS[idx]
if ch == "(":
depth += 1
elif ch == ")":
depth -= 1
if depth == 0:
brace = PANELS_JS.find("{", idx)
break
else:
raise AssertionError(f"{name} params did not terminate")
assert brace != -1, f"{name} body not found"
depth = 0
for idx in range(brace, len(PANELS_JS)):
ch = PANELS_JS[idx]
if ch == "{":
depth += 1
elif ch == "}":
depth -= 1
if depth == 0:
return PANELS_JS[brace + 1 : idx]
raise AssertionError(f"{name} body did not terminate")
def test_open_cron_edit_plumbs_no_agent_and_script_to_form():
body = _function_body("openCronEdit")
assert "no_agent: !!job.no_agent" in body
assert "script: job.script || ''" in body
def test_no_agent_form_drops_prompt_required_attribute_and_shows_script_context():
body = _function_body("_renderCronForm")
assert "no_agent" in body and "script" in body
assert "const isNoAgent = !!no_agent;" in body
assert "cron-no-agent-hint" in body
assert "No-agent script" in body
assert "${isNoAgent ? ' disabled' : ' required'}" in body
def test_save_cron_form_keeps_agent_prompt_required_but_skips_no_agent_edits():
body = _function_body("saveCronForm")
assert "const isNoAgent = !!(_cronPreFormDetail && _cronPreFormDetail.no_agent);" in body
assert "if(!isNoAgent && !prompt)" in body
assert "cron_prompt_required" in body
assert "if (!isNoAgent) updates.prompt = prompt;" in body
def test_no_agent_detail_displays_mode_and_script():
body = _function_body("_renderCronDetail")
assert "const isNoAgent = !!job.no_agent;" in body
assert "No-agent script" in body
assert "cronJobMode" in body
assert "job.script" in body