feat: validate receive files list args

This commit is contained in:
zhaoyilun
2026-07-10 01:43:11 +08:00
parent b1891dd6cd
commit fce1232f21
7 changed files with 155 additions and 16 deletions

View File

@@ -88,3 +88,70 @@ func TestISphereReceiveFilesToolReturnsLogBackedFiles(t *testing.T) {
t.Fatalf("source queries = %+v, want one unbounded receive query", fake.queries)
}
}
func TestISphereReceiveFilesToolValidatesContractArgs(t *testing.T) {
fake := &fakeReceiveMessagesSource{
result: isphere.ReceiveMessagesResult{Messages: []isphere.Message{{
ID: "msg-file-1",
ConversationID: "alice@imopenfire1-lanzhou|bob@imopenfire1-lanzhou",
Text: "redacted-report.docx",
Timestamp: "1783423807000",
Subject: "FILE_TRANSFER_CANCEL",
}}},
}
session, cleanup := connectToolsTestSession(t, func(server *mcp.Server) {
RegisterISphereFileTools(server, fake)
})
defer cleanup()
callResult, err := session.CallTool(context.Background(), &mcp.CallToolParams{
Name: ToolNameReceiveFiles,
Arguments: map[string]any{
"mode": "list",
"name_contains": "report",
"source_preference": "local_readonly",
"preview": true,
"cursor": "",
"output_dir": "",
"limit": 5,
},
})
if err != nil {
t.Fatalf("call with safe contract args: %v", err)
}
if callResult.IsError {
t.Fatalf("call result is error: %+v", callResult)
}
bridgeResult, err := session.CallTool(context.Background(), &mcp.CallToolParams{
Name: ToolNameReceiveFiles,
Arguments: map[string]any{"mode": "list", "source_preference": "bridge"},
})
if err == nil && !bridgeResult.IsError {
t.Fatalf("bridge source_preference was accepted before connector exists")
}
cursorResult, err := session.CallTool(context.Background(), &mcp.CallToolParams{
Name: ToolNameReceiveFiles,
Arguments: map[string]any{"mode": "list", "cursor": "next-page"},
})
if err == nil && !cursorResult.IsError {
t.Fatalf("non-empty cursor was accepted before pagination exists")
}
outputResult, err := session.CallTool(context.Background(), &mcp.CallToolParams{
Name: ToolNameReceiveFiles,
Arguments: map[string]any{"mode": "list", "output_dir": "C:\\tmp\\isphere"},
})
if err == nil && !outputResult.IsError {
t.Fatalf("output_dir was accepted in list mode before download exists")
}
downloadResult, err := session.CallTool(context.Background(), &mcp.CallToolParams{
Name: ToolNameReceiveFiles,
Arguments: map[string]any{"mode": "download", "file_id": "msg-file-1:redacted-report.docx"},
})
if err == nil && !downloadResult.IsError {
t.Fatalf("download mode was accepted before cache mapping exists")
}
}