Files
zarinpal-analytics-backend/internal/aiprovider/agentrouter_test.go

52 lines
2.0 KiB
Go

package aiprovider
import (
"context"
"encoding/json"
"net/http"
"net/http/httptest"
"testing"
"time"
)
func TestAgentRouterUsesChatCompletionsContract(t *testing.T) {
var received map[string]any
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if r.URL.Path != "/v1/chat/completions" {
t.Fatalf("path = %q", r.URL.Path)
}
if r.Header.Get("Authorization") != "Bearer test-key" {
t.Fatal("authorization header missing")
}
if r.Header.Get("User-Agent") != agentRouterUserAgent {
t.Fatalf("user-agent = %q", r.Header.Get("User-Agent"))
}
if err := json.NewDecoder(r.Body).Decode(&received); err != nil {
t.Fatal(err)
}
w.Header().Set("Content-Type", "application/json")
_, _ = w.Write([]byte(`{"id":"chat-1","choices":[{"finish_reason":"stop","message":{"role":"assistant","content":"{\"answer\":\"ok\"}"}}],"usage":{"prompt_tokens":12,"completion_tokens":4}}`))
}))
defer server.Close()
client := NewAgentRouter(Config{BaseURL: server.URL, APIKey: "test-key", Model: "gpt-test", Timeout: time.Second}, server.Client())
var generator Generator = client
result, usage, err := generator.Generate(context.Background(), Request{
SchemaName: "answer", Schema: map[string]any{"type": "object", "additionalProperties": false},
Instructions: "system rules", Input: json.RawMessage(`{"safe":"aggregate"}`), MaxOutputTokens: 200,
})
if err != nil {
t.Fatal(err)
}
if string(result) != `{"answer":"ok"}` || usage.ProviderRequestID != "chat-1" || usage.InputTokens != 12 || usage.OutputTokens != 4 {
t.Fatalf("result=%s usage=%+v", result, usage)
}
if received["model"] != "gpt-test" || received["reasoning_effort"] != "medium" || received["parallel_tool_calls"] != false || received["max_tokens"] != float64(200) {
t.Fatalf("request controls = %#v", received)
}
format := received["response_format"].(map[string]any)
if format["type"] != "json_schema" {
t.Fatalf("response_format = %#v", format)
}
}