73 lines
2.2 KiB
Go
73 lines
2.2 KiB
Go
package logic
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"spark-server/internal/infrastructure/id"
|
|
"spark-server/internal/module/deliver/entity"
|
|
inboxmodel "spark-server/internal/module/inbox/model"
|
|
syncentity "spark-server/internal/module/sync/entity"
|
|
syncmodel "spark-server/internal/module/sync/model"
|
|
"spark-server/internal/transport/tcp/protocol"
|
|
"spark-server/internal/transport/tcp/session"
|
|
)
|
|
|
|
func TestInboxFanoutMessageIncrementsUnreadAndPushes(t *testing.T) {
|
|
inbox := inboxmodel.NewMemoryStore()
|
|
mgr := session.NewManager()
|
|
peer := session.NewConn("p", "203.0.113.10", 8)
|
|
peer.Authenticate(2, 9)
|
|
if err := mgr.Bind(peer); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
job := &entity.Job{
|
|
MsgID: 11, Cmd: protocol.CmdMessage, ConversationID: 5,
|
|
FromUserID: 1, ExcludeDevice: 7, ToUserIDs: []int64{1, 2},
|
|
Payload: []byte(`{"code":"0"}`), Preview: []byte(`{"t":1}`),
|
|
}
|
|
if err := InboxFanout(mgr, inbox, nil)(t.Context(), job); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if inbox.UnreadCount(2, 5) != 1 {
|
|
t.Fatalf("unread %d", inbox.UnreadCount(2, 5))
|
|
}
|
|
pkts := peer.DrainOutbound(2)
|
|
if len(pkts) != 1 || pkts[0].Command != protocol.CmdMessage {
|
|
t.Fatalf("push %+v", pkts)
|
|
}
|
|
}
|
|
|
|
func TestInboxFanoutRecallSkipsUnread(t *testing.T) {
|
|
inbox := inboxmodel.NewMemoryStore()
|
|
job := &entity.Job{
|
|
MsgID: 12, Cmd: protocol.CmdRecallMessage, ConversationID: 5,
|
|
FromUserID: 1, ToUserIDs: []int64{1, 2}, Preview: []byte(`{"status":2}`),
|
|
}
|
|
if err := applyInbox(t.Context(), inbox, job); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if inbox.UnreadCount(2, 5) != 0 {
|
|
t.Fatal("recall must not bump unread")
|
|
}
|
|
}
|
|
|
|
func TestInboxFanoutRecallWritesMailbox(t *testing.T) {
|
|
ids, err := id.New(1)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
inbox := inboxmodel.NewMemoryStore()
|
|
box := syncmodel.NewMemoryStore(ids)
|
|
job := &entity.Job{
|
|
MsgID: 12, Cmd: protocol.CmdRecallMessage, ConversationID: 5,
|
|
FromUserID: 1, ToUserIDs: []int64{1, 2}, Payload: []byte(`{"msg_id":12}`),
|
|
}
|
|
if err := InboxFanout(nil, inbox, box)(t.Context(), job); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
items, err := box.ListSince(t.Context(), 2, 0, 0, 10)
|
|
if err != nil || len(items) != 1 || items[0].EventType != syncentity.EventRecall {
|
|
t.Fatalf("mailbox %+v %v", items, err)
|
|
}
|
|
}
|