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  }