muse-agent-example/tests/skills/准备任务上下文/test_pattern_binding_reader.py

77 lines
2.7 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.

#!/usr/bin/env python3
"""范式规划期绑定读取回归:load_confirmed_pattern_bindings(桩连接,不连真库)。
实验仓承载:绑定 = 最新一条已确认 assembly 规划行的 patternReferences。
确认 assembly 即激活绑定;无已确认 assembly 或没选范式时诚实返空(不报错)。
"""
import pathlib
import sys
import unittest
PROJECT_ROOT = pathlib.Path(__file__).resolve().parents[3]
SCRIPT_DIR = PROJECT_ROOT / "muse" / "lifecycle" / "context" / "skills" / "准备任务上下文" / "scripts"
sys.path.insert(0, str(SCRIPT_DIR))
from retrieve_writer_sources import load_confirmed_pattern_bindings # noqa: E402
class FakeCursor:
def __init__(self, row):
self._row = row
def fetchone(self):
return self._row
class FakeConn:
def __init__(self, row):
self._row = row
self.sql = None
self.params = None
def execute(self, sql, params=None):
self.sql = sql
self.params = params
return FakeCursor(self._row)
def assembly_payload(refs):
return {"schemaVersion": "assembly-v1", "workId": 12,
"patternReferences": refs, "knowledgeBindings": []}
class PatternBindingReaderTest(unittest.TestCase):
def test_returns_confirmed_assembly_pattern_references(self):
refs = [{"sourceId": "card:1", "sourceVersion": "v1", "name": "锁空坠杀"},
{"sourceId": "card:2", "sourceVersion": "v1", "name": "碎颅"}]
conn = FakeConn((assembly_payload(refs),))
result = load_confirmed_pattern_bindings(conn, work_id=12)
self.assertEqual(result, refs)
self.assertIn("section_type='assembly'", conn.sql)
self.assertIn("state='confirmed'", conn.sql)
self.assertIn("ORDER BY version DESC LIMIT 1", conn.sql)
self.assertEqual(conn.params, (12,))
def test_no_confirmed_assembly_returns_empty(self):
conn = FakeConn(None)
self.assertEqual(load_confirmed_pattern_bindings(conn, work_id=12), [])
def test_jsonb_as_string_is_parsed(self):
conn = FakeConn(('{"patternReferences": [{"sourceId": "card:9", "name": "x"}]}',))
result = load_confirmed_pattern_bindings(conn, work_id=12)
self.assertEqual(result, [{"sourceId": "card:9", "name": "x"}])
def test_empty_selection_returns_empty(self):
conn = FakeConn((assembly_payload([]),))
self.assertEqual(load_confirmed_pattern_bindings(conn, work_id=12), [])
def test_non_dict_references_are_filtered(self):
conn = FakeConn((assembly_payload([{"sourceId": "card:1"}, "bad", 42, None]),))
self.assertEqual(load_confirmed_pattern_bindings(conn, work_id=12),
[{"sourceId": "card:1"}])
if __name__ == "__main__":
unittest.main()