from markitect_tool.cli.extensions import collect_cli_command_specs, command_specs_from_extension from markitect_tool.extension import ExtensionDescriptor, builtin_extension_registry def test_command_specs_from_extension_handles_string_and_list_forms(): one = ExtensionDescriptor(id="one", kind="test", cli={"commands": "mkt one"}) many = ExtensionDescriptor(id="many", kind="test", cli={"commands": ["mkt a", "mkt b"]}) assert [spec.command for spec in command_specs_from_extension(one)] == ["mkt one"] assert [spec.command for spec in command_specs_from_extension(many)] == ["mkt a", "mkt b"] def test_collect_cli_command_specs_from_builtin_registry(): specs = collect_cli_command_specs(builtin_extension_registry()) commands = {(spec.extension_id, spec.command) for spec in specs} assert ("selector", "mkt query") in commands assert ("processor.uppercase", "mkt process") in commands assert ("backend.local-sqlite", "mkt cache index") in commands assert ("backend.local-sqlite", "mkt search") in commands def test_cli_command_spec_serializes_without_empty_fields(): spec = command_specs_from_extension( ExtensionDescriptor( id="query.selector", kind="query-engine", summary="Selector engine", cli={"commands": ["mkt query"], "group": "query"}, ) )[0] data = spec.to_dict() assert data["command"] == "mkt query" assert data["extension_id"] == "query.selector" assert data["metadata"]["group"] == "query"