spark-server/internal/module/user/entity/avatar_test.go
zhr ae9a71034d feat: implement Spark IM V3 modular monolith
Add HTTP /v1 MVC, TCP send path, groups with server-side member-avatar collage, object-storage upload, and friends/favorites around the architecture-v3 layout.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 19:52:11 +08:00

69 lines
1.6 KiB
Go

package entity
import (
"bytes"
"image/png"
"strings"
"testing"
)
func TestLetterAvatarPNG(t *testing.T) {
raw, err := LetterAvatarPNG("test01")
if err != nil || len(raw) == 0 {
t.Fatalf("%v %d", err, len(raw))
}
img, err := png.Decode(bytes.NewReader(raw))
if err != nil {
t.Fatal(err)
}
if img.Bounds().Dx() != avatarSize || img.Bounds().Dy() != avatarSize {
t.Fatalf("size %+v", img.Bounds())
}
again, err := LetterAvatarPNG("test01")
if err != nil || !bytes.Equal(raw, again) {
t.Fatal("not stable")
}
other, err := LetterAvatarPNG("ada")
if err != nil || bytes.Equal(raw, other) {
t.Fatal("same png for different names")
}
cjk, err := LetterAvatarPNG("张三")
if err != nil {
t.Fatal(err)
}
if _, err := png.Decode(bytes.NewReader(cjk)); err != nil {
t.Fatal(err)
}
}
func TestAvatarLetter(t *testing.T) {
if got := AvatarLetter("test01"); got != "T" {
t.Fatalf("got %q", got)
}
if got := AvatarLetter(" ada"); got != "A" {
t.Fatalf("got %q", got)
}
if got := AvatarLetter(""); got != "?" {
t.Fatalf("empty %q", got)
}
if got := AvatarLetter("张三"); got != "" {
t.Fatalf("cjk %q", got)
}
}
func TestLetterAvatarDataURIFitsColumn(t *testing.T) {
for _, name := range []string{"test01", "ada", "张三", ""} {
got := LetterAvatarDataURI(name)
if !strings.HasPrefix(got, avatarDataURIPrefix) {
t.Fatalf("%q prefix %s", name, got)
}
if len(got) == 0 || len(got) > 512 {
t.Fatalf("%q len %d", name, len(got))
}
}
a, b := LetterAvatarDataURI("test01"), LetterAvatarDataURI("ada")
if a == b {
t.Fatal("same uri")
}
}