spark-server/internal/pkg/reply/reply_test.go
2026-09-18 14:50:41 +08:00

63 lines
1.8 KiB
Go

package reply
import (
"bytes"
"encoding/json"
"testing"
"spark-server/internal/pkg/errs"
"spark-server/internal/pkg/i18n"
"spark-server/internal/pkg/reqctx"
)
func TestOKAndFailEnvelope(t *testing.T) {
raw := MustMarshal(StampID(OK(map[string]int{"n": 1}), "rid-1"))
var env Envelope
if err := json.Unmarshal(raw, &env); err != nil {
t.Fatal(err)
}
if env.Code != "0" || env.Msg != "ok" || env.RequestID != "rid-1" || string(env.Data) != `{"n":1}` {
t.Fatalf("%+v", env)
}
if !bytes.Contains(raw, []byte(`"request_id":"rid-1"`)) {
t.Fatalf("field order %s", raw)
}
detail := FailData(errs.ErrAvailable.Code, "unavailable", map[string]string{"mysql": "down"})
if string(detail.Data) != `{"mysql":"down"}` {
t.Fatalf("data %s", detail.Data)
}
fail := FromError(errs.ErrNotAuthenticated.WithMsg("login first"))
if fail.Code != errs.ErrNotAuthenticated.Code || fail.Msg != "login first" || string(fail.Data) != "{}" {
t.Fatalf("fail %+v", fail)
}
zh := FromError(errs.ErrUnauthorized)
if zh.Msg != "未授权" {
t.Fatalf("zh %q", zh.Msg)
}
en := FromErrorLang(i18n.En, errs.ErrUnauthorized)
if en.Msg != "unauthorized" {
t.Fatalf("en %q", en.Msg)
}
}
func TestUnmarshal(t *testing.T) {
env, err := Unmarshal([]byte(`{"code":"0","msg":"ok"}`))
if err != nil {
t.Fatal(err)
}
if string(env.Data) != "{}" {
t.Fatalf("empty data %s", env.Data)
}
if env.RequestID != "" {
t.Fatalf("missing request_id %q", env.RequestID)
}
}
func TestFromContextStampsRequestID(t *testing.T) {
ctx := reqctx.With(t.Context(), &reqctx.RequestContext{RequestID: "rid-ctx", Language: "en"})
env := FromContext(ctx, errs.ErrUnauthorized)
if env.RequestID != "rid-ctx" || env.Code != errs.ErrUnauthorized.Code || env.Msg != "unauthorized" {
t.Fatalf("%+v", env)
}
}