2024-01-08 18:18:57 +00:00
|
|
|
package protocol
|
|
|
|
|
|
|
|
import (
|
|
|
|
"encoding/json"
|
|
|
|
"fmt"
|
|
|
|
|
|
|
|
"github.com/status-im/status-go/protocol/common"
|
|
|
|
"github.com/status-im/status-go/protocol/protobuf"
|
|
|
|
"github.com/status-im/status-go/server"
|
|
|
|
)
|
|
|
|
|
|
|
|
func (s *MessengerSuite) setUpTestDatabase() (string, *sqlitePersistence) {
|
|
|
|
chat := CreatePublicChat("test-chat", s.m.transport)
|
|
|
|
err := s.m.SaveChat(chat)
|
|
|
|
s.NoError(err)
|
|
|
|
db, err := openTestDB()
|
|
|
|
s.NoError(err)
|
|
|
|
p := newSQLitePersistence(db)
|
|
|
|
|
|
|
|
return chat.ID, p
|
|
|
|
}
|
|
|
|
|
|
|
|
func (s *MessengerSuite) Test_WHEN_MessageContainsImage_Then_preparedMessageAddsAlbumImageWithImageGeneratedLink() {
|
|
|
|
chatID, p := s.setUpTestDatabase()
|
|
|
|
|
|
|
|
message1 := &common.Message{
|
|
|
|
ID: "id-1",
|
|
|
|
LocalChatID: chatID,
|
|
|
|
ChatMessage: &protobuf.ChatMessage{
|
|
|
|
Text: "content-1",
|
|
|
|
Clock: uint64(1),
|
|
|
|
ContentType: protobuf.ChatMessage_IMAGE,
|
|
|
|
Payload: &protobuf.ChatMessage_Image{
|
|
|
|
Image: &protobuf.ImageMessage{
|
2024-01-24 20:09:28 +00:00
|
|
|
Format: 1,
|
2024-01-08 18:18:57 +00:00
|
|
|
Payload: []byte("some-payload"),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
From: "1",
|
|
|
|
}
|
|
|
|
message2 := &common.Message{
|
|
|
|
ID: "id-2",
|
|
|
|
LocalChatID: chatID,
|
|
|
|
ChatMessage: &protobuf.ChatMessage{
|
|
|
|
Text: "content-2",
|
|
|
|
Clock: uint64(2),
|
|
|
|
ResponseTo: "id-1",
|
|
|
|
},
|
|
|
|
|
|
|
|
From: "2",
|
|
|
|
}
|
|
|
|
|
|
|
|
messages := []*common.Message{message1, message2}
|
|
|
|
|
|
|
|
err := s.m.SaveMessages([]*common.Message{message1, message2})
|
|
|
|
s.Require().NoError(err)
|
|
|
|
|
|
|
|
err = p.SaveMessages(messages)
|
|
|
|
s.Require().NoError(err)
|
|
|
|
|
|
|
|
mediaServer, err := server.NewMediaServer(s.m.database, nil, nil, nil)
|
|
|
|
s.Require().NoError(err)
|
|
|
|
s.Require().NoError(mediaServer.Start())
|
|
|
|
|
|
|
|
retrievedMessages, _, err := p.MessageByChatID(chatID, "", 10)
|
|
|
|
s.Require().NoError(err)
|
|
|
|
s.Require().Equal("id-2", retrievedMessages[0].ID)
|
|
|
|
s.Require().Equal("id-1", retrievedMessages[0].ResponseTo)
|
|
|
|
|
|
|
|
err = s.m.prepareMessage(retrievedMessages[0], mediaServer)
|
|
|
|
s.Require().NoError(err)
|
|
|
|
|
|
|
|
expectedURL := fmt.Sprintf(`["https://Localhost:%d/messages/images?messageId=id-1"]`, mediaServer.GetPort())
|
|
|
|
|
|
|
|
s.Require().Equal(json.RawMessage(expectedURL), retrievedMessages[0].QuotedMessage.AlbumImages)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (s *MessengerSuite) Test_WHEN_NoQuotedMessage_THEN_RetrievedMessageDoesNotContainQuotedMessage() {
|
|
|
|
chatID, p := s.setUpTestDatabase()
|
|
|
|
|
|
|
|
message1 := &common.Message{
|
|
|
|
ID: "id-1",
|
|
|
|
LocalChatID: chatID,
|
|
|
|
ChatMessage: &protobuf.ChatMessage{
|
|
|
|
Text: "content-1",
|
|
|
|
Clock: uint64(1),
|
|
|
|
},
|
|
|
|
From: "1",
|
|
|
|
}
|
|
|
|
|
|
|
|
message2 := &common.Message{
|
|
|
|
ID: "id-2",
|
|
|
|
LocalChatID: chatID,
|
|
|
|
ChatMessage: &protobuf.ChatMessage{
|
|
|
|
Text: "content-2",
|
|
|
|
Clock: uint64(2),
|
|
|
|
},
|
|
|
|
|
|
|
|
From: "2",
|
|
|
|
}
|
|
|
|
|
|
|
|
messages := []*common.Message{message1, message2}
|
|
|
|
|
|
|
|
err := s.m.SaveMessages([]*common.Message{message1, message2})
|
|
|
|
s.Require().NoError(err)
|
|
|
|
|
|
|
|
err = p.SaveMessages(messages)
|
|
|
|
s.Require().NoError(err)
|
|
|
|
|
|
|
|
mediaServer, err := server.NewMediaServer(s.m.database, nil, nil, nil)
|
|
|
|
s.Require().NoError(err)
|
|
|
|
s.Require().NoError(mediaServer.Start())
|
|
|
|
|
|
|
|
retrievedMessages, _, err := p.MessageByChatID(chatID, "", 10)
|
|
|
|
s.Require().NoError(err)
|
|
|
|
s.Require().Equal("id-2", retrievedMessages[0].ID)
|
|
|
|
s.Require().Equal("", retrievedMessages[0].ResponseTo)
|
|
|
|
|
|
|
|
err = s.m.prepareMessage(retrievedMessages[0], mediaServer)
|
|
|
|
s.Require().NoError(err)
|
|
|
|
|
|
|
|
s.Require().Equal((*common.QuotedMessage)(nil), retrievedMessages[0].QuotedMessage)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (s *MessengerSuite) Test_WHEN_QuotedMessageDoesNotContainsImage_THEN_RetrievedMessageContainsNoImages() {
|
|
|
|
chatID, p := s.setUpTestDatabase()
|
|
|
|
|
|
|
|
message1 := &common.Message{
|
|
|
|
ID: "id-1",
|
|
|
|
LocalChatID: chatID,
|
|
|
|
ChatMessage: &protobuf.ChatMessage{
|
|
|
|
Text: "content-1",
|
|
|
|
Clock: uint64(1),
|
|
|
|
},
|
|
|
|
From: "1",
|
|
|
|
}
|
|
|
|
|
|
|
|
message2 := &common.Message{
|
|
|
|
ID: "id-2",
|
|
|
|
LocalChatID: chatID,
|
|
|
|
ChatMessage: &protobuf.ChatMessage{
|
|
|
|
Text: "content-2",
|
|
|
|
Clock: uint64(2),
|
|
|
|
ResponseTo: "id-1",
|
|
|
|
},
|
|
|
|
|
|
|
|
From: "2",
|
|
|
|
}
|
|
|
|
|
|
|
|
messages := []*common.Message{message1, message2}
|
|
|
|
|
|
|
|
err := s.m.SaveMessages([]*common.Message{message1, message2})
|
|
|
|
s.Require().NoError(err)
|
|
|
|
|
|
|
|
err = p.SaveMessages(messages)
|
|
|
|
s.Require().NoError(err)
|
|
|
|
|
|
|
|
mediaServer, err := server.NewMediaServer(s.m.database, nil, nil, nil)
|
|
|
|
s.Require().NoError(err)
|
|
|
|
s.Require().NoError(mediaServer.Start())
|
|
|
|
|
|
|
|
retrievedMessages, _, err := p.MessageByChatID(chatID, "", 10)
|
|
|
|
s.Require().NoError(err)
|
|
|
|
s.Require().Equal("id-2", retrievedMessages[0].ID)
|
|
|
|
s.Require().Equal("id-1", retrievedMessages[0].ResponseTo)
|
|
|
|
|
|
|
|
err = s.m.prepareMessage(retrievedMessages[0], mediaServer)
|
|
|
|
s.Require().NoError(err)
|
|
|
|
|
|
|
|
s.Require().Equal(json.RawMessage(nil), retrievedMessages[0].QuotedMessage.AlbumImages)
|
|
|
|
}
|