//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 = 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", "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) } }