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  }