github.com/status-im/status-go@v1.1.0/protocol/messenger_reply_test.go (about) 1 package protocol 2 3 import ( 4 "context" 5 "testing" 6 7 "github.com/stretchr/testify/suite" 8 9 "github.com/status-im/status-go/eth-node/crypto" 10 "github.com/status-im/status-go/multiaccounts" 11 ) 12 13 func TestMessengerReplySuite(t *testing.T) { 14 suite.Run(t, new(MessengerReplySuite)) 15 } 16 17 type MessengerReplySuite struct { 18 MessengerBaseTestSuite 19 } 20 21 func (s *MessengerReplySuite) TestReceiveReply() { 22 alice := s.m 23 alice.account = &multiaccounts.Account{KeyUID: "0xdeadbeef"} 24 key, err := crypto.GenerateKey() 25 s.Require().NoError(err) 26 27 bob, err := newMessengerWithKey(s.shh, key, s.logger, nil) 28 s.Require().NoError(err) 29 30 chatID := statusChatID 31 32 chat := CreatePublicChat(chatID, alice.transport) 33 34 err = alice.SaveChat(chat) 35 s.Require().NoError(err) 36 37 _, err = alice.Join(chat) 38 s.Require().NoError(err) 39 40 err = bob.SaveChat(chat) 41 s.Require().NoError(err) 42 43 _, err = bob.Join(chat) 44 s.Require().NoError(err) 45 46 // Send chat message from alice to bob 47 message := buildTestMessage(*chat) 48 _, err = alice.SendChatMessage(context.Background(), message) 49 s.NoError(err) 50 51 // Wait for message to arrive to bob 52 response, err := WaitOnMessengerResponse( 53 bob, 54 func(r *MessengerResponse) bool { return len(r.Messages()) > 0 }, 55 "no messages", 56 ) 57 s.Require().NoError(err) 58 59 s.Require().Len(response.Messages(), 1) 60 s.Require().False(response.Messages()[0].Replied) 61 62 messageID := response.Messages()[0].ID 63 64 // Bob replies to the message 65 replyMessage := buildTestMessage(*chat) 66 replyMessage.ResponseTo = messageID 67 _, err = bob.SendChatMessage(context.Background(), replyMessage) 68 s.NoError(err) 69 70 // Wait for reply to arrive to alice 71 response, err = WaitOnMessengerResponse( 72 alice, 73 func(r *MessengerResponse) bool { return len(r.Messages()) > 0 }, 74 "no messages", 75 ) 76 s.Require().NoError(err) 77 78 messages := response.Messages() 79 s.Require().Len(messages, 2) 80 //* Verify that the reply reponds to the original message 81 messageToCheck := messages[0] 82 if messageToCheck.ResponseTo == "" || messageToCheck.ResponseTo != messageID { 83 // We need to use the second message in the response. They got out of order by accident 84 messageToCheck = messages[1] 85 } 86 s.Require().True(messageToCheck.ResponseTo == messageID) 87 // Verify that it's replied 88 s.Require().True(messageToCheck.Replied) 89 90 s.Require().NoError(bob.Shutdown()) 91 }