feat: add shallow fetch and grouped skill selection
This commit is contained in:
+86
-1
@@ -135,6 +135,49 @@ class SelectorTests(unittest.TestCase):
|
||||
self.assertTrue(name_call.args[4] & curses.A_BOLD)
|
||||
self.assertTrue(description_call.args[4] & curses.A_DIM)
|
||||
|
||||
def test_repository_choice_toggles_all_child_skills(self) -> None:
|
||||
choices = [
|
||||
SkillChoice(
|
||||
"waza",
|
||||
"repository",
|
||||
children=("waza/think", "waza/ui"),
|
||||
),
|
||||
SkillChoice("waza/think", "external:waza", indent=1),
|
||||
SkillChoice("waza/ui", "external:waza", indent=1),
|
||||
]
|
||||
screen = Mock()
|
||||
screen.getmaxyx.return_value = (24, 100)
|
||||
screen.get_wch.side_effect = [" ", "\n"]
|
||||
|
||||
with patch.object(curses, "curs_set"):
|
||||
selected = select_skills(choices, wrapper=lambda draw: draw(screen))
|
||||
|
||||
self.assertEqual(selected, {"waza/think", "waza/ui"})
|
||||
|
||||
def test_repository_choice_renders_partial_selection(self) -> None:
|
||||
choices = [
|
||||
SkillChoice(
|
||||
"waza",
|
||||
"repository",
|
||||
children=("waza/think", "waza/ui"),
|
||||
),
|
||||
SkillChoice("waza/think", "external:waza", installed=True, indent=1),
|
||||
SkillChoice("waza/ui", "external:waza", indent=1),
|
||||
]
|
||||
screen = Mock()
|
||||
screen.getmaxyx.return_value = (24, 100)
|
||||
screen.get_wch.return_value = "\n"
|
||||
|
||||
with patch.object(curses, "curs_set"):
|
||||
select_skills(choices, wrapper=lambda draw: draw(screen))
|
||||
|
||||
first_row = "".join(
|
||||
call.args[2]
|
||||
for call in screen.addnstr.call_args_list
|
||||
if call.args[0] == 3
|
||||
)
|
||||
self.assertIn("[-] waza", first_row)
|
||||
|
||||
def test_shared_repo_path_is_same_for_different_skill_entries(self) -> None:
|
||||
first = {"repo": "https://example.test/skills.git", "ref": "main", "path": "a"}
|
||||
second = {"repo": "https://example.test/skills.git", "ref": "main", "path": "b"}
|
||||
@@ -172,6 +215,43 @@ class SelectorTests(unittest.TestCase):
|
||||
|
||||
self.assertEqual(discover_external_skills("unsafe", entry), {})
|
||||
|
||||
def test_registry_clone_is_shallow(self) -> None:
|
||||
with tempfile.TemporaryDirectory() as temp:
|
||||
root = Path(temp)
|
||||
checkout = root / "checkout"
|
||||
skill_root = checkout / "skills"
|
||||
entry = {
|
||||
"repo": "https://example.test/skills.git",
|
||||
"ref": "main",
|
||||
"path": "skills",
|
||||
}
|
||||
with (
|
||||
patch.object(cli, "external_skill_path", return_value=skill_root),
|
||||
patch.object(cli, "external_checkout_path", return_value=checkout),
|
||||
patch.object(
|
||||
cli,
|
||||
"discover_external_skills",
|
||||
side_effect=[{}, {"demo": skill_root / "demo"}],
|
||||
),
|
||||
patch.object(cli.subprocess, "run") as run,
|
||||
):
|
||||
cli._ensure_registry_fetched("demo-pack", entry)
|
||||
|
||||
run.assert_called_once_with(
|
||||
[
|
||||
"git",
|
||||
"clone",
|
||||
"--depth",
|
||||
"1",
|
||||
"--branch",
|
||||
"main",
|
||||
"--",
|
||||
"https://example.test/skills.git",
|
||||
str(checkout),
|
||||
],
|
||||
check=True,
|
||||
)
|
||||
|
||||
|
||||
class SelectCommandTests(unittest.TestCase):
|
||||
def test_non_tty_exits_with_add_guidance(self) -> None:
|
||||
@@ -390,7 +470,12 @@ class SelectCommandTests(unittest.TestCase):
|
||||
):
|
||||
cli.cmd_select(args)
|
||||
|
||||
self.assertEqual([choice.name for choice in selected_choices], ["waza/think", "waza/ui"])
|
||||
self.assertEqual(
|
||||
[choice.name for choice in selected_choices],
|
||||
["waza", "waza/think", "waza/ui"],
|
||||
)
|
||||
self.assertEqual(selected_choices[0].children, ("waza/think", "waza/ui"))
|
||||
self.assertEqual([choice.indent for choice in selected_choices[1:]], [1, 1])
|
||||
self.assertEqual(installed, [("think", "registry:waza")])
|
||||
|
||||
def test_select_deduplicates_local_registry_collection_from_owned(self) -> None:
|
||||
|
||||
Reference in New Issue
Block a user