tavily_test.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package websearch
  2. import (
  3. "encoding/json"
  4. "testing"
  5. "github.com/stretchr/testify/require"
  6. )
  7. func TestTavilyProvider_Name(t *testing.T) {
  8. p := NewTavilyProvider("key", nil)
  9. require.Equal(t, "tavily", p.Name())
  10. }
  11. func TestTavilyProvider_Search_RequestConstruction(t *testing.T) {
  12. // Verify tavilyRequest struct fields map correctly
  13. req := tavilyRequest{
  14. APIKey: "test-key",
  15. Query: "golang",
  16. MaxResults: 3,
  17. SearchDepth: tavilySearchDepthBasic,
  18. }
  19. data, err := json.Marshal(req)
  20. require.NoError(t, err)
  21. var parsed map[string]any
  22. require.NoError(t, json.Unmarshal(data, &parsed))
  23. require.Equal(t, "test-key", parsed["api_key"])
  24. require.Equal(t, "golang", parsed["query"])
  25. require.Equal(t, float64(3), parsed["max_results"])
  26. require.Equal(t, "basic", parsed["search_depth"])
  27. }
  28. func TestTavilyProvider_Search_ResponseParsing(t *testing.T) {
  29. rawResp := `{"results":[{"url":"https://go.dev","title":"Go","content":"Go programming language","score":0.95}]}`
  30. var resp tavilyResponse
  31. require.NoError(t, json.Unmarshal([]byte(rawResp), &resp))
  32. require.Len(t, resp.Results, 1)
  33. require.Equal(t, "https://go.dev", resp.Results[0].URL)
  34. require.Equal(t, "Go programming language", resp.Results[0].Content)
  35. require.InDelta(t, 0.95, resp.Results[0].Score, 0.001)
  36. // Verify mapping to SearchResult
  37. results := make([]SearchResult, 0, len(resp.Results))
  38. for _, r := range resp.Results {
  39. results = append(results, SearchResult{
  40. URL: r.URL, Title: r.Title, Snippet: r.Content,
  41. })
  42. }
  43. require.Equal(t, "Go programming language", results[0].Snippet)
  44. require.Equal(t, "", results[0].PageAge)
  45. }
  46. func TestTavilyProvider_Search_EmptyResults(t *testing.T) {
  47. var resp tavilyResponse
  48. require.NoError(t, json.Unmarshal([]byte(`{"results":[]}`), &resp))
  49. require.Empty(t, resp.Results)
  50. }
  51. func TestTavilyProvider_Search_InvalidJSON(t *testing.T) {
  52. var resp tavilyResponse
  53. require.Error(t, json.Unmarshal([]byte("not json"), &resp))
  54. }