Files
im_server/server/db/mysql/user_identity_test.go
T

80 lines
3.3 KiB
Go

//go:build mysql
// +build mysql
package mysql
import (
"database/sql"
"testing"
)
func TestNormalizeUserPhone(t *testing.T) {
for input, want := range map[string]string{
"13800138000": "+8613800138000",
"+8613800138000": "+8613800138000",
"tel:+17025550001": "+17025550001",
} {
got, err := normalizeUserPhone(input)
if err != nil {
t.Fatalf("normalize %q: %v", input, err)
}
if got != want {
t.Fatalf("normalize %q: got %q, want %q", input, got, want)
}
}
if _, err := normalizeUserPhone("12345"); err == nil {
t.Fatal("invalid phone unexpectedly accepted")
}
}
func TestProfilePublicFromFields(t *testing.T) {
public := profilePublicFromFields(sql.NullString{String: "新昵称", Valid: true}, sql.NullString{String: "file_avatar_1", Valid: true},
sql.NullString{String: "新签名", Valid: true}, sql.NullString{String: "male", Valid: true},
sql.NullString{String: "上海", Valid: true}, sql.NullString{String: "usrProfile", Valid: true}).(map[string]any)
for _, key := range []string{"fn", "name", "nickname", "display_name"} {
if public[key] != "新昵称" {
t.Fatalf("nickname field %s not overlaid: %#v", key, public)
}
}
if public["avatar_file_id"] != "file_avatar_1" || public["signature"] != "新签名" || public["gender"] != "male" ||
public["region"] != "上海" || public["public_account"] != "usrProfile" {
t.Fatalf("profile public not overlaid: %#v", public)
}
public = profilePublicFromFieldsWithAvatarURL(sql.NullString{}, sql.NullString{String: "file_avatar_1", Valid: true},
sql.NullString{String: "https://cdn.example.com/avatar.png", Valid: true}, sql.NullString{}, sql.NullString{},
sql.NullString{}, sql.NullString{}).(map[string]any)
if public["avatar_file_id"] != "file_avatar_1" || public["avatar_url"] != "https://cdn.example.com/avatar.png" {
t.Fatalf("avatar url not overlaid: %#v", public)
}
public = profilePublicFromFields(sql.NullString{}, sql.NullString{String: "https://cdn.example.com/default.png", Valid: true},
sql.NullString{}, sql.NullString{}, sql.NullString{}, sql.NullString{}).(map[string]any)
if public["avatar_file_id"] != "https://cdn.example.com/default.png" || public["avatar_url"] != "https://cdn.example.com/default.png" {
t.Fatalf("absolute avatar value should be exposed as avatar_url: %#v", public)
}
public = profilePublicFromFields(sql.NullString{Valid: true}, sql.NullString{Valid: true}, sql.NullString{Valid: true},
sql.NullString{Valid: true}, sql.NullString{Valid: true}, sql.NullString{Valid: true}).(map[string]any)
for _, key := range []string{"fn", "name", "nickname", "display_name", "avatar_file_id", "avatar_url", "photo", "avatar", "signature", "gender", "region", "public_account"} {
if _, ok := public[key]; ok {
t.Fatalf("legacy profile field %s should not be read from im_users.public: %#v", key, public)
}
}
}
func TestProfileSeedFromPublic(t *testing.T) {
nickname, avatar := profileSeedFromPublic(map[string]any{
"fn": "旧昵称",
"avatar_file_id": "file_avatar_1",
})
if nickname != "旧昵称" || avatar != "file_avatar_1" {
t.Fatalf("unexpected profile seed nickname=%q avatar=%q", nickname, avatar)
}
_, avatar = profileSeedFromPublic(map[string]any{"photo": "https://example.com/avatar.png"})
if avatar != "" {
t.Fatalf("photo URL must not be treated as avatar_file_id: %q", avatar)
}
}