Files
bifrost/core/providers/openai/errors_test.go
Beyhan Oğur 880f412e2c first commit
2026-04-26 21:52:23 +03:00

84 lines
2.9 KiB
Go

package openai
import (
"testing"
"github.com/maximhq/bifrost/core/schemas"
"github.com/valyala/fasthttp"
)
func TestParseOpenAIError_FallbackMessageWhenProviderBodyIsNonOpenAIShape(t *testing.T) {
var resp fasthttp.Response
resp.SetStatusCode(fasthttp.StatusUnprocessableEntity)
resp.SetBodyString(`{"detail":[{"loc":["body","messages",0,"role"],"msg":"value is not a valid enumeration member"}]}`)
errResp := ParseOpenAIError(&resp)
if errResp == nil || errResp.Error == nil {
t.Fatal("expected non-nil error response")
}
if errResp.Error.Message == "" {
t.Fatal("expected non-empty error message")
}
if errResp.Error.Message != "provider API error (status 422)" {
t.Fatalf("expected fallback message, got %q", errResp.Error.Message)
}
}
func TestParseOpenAIError_PreservesProviderMessageWhenPresent(t *testing.T) {
var resp fasthttp.Response
resp.SetStatusCode(fasthttp.StatusUnprocessableEntity)
resp.SetBodyString(`{"error":{"message":"unsupported role: developer","type":"invalid_request_error","param":"messages.0.role","code":"invalid_value"}}`)
errResp := ParseOpenAIError(&resp)
if errResp == nil || errResp.Error == nil {
t.Fatal("expected non-nil error response")
}
if errResp.Error.Message != "unsupported role: developer" {
t.Fatalf("expected provider message, got %q", errResp.Error.Message)
}
}
func TestParseOpenAIError_FallbackMessageWhenBodyIsEmpty(t *testing.T) {
var resp fasthttp.Response
resp.SetStatusCode(fasthttp.StatusBadRequest)
resp.SetBody(nil)
errResp := ParseOpenAIError(&resp)
if errResp == nil || errResp.Error == nil {
t.Fatal("expected non-nil error response")
}
// HandleProviderAPIError returns ErrProviderResponseEmpty with HTTP status for empty bodies.
expectedMsg := schemas.ErrProviderResponseEmpty + " (HTTP 400)"
if errResp.Error.Message != expectedMsg {
t.Fatalf("expected %q, got %q", expectedMsg, errResp.Error.Message)
}
}
func TestParseOpenAIError_WhitespaceProviderMessageFallsBack(t *testing.T) {
var resp fasthttp.Response
resp.SetStatusCode(fasthttp.StatusBadRequest)
resp.SetBodyString(`{"error":{"message":" ","type":"invalid_request_error"}}`)
errResp := ParseOpenAIError(&resp)
if errResp == nil || errResp.Error == nil {
t.Fatal("expected non-nil error response")
}
if errResp.Error.Message != "provider API error (status 400)" {
t.Fatalf("expected fallback message, got %q", errResp.Error.Message)
}
}
func TestParseOpenAIError_DefaultStatusCodeFallsBackWithStatusNumber(t *testing.T) {
var resp fasthttp.Response
// fasthttp defaults zero-value response status code to 200.
resp.SetBodyString(`{"error":{"message":""}}`)
errResp := ParseOpenAIError(&resp)
if errResp == nil || errResp.Error == nil {
t.Fatal("expected non-nil error response")
}
if errResp.Error.Message != "provider API error (status 200)" {
t.Fatalf("expected fallback message with default status, got %q", errResp.Error.Message)
}
}