Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 12 additions & 4 deletions tests/test_admin_contract.py

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔍 Node dependency remains implicit

The test invokes node, but the main test job neither installs nor versions it. Runner-provided tooling therefore controls this contract test's reproducibility.

(Refers to this code)

Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
from __future__ import annotations

import json
from pathlib import Path
import shutil
import subprocess
import sys

sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
Expand Down Expand Up @@ -177,17 +180,22 @@ def test_model_group_mutations_refresh_audit_events() -> None:
assert "model_groups_refresh_warning" in ADMIN_TRANSLATIONS["ko"]

def source_between(start_marker: str, end_marker: str) -> str:
"""Extract one function declaration's source, parenthesized into an
expression so ``eval()`` yields the function itself rather than
``undefined`` (eval's completion value for a bare declaration
statement)."""
start_index = ADMIN_HTML.index(start_marker)
end_index = ADMIN_HTML.index(end_marker, start_index)
return ADMIN_HTML[start_index:end_index].strip()
return "(" + ADMIN_HTML[start_index:end_index].strip() + ")"

node_script = "\n".join(
[
'import assert from "node:assert/strict";',
f"const refreshModelGroups = eval({json.dumps(source_between('async function refreshModelGroups()', ' function showModelGroupRefreshWarning'))});",
f"const refreshAuditEvents = eval({json.dumps(source_between('async function refreshAuditEvents()', ' async function refreshModelGroupViews'))});",
f"const refreshModelGroups = eval({json.dumps(source_between('async function refreshModelGroups()', ' async function refreshAuditEvents'))});",
f"const refreshAuditEvents = eval({json.dumps(source_between('async function refreshAuditEvents()', ' function showModelGroupRefreshWarning'))});",
f"const showModelGroupRefreshWarning = eval({json.dumps(source_between('function showModelGroupRefreshWarning(message)', ' async function refreshModelGroupViews'))});",
f"const refreshModelGroupViews = eval({json.dumps(source_between('async function refreshModelGroupViews()', ' async function saveModelGroup'))});",
f"const saveModelGroup = eval({json.dumps(source_between('async function saveModelGroup(event)', ' async function deleteModelGroup'))});",
f"const saveModelGroup = eval({json.dumps(source_between('async function saveModelGroup(event)', ' function renderTrace(result)'))});",
f"const deleteModelGroup = eval({json.dumps(source_between('async function deleteModelGroup(groupName)', ' els.modelGroups.addEventListener'))});",
Comment on lines +189 to 199

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📝 Info: Extraction boundaries preserve isolation

Each source_between range ends at the next declaration. Parentheses make the extracted declaration evaluate to a callable without capturing unrelated functions.

Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

"let queuedResponses = [];",
"const calls = [];",
Expand Down
Loading