feat: add im home and message action flows
This commit is contained in:
+111
-7
@@ -200,7 +200,8 @@ func TestHandleBroadcastDataP2P(t *testing.T) {
|
||||
helper := TopicTestHelper{}
|
||||
helper.setUp(t, numUsers, types.TopicCatP2P, "p2p-test" /*attach=*/, true)
|
||||
defer helper.tearDown()
|
||||
helper.mm.EXPECT().Save(types.TenantID(1), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil, true)
|
||||
helper.mm.EXPECT().Save(types.TenantID(1), gomock.Any(), gomock.Any(), gomock.Any()).
|
||||
Return(&types.MessageSaveResult{SeqId: 1, MarkedReadBySender: true}, nil)
|
||||
|
||||
from := helper.uids[0].UserId()
|
||||
msg := &ClientComMessage{
|
||||
@@ -285,7 +286,8 @@ func TestHandleBroadcastCall(t *testing.T) {
|
||||
globals.iceServers = []iceServer{{Username: "dummy"}}
|
||||
helper.topic.lastID = 5
|
||||
defer helper.tearDown()
|
||||
helper.mm.EXPECT().Save(types.TenantID(1), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil, true)
|
||||
helper.mm.EXPECT().Save(types.TenantID(1), gomock.Any(), gomock.Any(), gomock.Any()).
|
||||
Return(&types.MessageSaveResult{SeqId: 1, MarkedReadBySender: true}, nil)
|
||||
|
||||
from := helper.uids[0].UserId()
|
||||
msg := &ClientComMessage{
|
||||
@@ -397,7 +399,8 @@ func TestHandleBroadcastDataGroup(t *testing.T) {
|
||||
store.Messages = nil
|
||||
helper.tearDown()
|
||||
}()
|
||||
helper.mm.EXPECT().Save(types.TenantID(1), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil, true)
|
||||
helper.mm.EXPECT().Save(types.TenantID(1), gomock.Any(), gomock.Any(), gomock.Any()).
|
||||
Return(&types.MessageSaveResult{SeqId: 1, MarkedReadBySender: true}, nil)
|
||||
|
||||
// User 3 isn't allowed to read.
|
||||
pu3 := helper.topic.perUser[helper.uids[3]]
|
||||
@@ -557,7 +560,7 @@ func TestHandleBroadcastDataDbError(t *testing.T) {
|
||||
defer helper.tearDown()
|
||||
|
||||
// DB returns an error.
|
||||
helper.mm.EXPECT().Save(types.TenantID(1), gomock.Any(), gomock.Any(), gomock.Any()).Return(types.ErrInternal, false)
|
||||
helper.mm.EXPECT().Save(types.TenantID(1), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil, types.ErrInternal)
|
||||
|
||||
// Make test message.
|
||||
from := helper.uids[0].UserId()
|
||||
@@ -605,6 +608,104 @@ func TestHandleBroadcastDataDbError(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestHandleBroadcastDataDuplicateClientMessage(t *testing.T) {
|
||||
numUsers := 2
|
||||
helper := TopicTestHelper{}
|
||||
helper.setUp(t, numUsers, types.TopicCatP2P, "p2p-test", true)
|
||||
defer helper.tearDown()
|
||||
helper.topic.lastID = 7
|
||||
|
||||
helper.mm.EXPECT().Save(types.TenantID(1), gomock.Any(), gomock.Any(), gomock.Any()).
|
||||
Return(&types.MessageSaveResult{SeqId: 4, Duplicate: true}, nil)
|
||||
|
||||
from := helper.uids[0].UserId()
|
||||
msg := &ClientComMessage{
|
||||
Id: "retry-1",
|
||||
AsUser: from,
|
||||
Pub: &MsgClientPub{
|
||||
Topic: "p2p",
|
||||
Head: map[string]any{"x-im-client-mid": "mid-1"},
|
||||
Content: "test",
|
||||
},
|
||||
sess: helper.sessions[0],
|
||||
}
|
||||
|
||||
helper.topic.handleClientMsg(msg)
|
||||
helper.finish()
|
||||
|
||||
if errorMsgs, hasError := helper.hubMessages["__ERROR__"]; hasError {
|
||||
t.Fatal(errorMsgs[0].Ctrl.Text)
|
||||
}
|
||||
if helper.topic.lastID != 7 {
|
||||
t.Errorf("Topic.lastID: expected duplicate to keep 7, found %d", helper.topic.lastID)
|
||||
}
|
||||
if len(helper.results[0].messages) != 1 {
|
||||
t.Fatalf("User 1 is expected to receive one ctrl message vs %d received.", len(helper.results[0].messages))
|
||||
}
|
||||
ack := helper.results[0].messages[0].(*ServerComMessage)
|
||||
if ack.Ctrl == nil {
|
||||
t.Fatal("User 1 is expected to receive a ctrl message")
|
||||
}
|
||||
if ack.Ctrl.Code != 202 {
|
||||
t.Errorf("User1: expected ctrl.code 202, received %d", ack.Ctrl.Code)
|
||||
}
|
||||
params, ok := ack.Ctrl.Params.(map[string]any)
|
||||
if !ok {
|
||||
t.Fatalf("User1: expected ctrl params map, received %#v", ack.Ctrl.Params)
|
||||
}
|
||||
if seq, ok := params["seq"].(int); !ok || seq != 4 {
|
||||
t.Errorf("User1: expected duplicate ack seq 4, received %#v", params["seq"])
|
||||
}
|
||||
if len(helper.results[1].messages) != 0 {
|
||||
t.Errorf("User 2 is not expected to receive any messages, %d received.", len(helper.results[1].messages))
|
||||
}
|
||||
if len(helper.hubMessages) != 0 {
|
||||
t.Errorf("Hubhelper.route did not expect any messages, however %d received.", len(helper.hubMessages))
|
||||
}
|
||||
}
|
||||
|
||||
func TestHandleBroadcastDataRejectsUserSystemType(t *testing.T) {
|
||||
numUsers := 2
|
||||
helper := TopicTestHelper{}
|
||||
helper.setUp(t, numUsers, types.TopicCatP2P, "p2p-test", true)
|
||||
defer helper.tearDown()
|
||||
|
||||
from := helper.uids[0].UserId()
|
||||
msg := &ClientComMessage{
|
||||
Id: "sys-1",
|
||||
AsUser: from,
|
||||
Pub: &MsgClientPub{
|
||||
Topic: "p2p",
|
||||
Head: map[string]any{"type": "system"},
|
||||
Content: "test",
|
||||
},
|
||||
sess: helper.sessions[0],
|
||||
}
|
||||
|
||||
helper.topic.handleClientMsg(msg)
|
||||
helper.finish()
|
||||
|
||||
if errorMsgs, hasError := helper.hubMessages["__ERROR__"]; hasError {
|
||||
t.Fatal(errorMsgs[0].Ctrl.Text)
|
||||
}
|
||||
if helper.topic.lastID != 0 {
|
||||
t.Errorf("Topic.lastID: expected forbidden publish to keep 0, found %d", helper.topic.lastID)
|
||||
}
|
||||
if len(helper.results[0].messages) != 1 {
|
||||
t.Fatalf("User 1 is expected to receive one ctrl message vs %d received.", len(helper.results[0].messages))
|
||||
}
|
||||
resp := helper.results[0].messages[0].(*ServerComMessage)
|
||||
if resp.Ctrl == nil || resp.Ctrl.Code != 403 {
|
||||
t.Fatalf("User 1 expected 403 ctrl, received %#v", resp)
|
||||
}
|
||||
if len(helper.results[1].messages) != 0 {
|
||||
t.Errorf("User 2 is not expected to receive any messages, %d received.", len(helper.results[1].messages))
|
||||
}
|
||||
if len(helper.hubMessages) != 0 {
|
||||
t.Errorf("Hubhelper.route did not expect any messages, however %d received.", len(helper.hubMessages))
|
||||
}
|
||||
}
|
||||
|
||||
func TestHandleBroadcastDataInactiveTopic(t *testing.T) {
|
||||
numUsers := 2
|
||||
helper := TopicTestHelper{}
|
||||
@@ -2876,7 +2977,8 @@ func TestHandleBroadcastDataWithAttachments(t *testing.T) {
|
||||
helper := TopicTestHelper{}
|
||||
helper.setUp(t, numUsers, types.TopicCatP2P, "p2p-test", true)
|
||||
defer helper.tearDown()
|
||||
helper.mm.EXPECT().Save(types.TenantID(1), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil, true)
|
||||
helper.mm.EXPECT().Save(types.TenantID(1), gomock.Any(), gomock.Any(), gomock.Any()).
|
||||
Return(&types.MessageSaveResult{SeqId: 1, MarkedReadBySender: true}, nil)
|
||||
|
||||
from := helper.uids[0].UserId()
|
||||
msg := &ClientComMessage{
|
||||
@@ -3039,7 +3141,8 @@ func TestHandleBroadcastDataGroupWithMutedUser(t *testing.T) {
|
||||
helper := TopicTestHelper{}
|
||||
helper.setUp(t, numUsers, types.TopicCatGrp, topicName, true)
|
||||
defer helper.tearDown()
|
||||
helper.mm.EXPECT().Save(types.TenantID(1), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil, true)
|
||||
helper.mm.EXPECT().Save(types.TenantID(1), gomock.Any(), gomock.Any(), gomock.Any()).
|
||||
Return(&types.MessageSaveResult{SeqId: 1, MarkedReadBySender: true}, nil)
|
||||
|
||||
// User 2 has muted the topic (no Pres permission)
|
||||
pu2 := helper.topic.perUser[helper.uids[2]]
|
||||
@@ -3103,7 +3206,8 @@ func TestUnregisterSessionWithPendingCall(t *testing.T) {
|
||||
isOriginator: true,
|
||||
sess: s,
|
||||
}
|
||||
helper.mm.EXPECT().Save(types.TenantID(1), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil, true)
|
||||
helper.mm.EXPECT().Save(types.TenantID(1), gomock.Any(), gomock.Any(), gomock.Any()).
|
||||
Return(&types.MessageSaveResult{SeqId: 1, MarkedReadBySender: true}, nil)
|
||||
|
||||
leave := &ClientComMessage{
|
||||
Leave: &MsgClientLeave{
|
||||
|
||||
Reference in New Issue
Block a user