All checks were successful
技能自动化发布 / release (push) Successful in 8s
Data-management add/edit now use short forms with enums; copy clones a platform account into a new empty profile. Co-authored-by: Cursor <cursoragent@cursor.com>
75 lines
3.0 KiB
Python
75 lines
3.0 KiB
Python
# -*- coding: utf-8 -*-
|
||
"""数据管理行内打开类:label 对齐模板,不与宿主 CRUD 重复。"""
|
||
from __future__ import annotations
|
||
|
||
import json
|
||
import os
|
||
import unittest
|
||
|
||
|
||
def _skill_root() -> str:
|
||
return os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||
|
||
|
||
def _load_actions() -> list[dict]:
|
||
path = os.path.join(_skill_root(), "assets", "actions.json")
|
||
with open(path, encoding="utf-8") as f:
|
||
manifest = json.load(f)
|
||
return list(manifest.get("actions") or [])
|
||
|
||
|
||
def _by_id(actions: list[dict], action_id: str) -> dict:
|
||
for item in actions:
|
||
if item.get("id") == action_id:
|
||
return item
|
||
raise AssertionError(f"missing action {action_id}")
|
||
|
||
|
||
class TestRowOpenActions(unittest.TestCase):
|
||
def test_reveal_and_open_use_template_labels(self) -> None:
|
||
actions = _load_actions()
|
||
reveal = _by_id(actions, "reveal-profile")
|
||
open_browser = _by_id(actions, "open-browser")
|
||
self.assertEqual(reveal.get("label"), "打开目录")
|
||
self.assertEqual(open_browser.get("label"), "打开浏览器")
|
||
self.assertEqual(reveal.get("placements"), ["row"])
|
||
self.assertEqual(open_browser.get("placements"), ["row"])
|
||
self.assertEqual(reveal.get("interaction"), "direct")
|
||
self.assertEqual(open_browser.get("interaction"), "direct")
|
||
self.assertFalse(reveal.get("replaces"))
|
||
self.assertFalse(open_browser.get("replaces"))
|
||
|
||
def test_create_takes_over_host_add_without_row_duplicate(self) -> None:
|
||
create = _by_id(_load_actions(), "account-add-web")
|
||
self.assertEqual(create.get("replaces"), "create")
|
||
self.assertEqual(create.get("placements") or [], [])
|
||
self.assertEqual(create.get("label"), "新增账号")
|
||
props = (create.get("inputSchema") or {}).get("properties") or {}
|
||
self.assertEqual(set(props), {"platform_key", "account_label", "login_id"})
|
||
|
||
def test_update_takes_over_host_edit(self) -> None:
|
||
update = _by_id(_load_actions(), "account-update")
|
||
self.assertEqual(update.get("replaces"), "update")
|
||
self.assertEqual(update.get("placements") or [], [])
|
||
self.assertEqual(update.get("label"), "编辑账号")
|
||
props = (update.get("inputSchema") or {}).get("properties") or {}
|
||
self.assertEqual(
|
||
set(props),
|
||
{"accountId", "account_label", "login_id", "login_id_type", "url", "status"},
|
||
)
|
||
self.assertIn("enum", props["login_id_type"])
|
||
self.assertIn("enum", props["status"])
|
||
|
||
def test_copy_is_direct_row_action(self) -> None:
|
||
copy = _by_id(_load_actions(), "account-copy")
|
||
self.assertEqual(copy.get("label"), "复制")
|
||
self.assertEqual(copy.get("placements"), ["row"])
|
||
self.assertEqual(copy.get("interaction"), "direct")
|
||
self.assertFalse(copy.get("replaces"))
|
||
steps = copy.get("steps") or []
|
||
self.assertTrue(any(s.get("do") == "reloadTable" for s in steps))
|
||
|
||
|
||
if __name__ == "__main__":
|
||
unittest.main()
|