status-go/protocol/messenger_share_image_test.go

117 lines
3.2 KiB
Go

package protocol
import (
"context"
"io/ioutil"
"os"
"testing"
"github.com/stretchr/testify/suite"
"github.com/status-im/status-go/eth-node/types"
"github.com/status-im/status-go/protocol/common"
"github.com/status-im/status-go/protocol/protobuf"
"github.com/status-im/status-go/protocol/requests"
// "github.com/status-im/status-go/protocol/requests"
)
func TestMessengerShareMessageSuite(t *testing.T) {
suite.Run(t, new(MessengerShareMessageSuite))
}
type MessengerShareMessageSuite struct {
MessengerBaseTestSuite
}
func buildImageMessage(s *MessengerShareMessageSuite, chat Chat) *common.Message {
file, err := os.Open("../_assets/tests/test.jpg")
s.Require().NoError(err)
defer file.Close()
payload, err := ioutil.ReadAll(file)
s.Require().NoError(err)
clock, timestamp := chat.NextClockAndTimestamp(&testTimeSource{})
message := common.NewMessage()
message.ChatId = chat.ID
message.Clock = clock
message.Timestamp = timestamp
message.WhisperTimestamp = clock
message.LocalChatID = chat.ID
message.MessageType = protobuf.MessageType_ONE_TO_ONE
message.ContentType = protobuf.ChatMessage_IMAGE
message.Text = "An image"
image := protobuf.ImageMessage{
Payload: payload,
Format: protobuf.ImageFormat_JPEG,
AlbumId: "some-album-id",
Width: 1200,
Height: 1000,
}
message.Payload = &protobuf.ChatMessage_Image{Image: &image}
return message
}
func (s *MessengerShareMessageSuite) TestImageMessageSharing() {
theirMessenger := s.newMessenger()
_, err := theirMessenger.Start()
s.Require().NoError(err)
defer TearDownMessenger(&s.Suite, theirMessenger)
theirChat := CreateOneToOneChat("Their 1TO1", &s.privateKey.PublicKey, s.m.transport)
err = theirMessenger.SaveChat(theirChat)
s.Require().NoError(err)
ourChat := CreateOneToOneChat("Our 1TO1", &theirMessenger.identity.PublicKey, s.m.transport)
err = s.m.SaveChat(ourChat)
s.Require().NoError(err)
inputMessage := buildImageMessage(s, *ourChat)
err = s.m.SaveChat(ourChat)
s.NoError(err)
response, err := s.m.SendChatMessage(context.Background(), inputMessage)
s.NoError(err)
s.Require().Equal(1, len(response.Messages()), "it returns the message")
outputMessage := response.Messages()[0]
MessageID := outputMessage.ID
s.Require().NoError(err)
s.Require().Len(response.Messages(), 1)
response, err = WaitOnMessengerResponse(
theirMessenger,
func(r *MessengerResponse) bool { return len(r.messages) > 0 },
"no messages",
)
s.Require().NoError(err)
s.Require().Len(response.Chats(), 1)
s.Require().Len(response.Messages(), 1)
s.Require().Equal(response.Messages()[0].Text, "An image")
shareResponse, err := s.m.ShareImageMessage(
&requests.ShareImageMessage{
MessageID: MessageID,
Users: []types.HexBytes{common.PubkeyToHexBytes(&theirMessenger.identity.PublicKey)},
},
)
s.NoError(err)
s.Require().NotNil(shareResponse)
s.Require().Len(shareResponse.Messages(), 1)
response, err = WaitOnMessengerResponse(
theirMessenger,
func(r *MessengerResponse) bool { return len(r.messages) > 0 },
"no messages",
)
s.Require().NoError(err)
s.Require().Len(response.Chats(), 1)
s.Require().Len(response.Messages(), 1)
s.Require().Equal(response.Messages()[0].Text, "This message has been shared with you")
}