github.com/status-im/status-go@v1.1.0/protocol/messenger_sync_bookmark_test.go (about) 1 package protocol 2 3 import ( 4 "context" 5 "errors" 6 "testing" 7 "time" 8 9 "github.com/status-im/status-go/protocol/encryption/multidevice" 10 "github.com/status-im/status-go/protocol/tt" 11 "github.com/status-im/status-go/services/browsers" 12 13 "github.com/stretchr/testify/suite" 14 ) 15 16 func TestMessengerSyncBookmarkSuite(t *testing.T) { 17 suite.Run(t, new(MessengerSyncBookmarkSuite)) 18 } 19 20 type MessengerSyncBookmarkSuite struct { 21 MessengerBaseTestSuite 22 } 23 24 func (s *MessengerSyncBookmarkSuite) TestSyncBookmark() { 25 //add bookmark 26 bookmark := browsers.Bookmark{ 27 Name: "status official site", 28 URL: "https://status.im", 29 Removed: false, 30 } 31 _, err := s.m.browserDatabase.StoreBookmark(bookmark) 32 s.Require().NoError(err) 33 34 // pair 35 theirMessenger, err := newMessengerWithKey(s.shh, s.privateKey, s.logger, nil) 36 s.Require().NoError(err) 37 38 err = theirMessenger.SetInstallationMetadata(theirMessenger.installationID, &multidevice.InstallationMetadata{ 39 Name: "their-name", 40 DeviceType: "their-device-type", 41 }) 42 s.Require().NoError(err) 43 response, err := theirMessenger.SendPairInstallation(context.Background(), nil) 44 s.Require().NoError(err) 45 s.Require().NotNil(response) 46 s.Require().Len(response.Chats(), 1) 47 s.Require().False(response.Chats()[0].Active) 48 49 // Wait for the message to reach its destination 50 response, err = WaitOnMessengerResponse( 51 s.m, 52 func(r *MessengerResponse) bool { return len(r.Installations()) > 0 }, 53 "installation not received", 54 ) 55 56 s.Require().NoError(err) 57 actualInstallation := response.Installations()[0] 58 s.Require().Equal(theirMessenger.installationID, actualInstallation.ID) 59 s.Require().NotNil(actualInstallation.InstallationMetadata) 60 s.Require().Equal("their-name", actualInstallation.InstallationMetadata.Name) 61 s.Require().Equal("their-device-type", actualInstallation.InstallationMetadata.DeviceType) 62 63 err = s.m.EnableInstallation(theirMessenger.installationID) 64 s.Require().NoError(err) 65 66 // sync 67 err = s.m.SyncBookmark(context.Background(), &bookmark, s.m.dispatchMessage) 68 s.Require().NoError(err) 69 70 // Wait for the message to reach its destination 71 err = tt.RetryWithBackOff(func() error { 72 response, err = theirMessenger.RetrieveAll() 73 if err != nil { 74 return err 75 } 76 if response.Bookmarks != nil { 77 return nil 78 } 79 return errors.New("Not received all bookmarks") 80 }) 81 82 s.Require().NoError(err) 83 84 bookmarks, err := theirMessenger.browserDatabase.GetBookmarks() 85 s.Require().NoError(err) 86 s.Require().Equal(1, len(bookmarks)) 87 s.Require().False(bookmarks[0].Removed) 88 89 // sync removed state 90 bookmark.Removed = true 91 err = s.m.SyncBookmark(context.Background(), &bookmark, s.m.dispatchMessage) 92 s.Require().NoError(err) 93 94 // Wait for the message to reach its destination 95 err = tt.RetryWithBackOff(func() error { 96 response, err = theirMessenger.RetrieveAll() 97 if err != nil { 98 return err 99 } 100 if response.Bookmarks != nil { 101 return nil 102 } 103 return errors.New("Not received all bookmarks") 104 }) 105 bookmarks, err = theirMessenger.browserDatabase.GetBookmarks() 106 s.Require().NoError(err) 107 s.Require().Equal(1, len(bookmarks)) 108 s.Require().True(bookmarks[0].Removed) 109 110 s.Require().NoError(theirMessenger.Shutdown()) 111 112 } 113 114 func (s *MessengerSyncBookmarkSuite) TestGarbageCollectRemovedBookmarks() { 115 116 now := time.Now() 117 118 // Create bookmarks that are flagged as deleted for more than 30 days 119 bookmark1 := browsers.Bookmark{ 120 Name: "status official site", 121 URL: "https://status.im", 122 Removed: true, 123 DeletedAt: uint64(now.AddDate(0, 0, -31).Unix()), 124 } 125 126 bookmark2 := browsers.Bookmark{ 127 Name: "Uniswap", 128 URL: "https://uniswap.org", 129 Removed: true, 130 DeletedAt: uint64(now.AddDate(0, 0, -31).Unix()), 131 } 132 133 // This one is flagged for deletion less than 30 days 134 bookmark3 := browsers.Bookmark{ 135 Name: "Maker DAO", 136 URL: "https://makerdao.com", 137 Removed: true, 138 DeletedAt: uint64(now.AddDate(0, 0, -29).Unix()), 139 } 140 141 // Store bookmarks 142 _, err := s.m.browserDatabase.StoreBookmark(bookmark1) 143 s.Require().NoError(err) 144 145 _, err = s.m.browserDatabase.StoreBookmark(bookmark2) 146 s.Require().NoError(err) 147 148 _, err = s.m.browserDatabase.StoreBookmark(bookmark3) 149 s.Require().NoError(err) 150 151 bookmarks, err := s.m.browserDatabase.GetBookmarks() 152 s.Require().NoError(err) 153 s.Require().Len(bookmarks, 3) 154 155 // err = s.m.GarbageCollectRemovedBookmarks(&now) 156 err = s.m.GarbageCollectRemovedBookmarks() 157 s.Require().NoError(err) 158 159 bookmarks, err = s.m.browserDatabase.GetBookmarks() 160 s.Require().NoError(err) 161 s.Require().Len(bookmarks, 1) 162 }