# -*- coding: utf-8 -*- # 样例:复制到 ``tests/test_action_core_contract.py`` 后按实际模块改名运行。 # 默认不会被 ``python tests/run_tests.py`` 收集(扩展名为 .sample)。 """ 单业务内核、多入口契约范式(通用)。 覆盖: - task / command adapter 调用唯一 domain service - 兼容命令复用同一个核心函数 - CLI handler 不复制业务逻辑 - 不根据 toolbar / cron / agent 来源改变业务处理 复制后把示意函数换成真实 import;禁止按入口维护多套实现。 """ from __future__ import annotations import unittest from typing import Any, Callable class DomainService: """唯一业务内核示意。""" def __init__(self) -> None: self.calls: list[dict[str, Any]] = [] def sync_records(self, *, limit: int = 100) -> dict[str, Any]: self.calls.append({"op": "sync_records", "limit": limit}) return {"ok": True, "limit": limit, "inserted": 1} def cmd_sync_records(domain: DomainService, *, limit: int = 100) -> dict[str, Any]: """task_service 编排层:可加 job_context,但不按 source 分叉业务。""" return domain.sync_records(limit=limit) def cmd_export_compat_refresh(domain: DomainService, *, limit: int = 100) -> dict[str, Any]: """兼容旧 export:刷新必须复用同一 sync 内核,禁止另写采集逻辑。""" sync_result = domain.sync_records(limit=limit) return {"export": "delegated-to-host-or-report", "sync": sync_result} def cli_handle_sync(domain: DomainService, argv_limit: int) -> dict[str, Any]: """CLI handler:只解析参数后转发,不内嵌业务。""" return cmd_sync_records(domain, limit=argv_limit) def run_from_source( domain: DomainService, *, source: str, limit: int = 10, ) -> dict[str, Any]: """ 宿主可能传入 source=toolbar|cron|agent|skill-detail。 正确实现:忽略 source,业务结果一致。 """ _ = source # 不得用于分支业务语义 return cmd_sync_records(domain, limit=limit) class TestActionCoreContractSample(unittest.TestCase): def test_task_adapter_calls_single_domain_service(self) -> None: domain = DomainService() out = cmd_sync_records(domain, limit=5) self.assertTrue(out["ok"]) self.assertEqual(domain.calls, [{"op": "sync_records", "limit": 5}]) def test_compat_command_reuses_same_core(self) -> None: domain = DomainService() cmd_export_compat_refresh(domain, limit=3) self.assertEqual(len(domain.calls), 1) self.assertEqual(domain.calls[0]["op"], "sync_records") def test_cli_handler_does_not_duplicate_business_logic(self) -> None: domain = DomainService() # CLI 与 task 编排应落到同一函数对象(示意) self.assertIs(cli_handle_sync.__wrapped__ if hasattr(cli_handle_sync, "__wrapped__") else None, None) out = cli_handle_sync(domain, 7) self.assertEqual(out["limit"], 7) self.assertEqual(domain.calls[-1], {"op": "sync_records", "limit": 7}) # 强化:CLI 路径与 cmd 路径结果一致 domain2 = DomainService() a = cli_handle_sync(domain2, 2) domain3 = DomainService() b = cmd_sync_records(domain3, limit=2) self.assertEqual(a, b) def test_business_result_independent_of_entry_source(self) -> None: domain = DomainService() results = [ run_from_source(domain, source=src, limit=4) for src in ("toolbar", "cron", "agent", "skill-detail") ] self.assertEqual(results[0], results[1]) self.assertEqual(results[1], results[2]) self.assertEqual(results[2], results[3]) self.assertEqual(len(domain.calls), 4) self.assertTrue(all(c["op"] == "sync_records" and c["limit"] == 4 for c in domain.calls)) def test_entrypoint_wiring_points_to_same_callable(self) -> None: """示意:manifest 多 placements 应对应同一 Python 入口函数。""" domain = DomainService() handlers: dict[str, Callable[..., dict[str, Any]]] = { "toolbar": lambda: cmd_sync_records(domain, limit=1), "cron": lambda: cmd_sync_records(domain, limit=1), "agent": lambda: cmd_sync_records(domain, limit=1), } outs = [handlers[k]() for k in handlers] self.assertEqual(outs[0], outs[1]) self.assertEqual(outs[1], outs[2]) if __name__ == "__main__": unittest.main()