You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

99 lines
2.7 KiB

package openaichat
import (
"encoding/base64"
"encoding/json"
"strings"
"testing"
)
func TestEffectiveModelDropsSpark(t *testing.T) {
if EffectiveModel("") != "gpt-5.3-chat" || EffectiveModel("generalv3.5") != "gpt-5.3-chat" {
t.Fatal(EffectiveModel("generalv3.5"))
}
if EffectiveModel("gpt-5.4") != "gpt-5.4" {
t.Fatal(EffectiveModel("gpt-5.4"))
}
}
func TestEnvelopeUsesOpenAIModelNotSpark(t *testing.T) {
c, err := New("app", "key", "secret", "spark-api.xf-yun.com", "generalv3.5")
if err != nil {
t.Fatal(err)
}
if c.Host != defaultHost {
t.Fatalf("星火主机必须丢掉,得到 %s", c.Host)
}
if c.Model != defaultModel {
t.Fatalf("星火 domain 不能当模型,得到 %s", c.Model)
}
raw, err := c.envelope([]Message{{Role: "user", Content: "1+1等于几"}})
if err != nil {
t.Fatal(err)
}
var outer struct {
Header struct {
AppID string `json:"app_id"`
Status int `json:"status"`
} `json:"header"`
Payload struct {
Input struct {
Status int `json:"status"`
Text string `json:"text"`
} `json:"input"`
} `json:"payload"`
}
if err := json.Unmarshal(raw, &outer); err != nil {
t.Fatal(err)
}
if outer.Header.AppID != "app" || outer.Header.Status != 3 || outer.Payload.Input.Status != 3 {
t.Fatalf("信封不对: %+v", outer.Header)
}
inner, err := base64.StdEncoding.DecodeString(outer.Payload.Input.Text)
if err != nil {
t.Fatal(err)
}
if strings.Contains(string(inner), "generalv3") || strings.Contains(string(inner), "spark") {
t.Fatalf("内层还带着星火: %s", inner)
}
var chat struct {
Model string `json:"model"`
Stream bool `json:"stream"`
Messages []Message `json:"messages"`
}
if err := json.Unmarshal(inner, &chat); err != nil {
t.Fatal(err)
}
if chat.Model != "gpt-5.3-chat" || chat.Stream || chat.Messages[0].Content != "1+1等于几" {
t.Fatalf("内层不对: %+v", chat)
}
}
func TestParseChatCompletion(t *testing.T) {
inner, _ := json.Marshal(map[string]any{
"object": "chat.completion",
"choices": []any{
map[string]any{"message": map[string]any{"content": "1+1等于2。"}},
},
})
outer, _ := json.Marshal(map[string]any{
"header": map[string]any{"code": 0, "message": "success"},
"payload": map[string]any{
"output": map[string]any{"text": base64.StdEncoding.EncodeToString(inner)},
},
})
got, err := parseOuter(outer)
if err != nil || got != "1+1等于2。" {
t.Fatalf("got %q err %v", got, err)
}
}
func TestParseGatewayError(t *testing.T) {
outer, _ := json.Marshal(map[string]any{
"header": map[string]any{"code": 11200, "message": "授权错误"},
})
_, err := parseOuter(outer)
if err == nil || !strings.Contains(err.Error(), "11200") {
t.Fatalf("err=%v", err)
}
}