Files
ewoooc/tests/test_action_plan_dedupe.py
OoO 5e2186a808
All checks were successful
CD Pipeline / deploy (push) Successful in 1m0s
防止 action_plans 重複回長
2026-05-19 21:19:41 +08:00

90 lines
2.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import asyncio
class _Result:
def __init__(self, row=None):
self._row = row
def fetchone(self):
return self._row
class _Session:
def __init__(self, exists=False):
self.exists = exists
self.calls = []
self.commits = 0
def execute(self, statement, params=None):
self.calls.append((str(statement), params or {}))
return _Result((1,) if self.exists else None)
def commit(self):
self.commits += 1
def rollback(self):
pass
def close(self):
pass
def test_nemotron_direct_response_is_not_persisted(monkeypatch):
import services.ai_orchestrator as module
session = _Session()
monkeypatch.setattr(module, "get_session", lambda: session)
plan = {
"session_id": "tg-1",
"dispatch_to": "direct_response",
"action_plan": [{"action": "reply_simple", "params": {"message": "hello"}}],
}
asyncio.run(module.AIOrchestrator()._save_action_plan(plan))
assert session.calls == []
assert session.commits == 0
def test_nemotron_duplicate_executable_plan_is_skipped(monkeypatch):
import services.ai_orchestrator as module
session = _Session(exists=True)
monkeypatch.setattr(module, "get_session", lambda: session)
plan = {
"session_id": "tg-1",
"plan_type": "price_adjust",
"sku": "SKU-1",
"action_plan": [{"action": "flag_for_human_review"}],
}
asyncio.run(module.AIOrchestrator()._save_action_plan(plan))
assert len(session.calls) == 1
assert "SELECT id" in session.calls[0][0]
assert session.commits == 0
def test_code_review_active_file_dedupe_uses_file_path_marker():
from services.action_plan_dedupe import active_code_review_action_exists
session = _Session(exists=True)
assert active_code_review_action_exists(session, "services/config.py") is True
params = session.calls[0][1]
assert params["desc_prefix"] == "Code Review 修復services/config.py%"
assert '"file": "services/config.py"' in params["metadata_marker"]
def test_openclaw_metadata_contains_stable_fingerprint():
import json
from services.action_plan_dedupe import openclaw_action_metadata
first = json.loads(openclaw_action_metadata(10, "**立即調查**:昨日業績為零"))
second = json.loads(openclaw_action_metadata(10, "立即調查 昨日業績為零"))
assert first["created_by"] == "openclaw"
assert first["dedupe_fingerprint"] == second["dedupe_fingerprint"]