package models import ( "context" "io" "net/http" "strings" "testing" "time" ) type captureRoundTripper struct { authorization string } func TestOpenAICompatibleLocalAdapterUsesConfiguredTimeout(t *testing.T) { adapter, err := NewOpenAICompatibleLocalAdapterWithAPIKeyAndTimeout("http://gateway/v1", "", &captureRoundTripper{}, 47*time.Second) if err != nil { t.Fatal(err) } if adapter.client.Timeout != 47*time.Second { t.Fatalf("unexpected client timeout: %s", adapter.client.Timeout) } } func TestOpenAICompatibleLocalAdapterRejectsNonPositiveTimeout(t *testing.T) { if _, err := NewOpenAICompatibleLocalAdapterWithAPIKeyAndTimeout("http://gateway/v1", "", nil, 0); err == nil { t.Fatal("expected non-positive timeout to be rejected") } } func (t *captureRoundTripper) RoundTrip(request *http.Request) (*http.Response, error) { t.authorization = request.Header.Get("Authorization") return &http.Response{StatusCode: http.StatusOK, Body: io.NopCloser(strings.NewReader(`{"data":[]}`)), Header: make(http.Header), Request: request}, nil } func TestOpenAICompatibleLocalAdapterUsesResolvedAPIKey(t *testing.T) { transport := &captureRoundTripper{} adapter, err := NewOpenAICompatibleLocalAdapterWithAPIKey("http://gateway/v1", "resolved-key", transport) if err != nil { t.Fatal(err) } _, _ = adapter.Discover(context.Background()) if transport.authorization != "Bearer resolved-key" { t.Fatalf("unexpected authorization header: %q", transport.authorization) } } func TestOpenAICompatibleLocalAdapterDoesNotSendAuthorizationWithoutKey(t *testing.T) { transport := &captureRoundTripper{} adapter, err := NewOpenAICompatibleLocalAdapter("http://gateway/v1", transport) if err != nil { t.Fatal(err) } _, _ = adapter.Discover(context.Background()) if transport.authorization != "" { t.Fatalf("unexpected authorization header") } }