Files
kandev/apps/backend/internal/mcp/server/settings_tools_test.go
T
2026-09-10 11:35:46 +01:00

60 lines
2.2 KiB
Go

package mcp
import (
"context"
"encoding/json"
"testing"
ws "github.com/kandev/kandev/pkg/websocket"
mcplib "github.com/mark3labs/mcp-go/mcp"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestCompactSettingsToolsExposeOnlyStableEnvelopes(t *testing.T) {
server := newTestServer(t, &testBackend{})
for _, name := range []string{
"search_settings_kandev", "describe_setting_kandev", "get_settings_kandev",
"update_settings_kandev", "list_settings_resources_kandev",
} {
tool, ok := server.mcpServer.ListTools()[name]
require.True(t, ok, "missing compact settings tool %q", name)
data := tool.Tool.RawInputSchema
if len(data) == 0 {
var err error
data, err = json.Marshal(tool.Tool.InputSchema)
require.NoError(t, err)
}
var schema map[string]any
require.NoError(t, json.Unmarshal(data, &schema))
assert.Equal(t, "object", schema["type"])
assert.Equal(t, false, schema["additionalProperties"], "tool %q must keep its outer envelope closed", name)
}
var updateSchema map[string]any
require.NoError(t, json.Unmarshal(server.mcpServer.ListTools()["update_settings_kandev"].Tool.RawInputSchema, &updateSchema))
properties, ok := updateSchema["properties"].(map[string]any)
require.True(t, ok)
assert.Contains(t, properties, "target")
assert.Contains(t, properties, "changes")
assert.Contains(t, properties, "options")
assert.NotContains(t, properties, "agent_profile")
}
func TestCompactSettingsToolForwardsStableAction(t *testing.T) {
backend := &testBackend{}
server := newTestServer(t, backend)
tool := server.mcpServer.ListTools()["update_settings_kandev"]
req := mcplib.CallToolRequest{}
req.Params.Name = "update_settings_kandev"
req.Params.Arguments = map[string]any{
"target": map[string]any{"resource_type": "agent_profile", "resource_id": "profile-1"},
"changes": map[string]any{"auto_approve": false},
}
_, err := tool.Handler(context.Background(), req)
require.NoError(t, err)
assert.Equal(t, ws.ActionMCPUpdateSettings, backend.lastAction)
payload, ok := backend.lastPayload.(map[string]any)
require.True(t, ok)
assert.Equal(t, false, payload["changes"].(map[string]any)["auto_approve"])
}