convert_test.go 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. package agent
  2. import (
  3. "encoding/base64"
  4. "testing"
  5. "charm.land/fantasy"
  6. "github.com/stretchr/testify/require"
  7. )
  8. func TestConvertToToolResult_InvalidBase64(t *testing.T) {
  9. t.Parallel()
  10. a := &sessionAgent{}
  11. result := fantasy.ToolResultContent{
  12. ToolCallID: "call_123",
  13. ToolName: "test_tool",
  14. Result: fantasy.ToolResultOutputContentMedia{
  15. Data: "abc\x80def",
  16. MediaType: "image/png",
  17. },
  18. }
  19. tr := a.convertToToolResult(result)
  20. require.True(t, tr.IsError)
  21. require.Empty(t, tr.Data)
  22. require.Contains(t, tr.Content, "invalid encoding")
  23. require.Equal(t, "call_123", tr.ToolCallID)
  24. require.Equal(t, "test_tool", tr.Name)
  25. }
  26. func TestConvertToToolResult_ValidMedia(t *testing.T) {
  27. t.Parallel()
  28. a := &sessionAgent{}
  29. validData := base64.StdEncoding.EncodeToString([]byte("test image data"))
  30. result := fantasy.ToolResultContent{
  31. ToolCallID: "call_456",
  32. ToolName: "screenshot",
  33. Result: fantasy.ToolResultOutputContentMedia{
  34. Data: validData,
  35. MediaType: "image/png",
  36. Text: "Screenshot captured",
  37. },
  38. }
  39. tr := a.convertToToolResult(result)
  40. require.False(t, tr.IsError)
  41. require.Equal(t, validData, tr.Data)
  42. require.Equal(t, "image/png", tr.MIMEType)
  43. require.Equal(t, "Screenshot captured", tr.Content)
  44. }
  45. func TestConvertToToolResult_ValidMediaNoText(t *testing.T) {
  46. t.Parallel()
  47. a := &sessionAgent{}
  48. validData := base64.StdEncoding.EncodeToString([]byte("test image data"))
  49. result := fantasy.ToolResultContent{
  50. ToolCallID: "call_789",
  51. ToolName: "view",
  52. Result: fantasy.ToolResultOutputContentMedia{
  53. Data: validData,
  54. MediaType: "image/jpeg",
  55. },
  56. }
  57. tr := a.convertToToolResult(result)
  58. require.False(t, tr.IsError)
  59. require.Equal(t, validData, tr.Data)
  60. require.Equal(t, "image/jpeg", tr.MIMEType)
  61. require.Equal(t, "Loaded image/jpeg content", tr.Content)
  62. }
  63. func TestConvertToToolResult_ASCIIButInvalidBase64(t *testing.T) {
  64. t.Parallel()
  65. a := &sessionAgent{}
  66. result := fantasy.ToolResultContent{
  67. ToolCallID: "call_abc",
  68. ToolName: "mcp_tool",
  69. Result: fantasy.ToolResultOutputContentMedia{
  70. Data: "not-valid-base64!!!",
  71. MediaType: "image/png",
  72. },
  73. }
  74. tr := a.convertToToolResult(result)
  75. require.True(t, tr.IsError)
  76. require.Empty(t, tr.Data)
  77. require.Contains(t, tr.Content, "invalid encoding")
  78. }