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) } } }