2026-04-21 13:56:02 +08:00
|
|
|
package service
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
|
|
"github.com/Wei-Shaw/sub2api/internal/pkg/apicompat"
|
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
|
"github.com/tidwall/gjson"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func TestNormalizeResponsesRequestServiceTier(t *testing.T) {
|
|
|
|
|
t.Parallel()
|
|
|
|
|
|
|
|
|
|
req := &apicompat.ResponsesRequest{ServiceTier: " fast "}
|
|
|
|
|
normalizeResponsesRequestServiceTier(req)
|
|
|
|
|
require.Equal(t, "priority", req.ServiceTier)
|
|
|
|
|
|
|
|
|
|
req.ServiceTier = "flex"
|
|
|
|
|
normalizeResponsesRequestServiceTier(req)
|
|
|
|
|
require.Equal(t, "flex", req.ServiceTier)
|
|
|
|
|
|
2026-04-28 00:34:23 +08:00
|
|
|
// OpenAI 官方合法 tier 应被透传保留。
|
|
|
|
|
req.ServiceTier = "auto"
|
|
|
|
|
normalizeResponsesRequestServiceTier(req)
|
|
|
|
|
require.Equal(t, "auto", req.ServiceTier)
|
|
|
|
|
|
2026-04-21 13:56:02 +08:00
|
|
|
req.ServiceTier = "default"
|
|
|
|
|
normalizeResponsesRequestServiceTier(req)
|
2026-04-28 00:34:23 +08:00
|
|
|
require.Equal(t, "default", req.ServiceTier)
|
|
|
|
|
|
|
|
|
|
req.ServiceTier = "scale"
|
|
|
|
|
normalizeResponsesRequestServiceTier(req)
|
|
|
|
|
require.Equal(t, "scale", req.ServiceTier)
|
|
|
|
|
|
|
|
|
|
// 真未知值仍被剥离。
|
|
|
|
|
req.ServiceTier = "turbo"
|
|
|
|
|
normalizeResponsesRequestServiceTier(req)
|
2026-04-21 13:56:02 +08:00
|
|
|
require.Empty(t, req.ServiceTier)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestNormalizeResponsesBodyServiceTier(t *testing.T) {
|
|
|
|
|
t.Parallel()
|
|
|
|
|
|
|
|
|
|
body, tier, err := normalizeResponsesBodyServiceTier([]byte(`{"model":"gpt-5.1","service_tier":"fast"}`))
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
require.Equal(t, "priority", tier)
|
|
|
|
|
require.Equal(t, "priority", gjson.GetBytes(body, "service_tier").String())
|
|
|
|
|
|
|
|
|
|
body, tier, err = normalizeResponsesBodyServiceTier([]byte(`{"model":"gpt-5.1","service_tier":"flex"}`))
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
require.Equal(t, "flex", tier)
|
|
|
|
|
require.Equal(t, "flex", gjson.GetBytes(body, "service_tier").String())
|
|
|
|
|
|
2026-04-28 00:34:23 +08:00
|
|
|
// OpenAI 官方 tier 直接保留在 body 中(透传上游)。
|
|
|
|
|
body, tier, err = normalizeResponsesBodyServiceTier([]byte(`{"model":"gpt-5.1","service_tier":"auto"}`))
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
require.Equal(t, "auto", tier)
|
|
|
|
|
require.Equal(t, "auto", gjson.GetBytes(body, "service_tier").String())
|
|
|
|
|
|
2026-04-21 13:56:02 +08:00
|
|
|
body, tier, err = normalizeResponsesBodyServiceTier([]byte(`{"model":"gpt-5.1","service_tier":"default"}`))
|
|
|
|
|
require.NoError(t, err)
|
2026-04-28 00:34:23 +08:00
|
|
|
require.Equal(t, "default", tier)
|
|
|
|
|
require.Equal(t, "default", gjson.GetBytes(body, "service_tier").String())
|
|
|
|
|
|
|
|
|
|
body, tier, err = normalizeResponsesBodyServiceTier([]byte(`{"model":"gpt-5.1","service_tier":"scale"}`))
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
require.Equal(t, "scale", tier)
|
|
|
|
|
require.Equal(t, "scale", gjson.GetBytes(body, "service_tier").String())
|
|
|
|
|
|
|
|
|
|
// 真未知值才会被删除。
|
|
|
|
|
body, tier, err = normalizeResponsesBodyServiceTier([]byte(`{"model":"gpt-5.1","service_tier":"turbo"}`))
|
|
|
|
|
require.NoError(t, err)
|
2026-04-21 13:56:02 +08:00
|
|
|
require.Empty(t, tier)
|
|
|
|
|
require.False(t, gjson.GetBytes(body, "service_tier").Exists())
|
|
|
|
|
}
|