feat: add im group mention flows

This commit is contained in:
richjohnrambo
2026-08-12 15:33:56 +08:00
parent 943ebe1397
commit 774a448c12
5 changed files with 345 additions and 0 deletions
+47
View File
@@ -821,6 +821,53 @@ func TestServeIMMessageReceipts(t *testing.T) {
}
}
func TestServeIMGroupMembers(t *testing.T) {
ctrl := gomock.NewController(t)
defer ctrl.Finish()
expectIMBearer(t, ctrl, "token-1", 7, 42)
oldSubs := store.Subs
oldTopics := store.Topics
subs := mock_store.NewMockSubsPersistenceInterface(ctrl)
topics := mock_store.NewMockTopicsPersistenceInterface(ctrl)
store.Subs = subs
store.Topics = topics
defer func() {
store.Subs = oldSubs
store.Topics = oldTopics
}()
subs.EXPECT().Get(types.TenantID(7), "grpMention", types.Uid(42), false).Return(&types.Subscription{
TenantID: 7,
User: types.Uid(42).String(),
Topic: "grpMention",
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)
req := httptest.NewRequest(http.MethodGet, "/v1/im/groups/grpMention/members?query=ali&mentionable=true", nil)
req.Header.Set("Authorization", "Bearer token-1")
rec := httptest.NewRecorder()
serveIMGroupResource(rec, req)
if rec.Code != http.StatusOK {
t.Fatalf("status: got %d, want %d; body=%s", rec.Code, http.StatusOK, rec.Body.String())
}
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 {
t.Fatalf("unexpected members response: %#v", data)
}
if data["permissions"].(map[string]any)["can_mention_all"] != true {
t.Fatalf("expected can_mention_all permission: %#v", data)
}
}
func TestServeIMMessageRecall(t *testing.T) {
ctrl := gomock.NewController(t)
defer ctrl.Finish()