Skip to content

Commit 5152e00

Browse files
committed
test(backup): improve tests by using a map instead of a loop
1 parent 36623ab commit 5152e00

File tree

2 files changed

+109
-36
lines changed

2 files changed

+109
-36
lines changed

protocol/messenger_local_backup_test.go

Lines changed: 105 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,13 @@ func (s *MessengerLocalBackupSuite) TestLocalBackup() {
211211
alice := s.newMessenger()
212212
defer TearDownMessenger(&s.Suite, alice)
213213

214+
err = makeMutualContacts(bob1, alice)
215+
s.Require().NoError(err)
216+
217+
aliceContact := bob1.GetContactByID(alice.selfContact.ID)
218+
err = bob1.persistence.SaveContact(aliceContact, nil)
219+
s.Require().NoError(err)
220+
214221
ourOneOneChat := CreateOneToOneChat("Our 1TO1", &alice.identity.PublicKey, alice.getTimesource())
215222
err = bob1.SaveChat(ourOneOneChat)
216223
s.Require().NoError(err)
@@ -223,6 +230,46 @@ func (s *MessengerLocalBackupSuite) TestLocalBackup() {
223230
_, err = bob1.SendChatMessage(ctx, transactionMessage)
224231
s.Require().NoError(err)
225232

233+
// Alice sends a message to bob1
234+
inputMessage = buildTestMessage(*theirChat)
235+
inputMessage.Text = "some text from alice"
236+
sendResponse, err = alice.SendChatMessage(context.Background(), inputMessage)
237+
s.NoError(err)
238+
s.Require().Len(sendResponse.Messages(), 1)
239+
240+
response, err = WaitOnMessengerResponse(
241+
bob1,
242+
func(r *MessengerResponse) bool {
243+
return len(r.messages) > 0 && r.Messages()[0].Text == "some text from alice"
244+
},
245+
"no messages",
246+
)
247+
s.Require().NoError(err)
248+
s.Require().Len(response.Chats(), 1)
249+
s.Require().Len(response.Messages(), 1)
250+
251+
// Validate contacts on bob1
252+
contact1 := bob1.GetContactByID(contactID1)
253+
s.Require().NotNil(contact1)
254+
s.Require().Equal(ContactRequestStateSent, contact1.ContactRequestLocalState)
255+
s.Require().Equal(ContactRequestStateNone, contact1.ContactRequestRemoteState)
256+
s.Require().True(contact1.added())
257+
258+
contact2 := bob1.GetContactByID(contactID2)
259+
s.Require().NotNil(contact2)
260+
s.Require().Equal(ContactRequestStateSent, contact2.ContactRequestLocalState)
261+
s.Require().Equal(ContactRequestStateNone, contact2.ContactRequestRemoteState)
262+
s.Require().True(contact2.added())
263+
264+
aliceContact = bob1.GetContactByID(alice.selfContact.ID)
265+
s.Require().NotNil(aliceContact)
266+
s.Require().Equal(ContactRequestStateSent, aliceContact.ContactRequestLocalState)
267+
s.Require().Equal(ContactRequestStateReceived, aliceContact.ContactRequestRemoteState)
268+
s.Require().True(aliceContact.added())
269+
270+
// Check that bob2 has no contacts
271+
s.Require().Len(bob2.Contacts(), 0)
272+
226273
// -------------------- BACKUP --------------------
227274
// Backup
228275
marshalledBackup, err := bob1.ExportBackup()
@@ -234,7 +281,23 @@ func (s *MessengerLocalBackupSuite) TestLocalBackup() {
234281

235282
// -------------------- VALIDATE BACKUP --------------------
236283
// Validate contacts on bob2
237-
s.Require().Len(bob2.Contacts(), 2)
284+
contact1 = bob2.GetContactByID(contactID1)
285+
s.Require().NotNil(contact1)
286+
s.Require().Equal(ContactRequestStateSent, contact1.ContactRequestLocalState)
287+
s.Require().Equal(ContactRequestStateNone, contact1.ContactRequestRemoteState)
288+
s.Require().True(contact1.added())
289+
290+
contact2 = bob2.GetContactByID(contactID2)
291+
s.Require().NotNil(contact2)
292+
s.Require().Equal(ContactRequestStateSent, contact2.ContactRequestLocalState)
293+
s.Require().Equal(ContactRequestStateNone, contact2.ContactRequestRemoteState)
294+
s.Require().True(contact2.added())
295+
296+
aliceContact = bob2.GetContactByID(alice.selfContact.ID)
297+
s.Require().NotNil(aliceContact)
298+
s.Require().Equal(ContactRequestStateSent, aliceContact.ContactRequestLocalState)
299+
s.Require().Equal(ContactRequestStateReceived, aliceContact.ContactRequestRemoteState)
300+
s.Require().True(aliceContact.added())
238301

239302
// Validate communities on bob2
240303
communities, err = bob2.JoinedCommunities()
@@ -254,43 +317,54 @@ func (s *MessengerLocalBackupSuite) TestLocalBackup() {
254317
s.Require().Equal("", chat.Name)
255318

256319
// Validate messages
257-
s.Require().NoError(err)
258320
messages, err := bob2.persistence.AllMessagesForBackup()
259321
s.Require().NoError(err)
260322
s.Require().Len(messages, 14)
261323

262-
textMessageFound := false
263-
mdMessageFound := false
264-
imageMessageFound := false
265-
stickerMessageFound := false
266-
emojiMessageFound := false
267-
txMessageFound := false
268-
pinnedSystemMessageFound := false
324+
// Build a map for easier assertions
325+
messageMap := make(map[string]*protobuf.BackedUpMessage)
269326
for _, msg := range messages {
270-
if msg.ContentType == int64(protobuf.ChatMessage_TEXT_PLAIN) && msg.Text == "some text" {
271-
textMessageFound = true
272-
s.Require().True(msg.PinnedBy == bob2.selfContact.ID)
273-
} else if msg.ContentType == int64(protobuf.ChatMessage_TEXT_PLAIN) && msg.Text == "some *markdown* text" {
274-
mdMessageFound = true
275-
} else if msg.ContentType == int64(protobuf.ChatMessage_IMAGE) && msg.Text == "some image" {
276-
imageMessageFound = true
277-
} else if msg.ContentType == int64(protobuf.ChatMessage_STICKER) && msg.Text == "some sticker" {
278-
stickerMessageFound = true
279-
} else if msg.ContentType == int64(protobuf.ChatMessage_EMOJI) && msg.Text == ":+1:" {
280-
emojiMessageFound = true
281-
} else if msg.ContentType == int64(protobuf.ChatMessage_TRANSACTION_COMMAND) && msg.Text == "some transaction" {
282-
txMessageFound = true
283-
} else if msg.ContentType == int64(protobuf.ChatMessage_SYSTEM_MESSAGE_PINNED_MESSAGE) && msg.Text == "" {
284-
pinnedSystemMessageFound = true
327+
if msg.ContentType == int64(protobuf.ChatMessage_SYSTEM_MESSAGE_PINNED_MESSAGE) && msg.Text == "" {
328+
// For system pinned message, Text is empty so we use a custom key
329+
messageMap["systemPin"] = msg
330+
continue
285331
}
332+
messageMap[msg.Text] = msg
286333
}
287-
s.Require().True(textMessageFound)
288-
s.Require().True(mdMessageFound)
289-
s.Require().True(imageMessageFound)
290-
s.Require().True(stickerMessageFound)
291-
s.Require().True(emojiMessageFound)
292-
s.Require().True(txMessageFound)
293-
s.Require().True(pinnedSystemMessageFound)
334+
335+
// Assert each message type exists and has expected properties
336+
textMsg, ok := messageMap["some text"]
337+
s.Require().True(ok)
338+
s.Require().Equal(int64(protobuf.ChatMessage_TEXT_PLAIN), textMsg.ContentType)
339+
s.Require().Equal(bob2.selfContact.ID, textMsg.PinnedBy)
340+
341+
mdMsg, ok := messageMap["some *markdown* text"]
342+
s.Require().True(ok)
343+
s.Require().Equal(int64(protobuf.ChatMessage_TEXT_PLAIN), mdMsg.ContentType)
344+
345+
imageMsg, ok := messageMap["some image"]
346+
s.Require().True(ok)
347+
s.Require().Equal(int64(protobuf.ChatMessage_IMAGE), imageMsg.ContentType)
348+
349+
stickerMsg, ok := messageMap["some sticker"]
350+
s.Require().True(ok)
351+
s.Require().Equal(int64(protobuf.ChatMessage_STICKER), stickerMsg.ContentType)
352+
353+
emojiMsg, ok := messageMap[":+1:"]
354+
s.Require().True(ok)
355+
s.Require().Equal(int64(protobuf.ChatMessage_EMOJI), emojiMsg.ContentType)
356+
357+
txMsg, ok := messageMap["some transaction"]
358+
s.Require().True(ok)
359+
s.Require().Equal(int64(protobuf.ChatMessage_TRANSACTION_COMMAND), txMsg.ContentType)
360+
361+
aliceMsg, ok := messageMap["some text from alice"]
362+
s.Require().True(ok)
363+
s.Require().Equal(int64(protobuf.ChatMessage_TEXT_PLAIN), aliceMsg.ContentType)
364+
365+
systemPinMsg, ok := messageMap["systemPin"]
366+
s.Require().True(ok)
367+
s.Require().Equal("", systemPinMsg.Text)
294368

295369
// Validate pinned messages
296370
pinnedMessages, _, err := bob2.PinnedMessageByChatID(chatID, "", 10)

protocol/messenger_pairing_and_syncing.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package protocol
33
import (
44
"context"
55
"errors"
6+
"slices"
67
"time"
78

89
"github.com/golang/protobuf/proto"
@@ -469,12 +470,10 @@ func (m *Messenger) syncMessages(ctx context.Context, rawMessageHandler RawMessa
469470
}
470471

471472
// Sync messages in batches of 100
472-
batchSize := 100
473-
for i := 0; i < len(backupMessages); i += batchSize {
474-
end := min(i+batchSize, len(backupMessages))
475-
batch := &protobuf.BackedUpMessageBatch{Messages: backupMessages[i:end]}
473+
for batch := range slices.Chunk(backupMessages, 100) {
474+
batchMsg := &protobuf.BackedUpMessageBatch{Messages: batch}
476475

477-
encodedMessage, err := proto.Marshal(batch)
476+
encodedMessage, err := proto.Marshal(batchMsg)
478477
if err != nil {
479478
return err
480479
}

0 commit comments

Comments
 (0)