According to the specification, `destructive_hint`, `idempotent_hint`, `open_world_hint`, and `read_only_hint` of `ToolAnnotations` are optional with default values: https://modelcontextprotocol.io/specification/2025-06-18/schema#toolannotations This PR sets their default values in accordance with the specification. Additionally, for readability, the hints have been reordered to follow the specification.
78 lines
2.3 KiB
Ruby
78 lines
2.3 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require "test_helper"
|
|
|
|
module MCP
|
|
class Tool
|
|
class AnnotationsTest < ActiveSupport::TestCase
|
|
test "Tool::Annotations initializes with all properties" do
|
|
annotations = Tool::Annotations.new(
|
|
destructive_hint: false,
|
|
idempotent_hint: true,
|
|
open_world_hint: false,
|
|
read_only_hint: true,
|
|
title: "Test Tool",
|
|
)
|
|
|
|
refute annotations.destructive_hint
|
|
assert annotations.idempotent_hint
|
|
refute annotations.open_world_hint
|
|
assert annotations.read_only_hint
|
|
assert_equal "Test Tool", annotations.title
|
|
end
|
|
|
|
test "Tool::Annotations initializes with partial properties" do
|
|
annotations = Tool::Annotations.new(
|
|
read_only_hint: true,
|
|
title: "Test Tool",
|
|
)
|
|
|
|
assert annotations.destructive_hint
|
|
refute annotations.idempotent_hint
|
|
assert annotations.open_world_hint
|
|
assert annotations.read_only_hint
|
|
assert_equal "Test Tool", annotations.title
|
|
end
|
|
|
|
test "Tool::Annotations#to_h omits nil values" do
|
|
annotations = Tool::Annotations.new(
|
|
title: "Test Tool",
|
|
read_only_hint: true,
|
|
)
|
|
|
|
expected = {
|
|
destructiveHint: true,
|
|
idempotentHint: false,
|
|
openWorldHint: true,
|
|
readOnlyHint: true,
|
|
title: "Test Tool",
|
|
}
|
|
assert_equal expected, annotations.to_h
|
|
end
|
|
|
|
test "Tool::Annotations#to_h handles all properties" do
|
|
annotations = Tool::Annotations.new(
|
|
destructive_hint: false,
|
|
idempotent_hint: true,
|
|
open_world_hint: false,
|
|
read_only_hint: true,
|
|
title: "Test Tool",
|
|
)
|
|
|
|
expected = {
|
|
destructiveHint: false,
|
|
idempotentHint: true,
|
|
openWorldHint: false,
|
|
readOnlyHint: true,
|
|
title: "Test Tool",
|
|
}
|
|
assert_equal expected, annotations.to_h
|
|
end
|
|
|
|
test "Tool::Annotations#to_h returns hash with default hint values" do
|
|
annotations = Tool::Annotations.new
|
|
assert_equal({ destructiveHint: true, idempotentHint: false, openWorldHint: true, readOnlyHint: false }, annotations.to_h)
|
|
end
|
|
end
|
|
end
|
|
end
|