go-sdk/mcp/prompt_test.go
Rob Findley 7eadde0a23 internal/mcp/design: further clean-up
Do a pass through the design doc, adding a bit more clean-up and
commentary.

Additionally, update ServerTool and ServerPrompt to be consistent with
the design.

Change-Id: I1b75c4690d86fe8946d512cb36a1fc2938b3c883
Reviewed-on: https://go-review.googlesource.com/c/tools/+/672576
Reviewed-by: Jonathan Amsterdam <jba@google.com>
Reviewed-by: Sam Thanawalla <samthanawalla@google.com>
Auto-Submit: Robert Findley <rfindley@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
2025-05-14 14:28:07 -07:00

53 lines
1.4 KiB
Go

// Copyright 2025 The Go MCP SDK Authors. All rights reserved.
// Use of this source code is governed by an MIT-style
// license that can be found in the LICENSE file.
package mcp_test
import (
"context"
"testing"
"github.com/google/go-cmp/cmp"
"github.com/modelcontextprotocol/go-sdk/mcp"
)
// testPromptHandler is used for type inference in TestNewPrompt.
func testPromptHandler[T any](context.Context, *mcp.ServerSession, T) (*mcp.GetPromptResult, error) {
panic("not implemented")
}
func TestNewPrompt(t *testing.T) {
tests := []struct {
prompt *mcp.ServerPrompt
want []*mcp.PromptArgument
}{
{
mcp.NewPrompt("empty", "", testPromptHandler[struct{}]),
nil,
},
{
mcp.NewPrompt("add_arg", "", testPromptHandler[struct{}], mcp.Argument("x")),
[]*mcp.PromptArgument{{Name: "x"}},
},
{
mcp.NewPrompt("combo", "", testPromptHandler[struct {
Name string `json:"name"`
Country string `json:"country,omitempty"`
State string
}],
mcp.Argument("name", mcp.Description("the person's name")),
mcp.Argument("State", mcp.Required(false))),
[]*mcp.PromptArgument{
{Name: "State"},
{Name: "country"},
{Name: "name", Required: true, Description: "the person's name"},
},
},
}
for _, test := range tests {
if diff := cmp.Diff(test.want, test.prompt.Prompt.Arguments); diff != "" {
t.Errorf("NewPrompt(%v) mismatch (-want +got):\n%s", test.prompt.Prompt.Name, diff)
}
}
}