Cover MyRealTrip MCP wrapper parsing

Add focused unit tests for JSON object validation, key=value decoding, and override merge behavior so the new wrapper has offline regression coverage.

Constraint: PR #229 introduces a public MCP wrapper whose live endpoint should not be required for CI coverage.

Rejected: Live MCP smoke as the only validation | upstream availability would make the regression path flaky.

Confidence: high

Scope-risk: narrow

Directive: Keep wrapper argument parsing covered without requiring network or mcp package installation.

Tested: python3 -m unittest scripts.test_myrealtrip_mcp; node --test scripts/skill-docs.test.js; ./scripts/validate-skills.sh

Not-tested: Live MyRealTrip MCP endpoint call.
This commit is contained in:
Jeffrey (Dongkyu) Kim 2026-05-12 19:08:17 +09:00
commit e1a6031569

View file

@ -0,0 +1,41 @@
import argparse
import importlib.util
import pathlib
import unittest
MODULE_PATH = pathlib.Path(__file__).resolve().parents[1] / "myrealtrip-search" / "scripts" / "myrealtrip_mcp.py"
spec = importlib.util.spec_from_file_location("myrealtrip_mcp", MODULE_PATH)
myrealtrip_mcp = importlib.util.module_from_spec(spec)
spec.loader.exec_module(myrealtrip_mcp)
class MyRealTripMcpWrapperTests(unittest.TestCase):
def test_parse_json_object_requires_object(self):
self.assertEqual(myrealtrip_mcp.parse_json_object('{"query":"제주"}', arg_name="--json"), {"query": "제주"})
with self.assertRaises(argparse.ArgumentTypeError):
myrealtrip_mcp.parse_json_object('["not", "object"]', arg_name="--json")
def test_parse_kv_pairs_json_decodes_values(self):
parsed = myrealtrip_mcp.parse_kv_pairs(["query=오사카", "perPage=5", "filters={\"theme\":\"ticket\"}"])
self.assertEqual(parsed["query"], "오사카")
self.assertEqual(parsed["perPage"], 5)
self.assertEqual(parsed["filters"], {"theme": "ticket"})
def test_parse_args_merges_json_and_kv_arguments(self):
args = myrealtrip_mcp.parse_args([
"call",
"searchTnas",
"--json",
'{"query":"오사카","perPage":3}',
"--arg",
"perPage=5",
])
tool_args = dict(args.json_args or {})
tool_args.update(myrealtrip_mcp.parse_kv_pairs(args.kv_args))
self.assertEqual(args.command, "call")
self.assertEqual(args.tool, "searchTnas")
self.assertEqual(tool_args, {"query": "오사카", "perPage": 5})
if __name__ == "__main__":
unittest.main()