tests: cover m2pack cli and mcp additions
Add discovery-helper tests (env var override, PATH fallback, missing binary) and command tests that point M2PACK_BINARY at a Python stub script echoing canned JSON per subcommand. Cover success paths, non-zero exit, non-JSON output, JSON-array output, and missing binary. Extend the MCP schema mirror test to cover all 12 tools and add dispatch tests for the new m2pack_* argv translation.
This commit is contained in:
@@ -199,6 +199,80 @@ def test_dispatch_invalid_input_returns_wrapper_error():
|
||||
assert envelope["error"]["code"] == "invalid_tool_input"
|
||||
|
||||
|
||||
def test_m2pack_build_translates_all_flags():
|
||||
spec = TOOLS_BY_NAME["m2pack_build"]
|
||||
argv = build_cli_args(
|
||||
spec,
|
||||
{
|
||||
"input": "/src",
|
||||
"output": "/out/a.m2p",
|
||||
"key": "/ck",
|
||||
"sign_secret_key": "/sk",
|
||||
"key_id": 2,
|
||||
},
|
||||
)
|
||||
assert argv[0:3] == ["m2pack", "build", "--json"]
|
||||
assert "--input" in argv and argv[argv.index("--input") + 1] == "/src"
|
||||
assert "--output" in argv and argv[argv.index("--output") + 1] == "/out/a.m2p"
|
||||
assert "--sign-secret-key" in argv
|
||||
assert argv[argv.index("--sign-secret-key") + 1] == "/sk"
|
||||
assert "--key-id" in argv and argv[argv.index("--key-id") + 1] == "2"
|
||||
|
||||
|
||||
def test_m2pack_verify_omits_optional_keys():
|
||||
spec = TOOLS_BY_NAME["m2pack_verify"]
|
||||
argv = build_cli_args(spec, {"archive": "/a.m2p"})
|
||||
assert argv == ["m2pack", "verify", "--json", "--archive", "/a.m2p"]
|
||||
|
||||
|
||||
def test_m2pack_diff_requires_both_sides():
|
||||
from metin_release_mcp.errors import InvalidToolInputError
|
||||
|
||||
spec = TOOLS_BY_NAME["m2pack_diff"]
|
||||
with pytest.raises(InvalidToolInputError):
|
||||
build_cli_args(spec, {"left": "/L"})
|
||||
argv = build_cli_args(spec, {"left": "/L", "right": "/R"})
|
||||
assert argv == ["m2pack", "diff", "--json", "--left", "/L", "--right", "/R"]
|
||||
|
||||
|
||||
def test_m2pack_export_runtime_key_with_format():
|
||||
spec = TOOLS_BY_NAME["m2pack_export_runtime_key"]
|
||||
argv = build_cli_args(
|
||||
spec,
|
||||
{
|
||||
"key": "/ck",
|
||||
"public_key": "/pk",
|
||||
"output": "/out",
|
||||
"format": "blob",
|
||||
"key_id": 4,
|
||||
},
|
||||
)
|
||||
assert argv[0:3] == ["m2pack", "export-runtime-key", "--json"]
|
||||
assert "--format" in argv and argv[argv.index("--format") + 1] == "blob"
|
||||
assert "--key-id" in argv and argv[argv.index("--key-id") + 1] == "4"
|
||||
|
||||
|
||||
def test_dispatch_m2pack_build_through_fake_runner(stub_runner):
|
||||
runner = stub_runner(
|
||||
{"ok": True, "command": "m2pack build", "status": "built", "artifacts": {"archive_path": "/x.m2p"}}
|
||||
)
|
||||
envelope, _ = server.dispatch(
|
||||
"m2pack_build",
|
||||
{
|
||||
"input": "/src",
|
||||
"output": "/x.m2p",
|
||||
"key": "/ck",
|
||||
"sign_secret_key": "/sk",
|
||||
},
|
||||
)
|
||||
assert envelope["ok"] is True
|
||||
call = runner.calls[0]
|
||||
assert "m2pack" in call and "build" in call
|
||||
assert "--json" in call
|
||||
assert "--input" in call and "/src" in call
|
||||
assert "--sign-secret-key" in call and "/sk" in call
|
||||
|
||||
|
||||
def test_dispatch_unparseable_output_returns_wrapper_error(monkeypatch):
|
||||
def boom(argv_tail):
|
||||
from metin_release_mcp.errors import CliUnparseableOutputError
|
||||
|
||||
Reference in New Issue
Block a user