package main import ( "fmt" "testing" "github.com/tinode/chat/server/store" "github.com/tinode/chat/server/store/types" ) type defaultAvatarConfigStore map[string]string func (s defaultAvatarConfigStore) Get(_ string, keys ...string) (map[string]string, error) { out := make(map[string]string, len(keys)) for _, key := range keys { out[key] = s[key] } return out, nil } func TestUserSummaryPayloadAppliesDefaultAvatarByGenderAndUserID(t *testing.T) { oldConfig := store.ThirdPartyConfig store.ThirdPartyConfig = defaultAvatarConfigStore{ imDefaultMaleAvatarURLsConfig: `["m0","m1","m2","m3","m4"]`, imDefaultFemaleAvatarURLsConfig: `["f0","f1","f2","f3","f4"]`, } defer func() { store.ThirdPartyConfig = oldConfig }() for i, gender := range []string{"male", "female"} { uid := types.Uid(10 + i) payload := userSummaryPayload(&types.User{ ObjHeader: types.ObjHeader{Id: uid.String()}, Public: map[string]any{"display_name": "Alice", "gender": gender}, }, "") wantPrefix := "m" if gender == "female" { wantPrefix = "f" } want := fmt.Sprintf("%s%d", wantPrefix, uint64(uid)%5) if payload["avatar_file_id"] != want { t.Fatalf("gender=%s avatar=%v want %s", gender, payload["avatar_file_id"], want) } } } func TestUserSummaryPayloadKeepsUploadedAvatar(t *testing.T) { oldConfig := store.ThirdPartyConfig store.ThirdPartyConfig = defaultAvatarConfigStore{ imDefaultMaleAvatarURLsConfig: `["m0","m1","m2","m3","m4"]`, } defer func() { store.ThirdPartyConfig = oldConfig }() payload := userSummaryPayload(&types.User{ ObjHeader: types.ObjHeader{Id: types.Uid(10).String()}, Public: map[string]any{"display_name": "Alice", "gender": "male", "avatar_file_id": "uploaded.png"}, }, "") if payload["avatar_file_id"] != "uploaded.png" { t.Fatalf("avatar=%v", payload["avatar_file_id"]) } }