github.com/status-im/status-go@v1.1.0/protocol/messenger_sync_clear_history_test.go (about) 1 package protocol 2 3 import ( 4 "context" 5 "errors" 6 "testing" 7 8 "github.com/status-im/status-go/protocol/common" 9 "github.com/status-im/status-go/protocol/requests" 10 11 "github.com/status-im/status-go/protocol/encryption/multidevice" 12 "github.com/status-im/status-go/protocol/tt" 13 14 "github.com/stretchr/testify/suite" 15 ) 16 17 func TestMessengerSyncClearHistorySuite(t *testing.T) { 18 suite.Run(t, new(MessengerSyncClearHistory)) 19 } 20 21 type MessengerSyncClearHistory struct { 22 MessengerBaseTestSuite 23 } 24 25 func (s *MessengerSyncClearHistory) pair() *Messenger { 26 theirMessenger, err := newMessengerWithKey(s.shh, s.privateKey, s.logger, nil) 27 s.Require().NoError(err) 28 29 err = theirMessenger.SetInstallationMetadata(theirMessenger.installationID, &multidevice.InstallationMetadata{ 30 Name: "their-name", 31 DeviceType: "their-device-type", 32 }) 33 s.Require().NoError(err) 34 response, err := theirMessenger.SendPairInstallation(context.Background(), nil) 35 s.Require().NoError(err) 36 s.Require().NotNil(response) 37 38 // Wait for the message to reach its destination 39 response, err = WaitOnMessengerResponse( 40 s.m, 41 func(r *MessengerResponse) bool { return len(r.Installations()) > 0 }, 42 "installation not received", 43 ) 44 45 s.Require().NoError(err) 46 actualInstallation := response.Installations()[0] 47 s.Require().Equal(theirMessenger.installationID, actualInstallation.ID) 48 s.Require().NotNil(actualInstallation.InstallationMetadata) 49 s.Require().Equal("their-name", actualInstallation.InstallationMetadata.Name) 50 s.Require().Equal("their-device-type", actualInstallation.InstallationMetadata.DeviceType) 51 52 err = s.m.EnableInstallation(theirMessenger.installationID) 53 s.Require().NoError(err) 54 55 return theirMessenger 56 } 57 58 func (s *MessengerSyncClearHistory) TestSyncClearHistory() { 59 theirMessenger := s.pair() 60 61 response, err := s.m.CreatePublicChat(&requests.CreatePublicChat{ 62 ID: publicChatName, 63 }) 64 s.Require().NoError(err) 65 chat, ok := response.chats[publicChatName] 66 s.Require().True(ok) 67 68 _, err = theirMessenger.CreatePublicChat(&requests.CreatePublicChat{ 69 ID: publicChatName, 70 }) 71 s.Require().NoError(err) 72 73 message := buildTestMessage(*chat) 74 _, err = s.m.SendChatMessage(context.Background(), message) 75 s.Require().NoError(err) 76 var receivedPubChatMessage *common.Message 77 err = tt.RetryWithBackOff(func() error { 78 var err error 79 response, err := theirMessenger.RetrieveAll() 80 if err != nil { 81 return err 82 } 83 84 messages := response.Messages() 85 if len(messages) > 0 { 86 receivedPubChatMessage = messages[0] 87 return nil 88 } 89 90 return errors.New("Not received all messages") 91 }) 92 s.Require().NoError(err) 93 s.Require().Equal(receivedPubChatMessage.ChatId, publicChatName) 94 95 var messages []*common.Message 96 messages, _, err = s.m.persistence.MessageByChatID(publicChatName, "", 10) 97 s.Require().NoError(err) 98 s.Require().True(len(messages) == 1) 99 messages, _, err = theirMessenger.persistence.MessageByChatID(publicChatName, "", 10) 100 s.Require().NoError(err) 101 s.Require().True(len(messages) == 1) 102 103 _, err = s.m.ClearHistory(&requests.ClearHistory{ 104 ID: publicChatName, 105 }) 106 s.Require().NoError(err) 107 err = tt.RetryWithBackOff(func() error { 108 response, err = theirMessenger.RetrieveAll() 109 if err != nil { 110 return err 111 } 112 if len(response.clearedHistories) > 0 { 113 return nil 114 } 115 return errors.New("Not received all clearedHistories") 116 }) 117 s.Require().NoError(err) 118 messages, _, err = theirMessenger.persistence.MessageByChatID(publicChatName, "", 10) 119 s.Require().NoError(err) 120 s.Require().True(len(messages) == 0) 121 122 s.Require().NoError(theirMessenger.Shutdown()) 123 124 }