github.com/status-im/status-go@v1.1.0/protocol/messenger_bridge_message_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 "github.com/status-im/status-go/protocol/protobuf" 12 ) 13 14 func TestBridgeMessageSuite(t *testing.T) { 15 suite.Run(t, new(BridgeMessageSuite)) 16 } 17 18 type BridgeMessageSuite struct { 19 MessengerBaseTestSuite 20 } 21 22 func (s *BridgeMessageSuite) TestSendBridgeMessage() { 23 alice := s.m 24 alice.account = &multiaccounts.Account{KeyUID: "0xdeadbeef"} 25 key, err := crypto.GenerateKey() 26 s.Require().NoError(err) 27 28 bob, err := newMessengerWithKey(s.shh, key, s.logger, nil) 29 s.Require().NoError(err) 30 defer TearDownMessenger(&s.Suite, bob) 31 32 chatID := statusChatID 33 34 chat := CreatePublicChat(chatID, alice.transport) 35 36 err = alice.SaveChat(chat) 37 s.Require().NoError(err) 38 39 _, err = alice.Join(chat) 40 s.Require().NoError(err) 41 42 err = bob.SaveChat(chat) 43 s.Require().NoError(err) 44 45 _, err = bob.Join(chat) 46 s.Require().NoError(err) 47 48 // Send chat message from alice to bob 49 50 message := buildTestMessage(*chat) 51 _, err = alice.SendChatMessage(context.Background(), message) 52 s.NoError(err) 53 54 // Wait for message to arrive to bob 55 response, err := WaitOnMessengerResponse( 56 bob, 57 func(r *MessengerResponse) bool { return len(r.Messages()) > 0 }, 58 "no messages", 59 ) 60 s.Require().NoError(err) 61 62 s.Require().Len(response.Messages(), 1) 63 64 // Send bridge message 65 66 bridgeMessage := buildTestMessage(*chat) 67 bridgeMessage.ContentType = protobuf.ChatMessage_BRIDGE_MESSAGE 68 bridgeMessage.Payload = &protobuf.ChatMessage_BridgeMessage{ 69 BridgeMessage: &protobuf.BridgeMessage{ 70 BridgeName: "discord", 71 UserName: "user1", 72 UserAvatar: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAIAAACRXR/mAAAAjklEQVR4nOzXwQmFMBAAUZXUYh32ZB32ZB02sxYQQSZGsod55/91WFgSS0RM+SyjA56ZRZhFmEWYRRT6h+M6G16zrxv6fdJpmUWYRbxsYr13dKfanpN0WmYRZhGzXz6AWYRZRIfbaX26fT9Jk07LLMIsosPt9I/dTDotswizCG+nhFmEWYRZhFnEHQAA///z1CFkYamgfQAAAABJRU5ErkJggg==", 73 UserID: "123", 74 Content: "text1", 75 MessageID: "456", 76 ParentMessageID: "789", 77 }, 78 } 79 80 _, err = bob.SendChatMessage(context.Background(), bridgeMessage) 81 s.NoError(err) 82 83 // Wait for the bridge message to arrive to alice 84 response, err = WaitOnMessengerResponse( 85 alice, 86 func(r *MessengerResponse) bool { return len(r.Messages()) > 0 }, 87 "no bridge message", 88 ) 89 s.Require().NoError(err) 90 s.Require().Len(response.Messages(), 1) 91 receivedBridgeMessage := response.Messages()[0] 92 s.Require().Equal(receivedBridgeMessage.ContentType, protobuf.ChatMessage_BRIDGE_MESSAGE) 93 receivedBridgeMessagePayload := receivedBridgeMessage.GetBridgeMessage() 94 s.Require().NotNil(receivedBridgeMessagePayload) 95 s.Require().Equal(receivedBridgeMessagePayload.BridgeName, "discord") 96 s.Require().Equal(receivedBridgeMessagePayload.UserName, "user1") 97 s.Require().Equal(receivedBridgeMessagePayload.Content, "text1") 98 s.Require().Equal(receivedBridgeMessagePayload.UserAvatar, "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAIAAACRXR/mAAAAjklEQVR4nOzXwQmFMBAAUZXUYh32ZB32ZB02sxYQQSZGsod55/91WFgSS0RM+SyjA56ZRZhFmEWYRRT6h+M6G16zrxv6fdJpmUWYRbxsYr13dKfanpN0WmYRZhGzXz6AWYRZRIfbaX26fT9Jk07LLMIsosPt9I/dTDotswizCG+nhFmEWYRZhFnEHQAA///z1CFkYamgfQAAAABJRU5ErkJggg==") 99 s.Require().Equal(receivedBridgeMessagePayload.UserID, "123") 100 s.Require().Equal(receivedBridgeMessagePayload.MessageID, "456") 101 s.Require().Equal(receivedBridgeMessagePayload.ParentMessageID, "789") 102 } 103 104 func (s *BridgeMessageSuite) TestSearchForDiscordMessages() { 105 //send bridged message 106 chat := CreatePublicChat("test-chat", s.m.transport) 107 err := s.m.SaveChat(chat) 108 s.NoError(err) 109 110 bridgeMessage := buildTestMessage(*chat) 111 bridgeMessage.ContentType = protobuf.ChatMessage_BRIDGE_MESSAGE 112 bridgeMessage.Payload = &protobuf.ChatMessage_BridgeMessage{ 113 BridgeMessage: &protobuf.BridgeMessage{ 114 BridgeName: "discord", 115 UserName: "user1", 116 UserAvatar: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAIAAACRXR/mAAAAjklEQVR4nOzXwQmFMBAAUZXUYh32ZB32ZB02sxYQQSZGsod55/91WFgSS0RM+SyjA56ZRZhFmEWYRRT6h+M6G16zrxv6fdJpmUWYRbxsYr13dKfanpN0WmYRZhGzXz6AWYRZRIfbaX26fT9Jk07LLMIsosPt9I/dTDotswizCG+nhFmEWYRZhFnEHQAA///z1CFkYamgfQAAAABJRU5ErkJggg==", 117 UserID: "123", 118 Content: "bridged discord message", 119 MessageID: "456", 120 ParentMessageID: "789", 121 }, 122 } 123 124 _, err = s.m.SendChatMessage(context.Background(), bridgeMessage) 125 s.NoError(err) 126 127 // Search for the message 128 messages, err := s.m.AllMessageByChatIDWhichMatchTerm(chat.ID, "bridged", true) 129 s.NoError(err) 130 s.Require().Len(messages, 1) 131 132 //send discord import message 133 discordMessage := &protobuf.DiscordMessage{ 134 Id: "discordMessageID", 135 Type: "Default", 136 Timestamp: "123456", 137 Content: "discord import message", 138 Author: &protobuf.DiscordMessageAuthor{ 139 Id: "2", 140 }, 141 Reference: &protobuf.DiscordMessageReference{}, 142 } 143 144 err = s.m.persistence.SaveDiscordMessage(discordMessage) 145 s.NoError(err) 146 bridgeMessage = buildTestMessage(*chat) 147 bridgeMessage.ContentType = protobuf.ChatMessage_DISCORD_MESSAGE 148 bridgeMessage.Payload = &protobuf.ChatMessage_DiscordMessage{ 149 DiscordMessage: discordMessage, 150 } 151 152 _, err = s.m.SendChatMessage(context.Background(), bridgeMessage) 153 s.NoError(err) 154 155 // Search for the message 156 messages, err = s.m.AllMessageByChatIDWhichMatchTerm(chat.ID, "import", true) 157 s.NoError(err) 158 s.Require().Len(messages, 1) 159 160 // Search for discord messages 161 messages, err = s.m.AllMessageByChatIDWhichMatchTerm(chat.ID, "discord", true) 162 s.NoError(err) 163 s.Require().Len(messages, 2) 164 165 // Search for discord messages using AllMessagesFromChatsAndCommunitiesWhichMatchTerm 166 chatIDs := make([]string, 1) 167 chatIDs = append(chatIDs, chat.ID) 168 messages, err = s.m.AllMessagesFromChatsAndCommunitiesWhichMatchTerm(make([]string, 0), chatIDs, "discord", true) 169 s.NoError(err) 170 s.Require().Len(messages, 2) 171 172 // Same with case insensitive 173 messages, err = s.m.AllMessagesFromChatsAndCommunitiesWhichMatchTerm(make([]string, 0), chatIDs, "discord", false) 174 s.NoError(err) 175 s.Require().Len(messages, 2) 176 }