feat: validate receive files list args
This commit is contained in:
@@ -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")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user