Skip to content

Commit e4c9644

Browse files
Refactor ensure capability tests
1 parent 529f3bb commit e4c9644

File tree

1 file changed

+36
-55
lines changed

1 file changed

+36
-55
lines changed

test/mcp/methods_test.rb

Lines changed: 36 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -5,71 +5,52 @@
55

66
module MCP
77
class MethodsTest < ActiveSupport::TestCase
8-
test "ensure_capability! for tools/list method raises an error if tools capability is not present" do
9-
error = assert_raises(Methods::MissingRequiredCapabilityError) do
10-
Methods.ensure_capability!(Methods::TOOLS_LIST, {})
8+
class << self
9+
def ensure_capability_raises_error_for(method, required_capability_name:, capabilities: {})
10+
test("ensure_capability! for #{method} raises an error if #{required_capability_name} capability is not present") do
11+
error = assert_raises(Methods::MissingRequiredCapabilityError) do
12+
Methods.ensure_capability!(method, capabilities)
13+
end
14+
assert_equal("Server does not support #{required_capability_name} (required for #{method})", error.message)
15+
end
1116
end
12-
assert_equal "Server does not support tools (required for tools/list)", error.message
13-
end
1417

15-
test "ensure_capability! for sampling/createMessage raises an error if sampling capability is not present" do
16-
error = assert_raises(Methods::MissingRequiredCapabilityError) do
17-
Methods.ensure_capability!(Methods::SAMPLING_CREATE_MESSAGE, {})
18+
def ensure_capability_does_not_raise_for(method, capabilities: {})
19+
test("ensure_capability! does not raise for #{method}") do
20+
assert_nothing_raised { Methods.ensure_capability!(method, capabilities) }
21+
end
1822
end
19-
assert_equal "Server does not support sampling (required for sampling/createMessage)", error.message
2023
end
2124

22-
test "ensure_capability! for completion/complete raises an error if completions capability is not present" do
23-
error = assert_raises(Methods::MissingRequiredCapabilityError) do
24-
Methods.ensure_capability!(Methods::COMPLETION_COMPLETE, {})
25-
end
26-
assert_equal "Server does not support completions (required for completion/complete)", error.message
27-
end
25+
# Tools capability tests
26+
ensure_capability_raises_error_for Methods::TOOLS_LIST, required_capability_name: "tools"
27+
ensure_capability_raises_error_for Methods::TOOLS_CALL, required_capability_name: "tools"
2828

29-
test "ensure_capability! for logging/setLevel raises an error if logging capability is not present" do
30-
error = assert_raises(Methods::MissingRequiredCapabilityError) do
31-
Methods.ensure_capability!(Methods::LOGGING_SET_LEVEL, {})
32-
end
33-
assert_equal "Server does not support logging (required for logging/setLevel)", error.message
34-
end
29+
# Sampling capability tests
30+
ensure_capability_raises_error_for Methods::SAMPLING_CREATE_MESSAGE, required_capability_name: "sampling"
3531

36-
test "ensure_capability! for prompts/get and prompts/list raise an error if prompts capability is not present" do
37-
[Methods::PROMPTS_GET, Methods::PROMPTS_LIST].each do |method|
38-
error = assert_raises(Methods::MissingRequiredCapabilityError) do
39-
Methods.ensure_capability!(method, {})
40-
end
41-
assert_equal "Server does not support prompts (required for #{method})", error.message
42-
end
43-
end
32+
# Completions capability tests
33+
ensure_capability_raises_error_for Methods::COMPLETION_COMPLETE, required_capability_name: "completions"
4434

45-
test "ensure_capability! for resources/list, resources/templates/list, resources/read raise an error if resources capability is not present" do
46-
[Methods::RESOURCES_LIST, Methods::RESOURCES_TEMPLATES_LIST, Methods::RESOURCES_READ].each do |method|
47-
error = assert_raises(Methods::MissingRequiredCapabilityError) do
48-
Methods.ensure_capability!(method, {})
49-
end
50-
assert_equal "Server does not support resources (required for #{method})", error.message
51-
end
52-
end
35+
# Logging capability tests
36+
ensure_capability_raises_error_for Methods::LOGGING_SET_LEVEL, required_capability_name: "logging"
5337

54-
test "ensure_capability! for tools/call and tools/list raise an error if tools capability is not present" do
55-
[Methods::TOOLS_CALL, Methods::TOOLS_LIST].each do |method|
56-
error = assert_raises(Methods::MissingRequiredCapabilityError) do
57-
Methods.ensure_capability!(method, {})
58-
end
59-
assert_equal "Server does not support tools (required for #{method})", error.message
60-
end
61-
end
38+
# Prompts capability tests
39+
ensure_capability_raises_error_for Methods::PROMPTS_GET, required_capability_name: "prompts"
40+
ensure_capability_raises_error_for Methods::PROMPTS_LIST, required_capability_name: "prompts"
6241

63-
test "ensure_capability! for resources/subscribe raises an error if resources subscribe capability is not present" do
64-
error = assert_raises(Methods::MissingRequiredCapabilityError) do
65-
Methods.ensure_capability!(Methods::RESOURCES_SUBSCRIBE, { resources: {} })
66-
end
67-
assert_equal "Server does not support resources_subscribe (required for resources/subscribe)", error.message
68-
end
42+
# Resources capability tests
43+
ensure_capability_raises_error_for Methods::RESOURCES_LIST, required_capability_name: "resources"
44+
ensure_capability_raises_error_for Methods::RESOURCES_TEMPLATES_LIST, required_capability_name: "resources"
45+
ensure_capability_raises_error_for Methods::RESOURCES_READ, required_capability_name: "resources"
6946

70-
test "ensure_capability! does not raise for ping and initialize methods" do
71-
assert_nothing_raised { Methods.ensure_capability!(Methods::PING, {}) }
72-
assert_nothing_raised { Methods.ensure_capability!(Methods::INITIALIZE, {}) }
73-
end
47+
# Resources subscribe capability tests
48+
ensure_capability_raises_error_for Methods::RESOURCES_SUBSCRIBE,
49+
required_capability_name: "resources_subscribe",
50+
capabilities: { resources: {} }
51+
52+
# Methods that don't require capabilities
53+
ensure_capability_does_not_raise_for Methods::PING
54+
ensure_capability_does_not_raise_for Methods::INITIALIZE
7455
end
7556
end

0 commit comments

Comments
 (0)