mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-05-07 02:51:50 +00:00
test(kanban): regression for status=running rejection at dashboard PATCH
Reporter of #19535 explicitly asked for a regression test — covers it here so a future refactor of _set_status_direct can't silently re-enable the direct ready/todo -> running bypass. Asserts both: (a) HTTP 400 with 'running' in the detail message, and (b) the task's status is unchanged after the rejected PATCH (pre-request status preserved, no partial mutation).
This commit is contained in:
parent
6b3efcee49
commit
a8b689f0c2
1 changed files with 27 additions and 0 deletions
|
|
@ -253,6 +253,33 @@ def test_patch_invalid_status(client):
|
||||||
assert r.status_code == 400
|
assert r.status_code == 400
|
||||||
|
|
||||||
|
|
||||||
|
def test_patch_status_running_rejected(client):
|
||||||
|
"""Dashboard PATCH cannot transition a task directly to 'running'.
|
||||||
|
|
||||||
|
The only legitimate path into 'running' is through the dispatcher's
|
||||||
|
``claim_task`` — which atomically creates a ``task_runs`` row,
|
||||||
|
claim_lock, expiry, and worker-PID metadata. Allowing a direct set
|
||||||
|
creates orphaned 'running' tasks with no run row or claim, which
|
||||||
|
violate the board's run-history invariants. See issue #19535.
|
||||||
|
"""
|
||||||
|
t = client.post("/api/plugins/kanban/tasks", json={"title": "x"}).json()["task"]
|
||||||
|
r = client.patch(
|
||||||
|
f"/api/plugins/kanban/tasks/{t['id']}",
|
||||||
|
json={"status": "running"},
|
||||||
|
)
|
||||||
|
assert r.status_code == 400
|
||||||
|
assert "running" in r.json()["detail"]
|
||||||
|
# Task's status should still be its pre-request value — the direct-set
|
||||||
|
# was rejected before any mutation.
|
||||||
|
board = client.get("/api/plugins/kanban/board").json()
|
||||||
|
statuses = {
|
||||||
|
tt["id"]: col["name"]
|
||||||
|
for col in board["columns"]
|
||||||
|
for tt in col["tasks"]
|
||||||
|
}
|
||||||
|
assert statuses.get(t["id"]) != "running"
|
||||||
|
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# Comments + Links
|
# Comments + Links
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue