diff options
Diffstat (limited to 'tests/test_server.py')
| -rw-r--r-- | tests/test_server.py | 83 |
1 files changed, 82 insertions, 1 deletions
diff --git a/tests/test_server.py b/tests/test_server.py index 3a80e80..232d411 100644 --- a/tests/test_server.py +++ b/tests/test_server.py @@ -65,17 +65,26 @@ class McpServerTests(unittest.TestCase): response = server.handle( {"jsonrpc": "2.0", "id": 2, "method": "tools/list", "params": {}} ) - names = {tool["name"] for tool in response["result"]["tools"]} + tools = response["result"]["tools"] + names = {tool["name"] for tool in tools} self.assertIn("sailfish_device_topmost_pid", names) self.assertIn("sailfish_device_touch", names) self.assertIn("sailfish_device_touch_workflow", names) self.assertIn("sailfish_device_user_session_command", names) self.assertIn("sailfish_device_browser_launch", names) self.assertIn("sailfish_sdk_refresh_metadata", names) + self.assertIn("sailfish_build_preflight", names) + self.assertIn("sailfish_build_cancel", names) self.assertIn("sailfish_android_build_hosts", names) self.assertIn("sailfish_android_build", names) self.assertIn("sailfish_android_build_status", names) + self.assertIn("sailfish_android_build_cancel", names) self.assertIn("sailfish_qml_check_translator_ternaries", names) + obs_results = next(tool for tool in tools if tool["name"] == "sailfish_obs_results") + self.assertEqual( + obs_results["inputSchema"]["properties"]["server"]["enum"], + ["internal", "partner", "community"], + ) def test_qml_ternary_checker_reports_inline_ternary_qstrid(self) -> None: with tempfile.TemporaryDirectory() as tmp: @@ -608,6 +617,78 @@ class McpServerTests(unittest.TestCase): "/build/home%3Aexample/5.0.0/aarch64/browser/_log?nostream=1", ) + def test_obs_results_selects_named_servers(self) -> None: + aliases = { + "internal": "jolla", + "partner": "partner", + "community": "community", + } + with tempfile.TemporaryDirectory() as tmp: + mcp_server = self.make_server(Path(tmp)) + for named_server, api_alias in aliases.items(): + with self.subTest(server=named_server): + with patch("sailfish_devel_mcp.tools.run") as mocked_run: + mocked_run.return_value = CommandResult(("osc",), 0, "", "") + response = mcp_server.handle( + { + "jsonrpc": "2.0", + "id": 13, + "method": "tools/call", + "params": { + "name": "sailfish_obs_results", + "arguments": { + "project": "home:example", + "package": "browser", + "server": named_server, + }, + }, + } + ) + + self.assertFalse(response["result"].get("isError", False)) + argv = list(mocked_run.call_args.args[0]) + self.assertEqual( + argv, + [ + "osc", + "-A", + api_alias, + "results", + "home:example", + "browser", + ], + ) + structured = response["result"]["structuredContent"] + self.assertEqual(structured["server"], named_server) + self.assertEqual(structured["api_alias"], api_alias) + + def test_obs_results_rejects_server_with_api_alias(self) -> None: + with tempfile.TemporaryDirectory() as tmp: + server = self.make_server(Path(tmp)) + with patch("sailfish_devel_mcp.tools.run") as mocked_run: + response = server.handle( + { + "jsonrpc": "2.0", + "id": 14, + "method": "tools/call", + "params": { + "name": "sailfish_obs_results", + "arguments": { + "project": "home:example", + "server": "partner", + "api_alias": "community", + }, + }, + } + ) + + self.assertTrue(response["result"].get("isError", False)) + self.assertIn( + "server and api_alias cannot be combined", + response["result"]["content"][0]["text"], + ) + mocked_run.assert_not_called() + def test_sdk_refresh_metadata_uses_local_sdk_main_target(self) -> None: with tempfile.TemporaryDirectory() as tmp: root = Path(tmp) |
