mirror of
https://github.com/OpenByteInc/QuantDinger.git
synced 2026-09-28 15:22:56 +08:00
50 lines
1.8 KiB
Python
50 lines
1.8 KiB
Python
import pytest
|
|
|
|
from app.services.ai_code_edits import CodeEditError, apply_model_code_edits
|
|
|
|
|
|
def test_structured_code_edits_apply_only_exact_unique_blocks():
|
|
source = "alpha = 1\nbeta = 2\ngamma = 3\n"
|
|
candidate, plan = apply_model_code_edits(
|
|
source,
|
|
{
|
|
"operations": [
|
|
{"old_text": "beta = 2", "new_text": "beta = 20"},
|
|
{"old_text": "gamma = 3", "new_text": "gamma = 30"},
|
|
]
|
|
},
|
|
)
|
|
|
|
assert candidate == "alpha = 1\nbeta = 20\ngamma = 30\n"
|
|
assert plan["executor"] == "model_patch"
|
|
assert plan["operation_count"] == 2
|
|
assert plan["operations"][0]["startLine"] == 2
|
|
|
|
|
|
def test_structured_code_edits_reject_missing_ambiguous_and_overlapping_anchors():
|
|
with pytest.raises(CodeEditError, match="edit_anchor_not_found"):
|
|
apply_model_code_edits("alpha\n", {"operations": [{"old_text": "beta", "new_text": "gamma"}]})
|
|
|
|
with pytest.raises(CodeEditError, match="edit_anchor_ambiguous"):
|
|
apply_model_code_edits("alpha\nalpha\n", {"operations": [{"old_text": "alpha", "new_text": "beta"}]})
|
|
|
|
with pytest.raises(CodeEditError, match="overlapping_edit_operations"):
|
|
apply_model_code_edits(
|
|
"alpha beta gamma",
|
|
{"operations": [
|
|
{"old_text": "alpha beta", "new_text": "one"},
|
|
{"old_text": "beta gamma", "new_text": "two"},
|
|
]},
|
|
)
|
|
|
|
|
|
def test_structured_code_edits_accept_json_fences_but_not_no_ops():
|
|
candidate, _plan = apply_model_code_edits(
|
|
"value = 1\n",
|
|
'```json\n{"operations":[{"old_text":"value = 1","new_text":"value = 2"}]}\n```',
|
|
)
|
|
assert candidate == "value = 2\n"
|
|
|
|
with pytest.raises(CodeEditError, match="invalid_edit_operations"):
|
|
apply_model_code_edits("value = 1\n", '{"operations":[]}')
|