From 2fb6d615fd39ce8500ace8c26332f7ca3c127276 Mon Sep 17 00:00:00 2001 From: Andrey Bocharnikov Date: Wed, 1 May 2024 12:54:47 +0700 Subject: [PATCH] fix_: add method to retrieve prepared message (#5102) * Add Test_WHEN_MessageContainsImage_THEN_PreparedMessageByIDContainsLink * Add Messenger.PreparedMessageByID call fixes #13684 --- protocol/messenger.go | 12 ++++++++- protocol/persistence_quoted_message_test.go | 28 +++++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/protocol/messenger.go b/protocol/messenger.go index efdf33ebb..d39c8d8d0 100644 --- a/protocol/messenger.go +++ b/protocol/messenger.go @@ -4197,7 +4197,17 @@ func (m *Messenger) storeSyncBookmarks(bookmarkMap map[string]*browsers.Bookmark } func (m *Messenger) MessageByID(id string) (*common.Message, error) { - return m.persistence.MessageByID(id) + msg, err := m.persistence.MessageByID(id) + if err != nil { + return nil, err + } + if m.httpServer != nil { + err = m.prepareMessage(msg, m.httpServer) + if err != nil { + return nil, err + } + } + return msg, nil } func (m *Messenger) MessagesExist(ids []string) (map[string]bool, error) { diff --git a/protocol/persistence_quoted_message_test.go b/protocol/persistence_quoted_message_test.go index 2d2b300ac..471910c69 100644 --- a/protocol/persistence_quoted_message_test.go +++ b/protocol/persistence_quoted_message_test.go @@ -3,6 +3,7 @@ package protocol import ( "encoding/json" "fmt" + "strings" "testing" "github.com/stretchr/testify/suite" @@ -198,3 +199,30 @@ func (s *TestMessengerPrepareMessageSuite) Test_WHEN_QuotedMessageDoesNotContain s.Require().Equal(json.RawMessage(nil), retrievedMessages[0].QuotedMessage.AlbumImages) } + +func (s *TestMessengerPrepareMessageSuite) Test_WHEN_MessageContainsImage_THEN_PreparedMessageByIDContainsLink() { + // GIVEN: message with image saved to DB + message := s.generateTextMessage("id-1", "1", 1, "") + message.ContentType = protobuf.ChatMessage_IMAGE + message.Payload = &protobuf.ChatMessage_Image{ + Image: &protobuf.ImageMessage{ + Format: 1, + Payload: RandomBytes(100), + }, + } + + err := s.m.SaveMessages([]*common.Message{message}) + s.Require().NoError(err) + + mediaServer, err := server.NewMediaServer(s.m.database, nil, nil, nil) + s.Require().NoError(err) + s.Require().NoError(mediaServer.Start()) + s.m.httpServer = mediaServer + + // WHEN: message is prepared + loadedMessage, err := s.m.MessageByID(message.ID) + s.Require().NoError(err) + + // THEN: message contains image link + s.Require().True(strings.HasPrefix(loadedMessage.ImageLocalURL, "https://Localhost")) +}