43 lines
1.5 KiB
Go
43 lines
1.5 KiB
Go
package store
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/tinode/chat/server/store/types"
|
|
)
|
|
|
|
func TestAggregatePreparedMessageBatchUpdatesKeepsLatestSeq(t *testing.T) {
|
|
user1 := types.Uid(1)
|
|
user2 := types.Uid(2)
|
|
items := []PreparedMessageBatchItem{
|
|
{Message: &types.Message{Topic: "p2p-b", From: user1.String(), SeqId: 3}, ReadBySender: true},
|
|
{Message: &types.Message{Topic: "p2p-a", From: user1.String(), SeqId: 2}, ReadBySender: true},
|
|
{Message: &types.Message{Topic: "p2p-a", From: user2.String(), SeqId: 5}, ReadBySender: true},
|
|
{Message: &types.Message{Topic: "p2p-a", From: user1.String(), SeqId: 6}, ReadBySender: true},
|
|
{Message: &types.Message{Topic: "p2p-b", From: user1.String(), SeqId: 7}, ReadBySender: false},
|
|
{},
|
|
}
|
|
|
|
topics, reads := aggregatePreparedMessageBatchUpdates(items)
|
|
if len(topics) != 2 || topics[0].topic != "p2p-a" || topics[0].message.SeqId != 6 ||
|
|
topics[1].topic != "p2p-b" || topics[1].message.SeqId != 7 {
|
|
t.Fatalf("unexpected topic updates: %+v", topics)
|
|
}
|
|
if len(reads) != 3 {
|
|
t.Fatalf("read updates=%d want=3: %+v", len(reads), reads)
|
|
}
|
|
got := make(map[string]int64, len(reads))
|
|
for _, update := range reads {
|
|
got[update.topic+":"+update.from.String()] = update.message.SeqId
|
|
}
|
|
for key, want := range map[string]int64{
|
|
"p2p-a:" + user1.String(): 6,
|
|
"p2p-a:" + user2.String(): 5,
|
|
"p2p-b:" + user1.String(): 3,
|
|
} {
|
|
if got[key] != want {
|
|
t.Fatalf("read update %s=%d want=%d; all=%v", key, got[key], want, got)
|
|
}
|
|
}
|
|
}
|