fix: 优化群成员分页并补齐头像资料
This commit is contained in:
+31
-13
@@ -345,6 +345,9 @@ type testGroupBusinessStore struct {
|
||||
mutes []types.GroupMute
|
||||
files []types.GroupFile
|
||||
invitations []types.GroupInvitation
|
||||
listMembers []types.GroupMember
|
||||
listMembersOpts types.GroupMemberListOptions
|
||||
listMembersNext string
|
||||
updatedSettings types.GroupSettingsPatch
|
||||
updatedMembers []types.GroupMemberPatch
|
||||
updatedRoleMode types.AccessMode
|
||||
@@ -402,8 +405,9 @@ func (s *testGroupBusinessStore) GetMember(_ types.TenantID, topic string, uid t
|
||||
return &types.GroupMember{Topic: topic, UserID: uid, Role: types.GroupMemberRoleMember, MemberStatus: types.GroupMemberStatusActive, Version: 1}, nil
|
||||
}
|
||||
|
||||
func (s *testGroupBusinessStore) ListMembers(_ types.TenantID, _ string, _ types.GroupMemberListOptions) ([]types.GroupMember, string, error) {
|
||||
return nil, "", nil
|
||||
func (s *testGroupBusinessStore) ListMembers(_ types.TenantID, _ string, opts types.GroupMemberListOptions) ([]types.GroupMember, string, error) {
|
||||
s.listMembersOpts = opts
|
||||
return s.listMembers, s.listMembersNext, nil
|
||||
}
|
||||
|
||||
func (s *testGroupBusinessStore) UpdateMember(_ types.TenantID, topic string, uid types.Uid, patch types.GroupMemberPatch) (*types.GroupMember, error) {
|
||||
@@ -3877,14 +3881,14 @@ func TestServeIMGroupMembers(t *testing.T) {
|
||||
defer ctrl.Finish()
|
||||
expectIMBearer(t, ctrl, "token-1", 7, 42)
|
||||
oldSubs := store.Subs
|
||||
oldTopics := store.Topics
|
||||
oldGroupBusiness := store.GroupBusiness
|
||||
subs := mock_store.NewMockSubsPersistenceInterface(ctrl)
|
||||
topics := mock_store.NewMockTopicsPersistenceInterface(ctrl)
|
||||
store.Subs = subs
|
||||
store.Topics = topics
|
||||
groupStore := &testGroupBusinessStore{listMembersNext: "101"}
|
||||
store.GroupBusiness = groupStore
|
||||
defer func() {
|
||||
store.Subs = oldSubs
|
||||
store.Topics = oldTopics
|
||||
store.GroupBusiness = oldGroupBusiness
|
||||
}()
|
||||
|
||||
subs.EXPECT().Get(types.TenantID(7), "grpMention", types.Uid(42), false).Return(&types.Subscription{
|
||||
@@ -3894,13 +3898,18 @@ func TestServeIMGroupMembers(t *testing.T) {
|
||||
ModeWant: types.ModeCFull,
|
||||
ModeGiven: types.ModeCFull,
|
||||
}, nil)
|
||||
alice := types.Subscription{User: types.Uid(101).UserId(), ModeWant: types.ModeCPublic, ModeGiven: types.ModeCPublic}
|
||||
alice.SetPublic(map[string]any{"display_name": "Alice"})
|
||||
bob := types.Subscription{User: types.Uid(102).UserId(), ModeWant: types.ModeJoin, ModeGiven: types.ModeJoin}
|
||||
bob.SetPublic(map[string]any{"display_name": "Bob"})
|
||||
topics.EXPECT().GetUsers(types.TenantID(7), "grpMention", gomock.Any()).Return([]types.Subscription{alice, bob}, nil)
|
||||
groupStore.listMembers = []types.GroupMember{{
|
||||
ID: 101,
|
||||
Topic: "grpMention",
|
||||
UserID: types.Uid(101),
|
||||
Role: types.GroupMemberRoleMember,
|
||||
ModeWant: types.ModeCPublic,
|
||||
ModeGiven: types.ModeCPublic,
|
||||
Public: map[string]any{"display_name": "Alice", "avatar_file_id": "alice.jpg"},
|
||||
MemberStatus: types.GroupMemberStatusActive,
|
||||
}}
|
||||
|
||||
req := httptest.NewRequest(http.MethodGet, "/v1/im/groups/grpMention/members?query=ali&mentionable=true", nil)
|
||||
req := httptest.NewRequest(http.MethodGet, "/v1/im/groups/grpMention/members?query=ali&mentionable=true&limit=20&cursor=99", nil)
|
||||
req.Header.Set("Authorization", "Bearer token-1")
|
||||
rec := httptest.NewRecorder()
|
||||
|
||||
@@ -3911,12 +3920,21 @@ func TestServeIMGroupMembers(t *testing.T) {
|
||||
}
|
||||
data := decodeIMHTTPResponse(t, rec).Data.(map[string]any)
|
||||
items := data["items"].([]any)
|
||||
if len(items) != 1 || items[0].(map[string]any)["display_name"] != "Alice" || items[0].(map[string]any)["mentionable"] != true {
|
||||
if len(items) != 1 || items[0].(map[string]any)["display_name"] != "Alice" ||
|
||||
items[0].(map[string]any)["avatar_file_id"] != "alice.jpg" ||
|
||||
items[0].(map[string]any)["mentionable"] != true {
|
||||
t.Fatalf("unexpected members response: %#v", data)
|
||||
}
|
||||
if data["next_cursor"] != "101" {
|
||||
t.Fatalf("unexpected cursor: %#v", data)
|
||||
}
|
||||
if data["permissions"].(map[string]any)["can_mention_all"] != true {
|
||||
t.Fatalf("expected can_mention_all permission: %#v", data)
|
||||
}
|
||||
if groupStore.listMembersOpts.Query != "ali" || !groupStore.listMembersOpts.Mentionable ||
|
||||
groupStore.listMembersOpts.Limit != 20 || groupStore.listMembersOpts.Cursor != "99" {
|
||||
t.Fatalf("members options were not forwarded: %#v", groupStore.listMembersOpts)
|
||||
}
|
||||
}
|
||||
|
||||
func TestGroupMemberPayloadUserIDFormats(t *testing.T) {
|
||||
|
||||
Reference in New Issue
Block a user