Files
picoclaw/pkg/tools/integration/reaction_test.go
T

97 lines
2.8 KiB
Go

package integrationtools
import (
"context"
"errors"
"testing"
)
func TestReactionTool_Execute_UsesContextMessageIDByDefault(t *testing.T) {
tool := NewReactionTool()
var gotChannel, gotChatID, gotMessageID string
tool.SetReactionCallback(func(ctx context.Context, channel, chatID, messageID string) error {
gotChannel = channel
gotChatID = chatID
gotMessageID = messageID
return nil
})
ctx := WithToolInboundContext(context.Background(), "telegram", "chat-1", "msg-100", "")
result := tool.Execute(ctx, map[string]any{})
if result.IsError {
t.Fatalf("expected success, got error: %s", result.ForLLM)
}
if gotChannel != "telegram" || gotChatID != "chat-1" || gotMessageID != "msg-100" {
t.Fatalf("unexpected callback args: channel=%q chatID=%q messageID=%q", gotChannel, gotChatID, gotMessageID)
}
}
func TestReactionTool_Execute_AllowsExplicitMessageIDOverride(t *testing.T) {
tool := NewReactionTool()
var gotMessageID string
tool.SetReactionCallback(func(ctx context.Context, channel, chatID, messageID string) error {
gotMessageID = messageID
return nil
})
ctx := WithToolInboundContext(context.Background(), "telegram", "chat-1", "msg-context", "")
result := tool.Execute(ctx, map[string]any{"message_id": "msg-explicit"})
if result.IsError {
t.Fatalf("expected success, got error: %s", result.ForLLM)
}
if gotMessageID != "msg-explicit" {
t.Fatalf("expected explicit message id, got %q", gotMessageID)
}
}
func TestReactionTool_Execute_MissingMessageID(t *testing.T) {
tool := NewReactionTool()
tool.SetReactionCallback(func(ctx context.Context, channel, chatID, messageID string) error { return nil })
ctx := WithToolContext(context.Background(), "telegram", "chat-1")
result := tool.Execute(ctx, map[string]any{})
if !result.IsError {
t.Fatal("expected error")
}
if result.ForLLM != "message_id is required" {
t.Fatalf("unexpected error message: %q", result.ForLLM)
}
}
func TestReactionTool_Execute_CallbackError(t *testing.T) {
tool := NewReactionTool()
tool.SetReactionCallback(func(ctx context.Context, channel, chatID, messageID string) error {
return errors.New("unsupported")
})
ctx := WithToolInboundContext(context.Background(), "telegram", "chat-1", "msg-100", "")
result := tool.Execute(ctx, map[string]any{})
if !result.IsError {
t.Fatal("expected error")
}
if result.Err == nil {
t.Fatal("expected wrapped error")
}
}
func TestReactionTool_Parameters(t *testing.T) {
tool := NewReactionTool()
params := tool.Parameters()
props, ok := params["properties"].(map[string]any)
if !ok {
t.Fatal("expected properties map")
}
if _, ok := props["message_id"]; !ok {
t.Fatal("expected message_id parameter")
}
if _, ok := props["channel"]; !ok {
t.Fatal("expected channel parameter")
}
if _, ok := props["chat_id"]; !ok {
t.Fatal("expected chat_id parameter")
}
}