mirror of
https://github.com/status-im/status-go.git
synced 2026-08-31 00:51:12 +00:00
Part of the Go project layout migration, item 3a: the signing phrase is
no longer a feature, so nothing should generate, store or read it.
pkg/backend/defaults.go buildSigningPhrase and its call
pkg/backend/seed_phrase_dictionary.go the 626-word list it drew from,
which had no other consumer
settings.Settings.SigningPhrase the field and its json tag
settings/database.go the column in INSERT and SELECT
migrations ALTER TABLE settings DROP COLUMN
The column is NOT NULL with no default, so dropping it from the writes
and dropping it from the table have to land together. The migration
follows the pattern of 1779877216_drop_keycard_settings_columns.
refs #7067
272 lines
10 KiB
Go
272 lines
10 KiB
Go
package protocol
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/suite"
|
|
|
|
"github.com/status-im/status-go/internal/crypto/types"
|
|
"github.com/status-im/status-go/internal/db/multiaccounts/settings"
|
|
"github.com/status-im/status-go/internal/testutils"
|
|
messagingtypes "github.com/status-im/status-go/pkg/messaging/types"
|
|
"github.com/status-im/status-go/pkg/services/stickers"
|
|
)
|
|
|
|
var (
|
|
pf = "A Preferred Name"
|
|
pf2 = "AnotherPreferredName.eth"
|
|
rawSticker = []byte(`{
|
|
"1":{
|
|
"author":"cryptoworld1373",
|
|
"id":1,
|
|
"name":"Status Cat",
|
|
"preview":"e3010170122050efc0a3e661339f31e1e44b3d15a1bf4e501c965a0523f57b701667fa90ccca",
|
|
"price":0,
|
|
"stickers":[
|
|
{"hash":"e30101701220eab9a8ef4eac6c3e5836a3768d8e04935c10c67d9a700436a0e53199e9b64d29"},
|
|
{"hash":"e30101701220c8f28aebe4dbbcee896d1cdff89ceeaceaf9f837df55c79125388f954ee5f1fe"},
|
|
{"hash":"e301017012204861f93e29dd8e7cf6699135c7b13af1bce8ceeaa1d9959ab8592aa20f05d15f"},
|
|
{"hash":"e301017012203ffa57a51cceaf2ce040852de3b300d395d5ba4d70e08ba993f93a25a387e3a9"},
|
|
{"hash":"e301017012204f2674db0bc7f7cfc0382d1d7f79b4ff73c41f5c487ef4c3bb3f3a4cf3f87d70"},
|
|
{"hash":"e30101701220e8d4d8b9fb5f805add2f63c1cb5c891e60f9929fc404e3bb725aa81628b97b5f"},
|
|
{"hash":"e301017012206fdad56fe7a2facb02dabe8294f3ac051443fcc52d67c2fbd8615eb72f9d74bd"},
|
|
{"hash":"e30101701220a691193cf0559905c10a3c5affb9855d730eae05509d503d71327e6c820aaf98"},
|
|
{"hash":"e30101701220d8004af925f8e85b4e24813eaa5ef943fa6a0c76035491b64fbd2e632a5cc2fd"},
|
|
{"hash":"e3010170122049f7bc650615568f14ee1cfa9ceaf89bfbc4745035479a7d8edee9b4465e64de"},
|
|
{"hash":"e301017012201915dc0faad8e6783aca084a854c03553450efdabf977d57b4f22f73d5c53b50"},
|
|
{"hash":"e301017012200b9fb71a129048c2a569433efc8e4d9155c54d598538be7f65ea26f665be1e84"},
|
|
{"hash":"e30101701220d37944e3fb05213d45416fa634cf9e10ec1f43d3bf72c4eb3062ae6cc4ed9b08"},
|
|
{"hash":"e3010170122059390dca66ba8713a9c323925bf768612f7dd16298c13a07a6b47cb5af4236e6"},
|
|
{"hash":"e30101701220daaf88ace8a3356559be5d6912d5d442916e3cc92664954526c9815d693dc32b"},
|
|
{"hash":"e301017012203ae30594fdf56d7bfd686cef1a45c201024e9c10a792722ef07ba968c83c064d"},
|
|
{"hash":"e3010170122016e5eba0bbd32fc1ff17d80d1247fc67432705cd85731458b52febb84fdd6408"},
|
|
{"hash":"e3010170122014fe2c2186cbf9d15ff61e04054fd6b0a5dbd7f365a1807f6f3d3d3e93e50875"},
|
|
{"hash":"e30101701220f23a7dad3ea7ad3f3553a98fb305148d285e4ebf66b427d85a2340f66d51da94"},
|
|
{"hash":"e3010170122047a637c6af02904a8ae702ec74b3df5fd8914df6fb11c99446a36d890beeb7ee"},
|
|
{"hash":"e30101701220776f1ff89f6196ae68414545f6c6a5314c35eee7406cb8591d607a2b0533cc86"}
|
|
],
|
|
"thumbnail":"e30101701220e9876531554a7cb4f20d7ebbf9daef2253e6734ad9c96ba288586a9b88bef491"
|
|
}
|
|
}`)
|
|
)
|
|
|
|
func TestMessengerSyncSettings(t *testing.T) {
|
|
suite.Run(t, new(MessengerSyncSettingsSuite))
|
|
}
|
|
|
|
type MessengerSyncSettingsSuite struct {
|
|
MessengerBaseTestSuite
|
|
alice *Messenger
|
|
alice2 *Messenger
|
|
}
|
|
|
|
func (s *MessengerSyncSettingsSuite) SetupTest() {
|
|
s.MessengerBaseTestSuite.setupMessaging()
|
|
|
|
networks := json.RawMessage("{}")
|
|
settings := settings.Settings{
|
|
Address: types.HexToAddress("0x1122334455667788990011223344556677889900"),
|
|
CurrentNetwork: "mainnet_rpc",
|
|
DappsAddress: types.HexToAddress("0x1122334455667788990011223344556677889900"),
|
|
InstallationID: "d3efcff6-cffa-560e-a547-21d3858cbc51",
|
|
KeyUID: "0x1122334455667788990011223344556677889900",
|
|
LatestDerivedPath: 0,
|
|
Name: "Test",
|
|
Networks: &networks,
|
|
PhotoPath: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAIAAACRXR/mAAAAjklEQVR4nOzXwQmFMBAAUZXUYh32ZB32ZB02sxYQQSZGsod55/91WFgSS0RM+SyjA56ZRZhFmEWYRRT6h+M6G16zrxv6fdJpmUWYRbxsYr13dKfanpN0WmYRZhGzXz6AWYRZRIfbaX26fT9Jk07LLMIsosPt9I/dTDotswizCG+nhFmEWYRZhFnEHQAA///z1CFkYamgfQAAAABJRU5ErkJggg==",
|
|
PreviewPrivacy: false,
|
|
PublicKey: "0x04112233445566778899001122334455667788990011223344556677889900112233445566778899001122334455667788990011223344556677889900",
|
|
SendPushNotifications: true,
|
|
ProfilePicturesShowTo: 1,
|
|
ProfilePicturesVisibility: 1,
|
|
DefaultSyncPeriod: 86400,
|
|
UseMailservers: false,
|
|
LinkPreviewRequestEnabled: true,
|
|
SendStatusUpdates: true,
|
|
WalletRootAddress: types.HexToAddress("0x1122334455667788990011223344556677889900"),
|
|
URLUnfurlingMode: settings.URLUnfurlingAlwaysAsk,
|
|
PreferredName: &pf,
|
|
Currency: "eth",
|
|
}
|
|
|
|
var err error
|
|
s.m, err = newRunningTestMessenger(s.T(), s.messagingEnv, testMessengerConfig{appSettings: &settings})
|
|
s.Require().NoError(err)
|
|
s.privateKey = s.m.identity
|
|
s.alice = s.m
|
|
|
|
s.alice2 = s.anotherMessenger()
|
|
|
|
prepAliceMessengersForPairing(&s.Suite, s.alice, s.alice2)
|
|
}
|
|
|
|
func prepAliceMessengersForPairing(s *suite.Suite, alice1, alice2 *Messenger) {
|
|
// Set Alice's installation metadata
|
|
aim := &messagingtypes.InstallationMetadata{
|
|
Name: "alice's-device",
|
|
DeviceType: "alice's-device-type",
|
|
}
|
|
err := alice1.SetInstallationMetadata(alice1.installationID, aim)
|
|
s.Require().NoError(err)
|
|
|
|
// Set Alice 2's installation metadata
|
|
a2im := &messagingtypes.InstallationMetadata{
|
|
Name: "alice's-other-device",
|
|
DeviceType: "alice's-other-device-type",
|
|
}
|
|
err = alice2.SetInstallationMetadata(alice2.installationID, a2im)
|
|
s.Require().NoError(err)
|
|
}
|
|
|
|
func (s *MessengerSyncSettingsSuite) syncSettingAndCheck(m1 *Messenger, m2 *Messenger, settingField settings.SettingField, settingValue interface{}) settings.Settings {
|
|
err := m1.settings.SaveSettingField(settingField, settingValue)
|
|
s.Require().NoError(err)
|
|
|
|
// Wait for the message to reach its destination
|
|
err = testutils.RetryWithBackOff(func() error {
|
|
mr, err := m2.RetrieveAll()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if len(mr.Settings) == 0 {
|
|
return errors.New("sync settings not in MessengerResponse")
|
|
}
|
|
return nil
|
|
})
|
|
s.Require().NoError(err)
|
|
|
|
// Check settings values
|
|
m2s, err := m2.settings.GetSettings()
|
|
s.Require().NoError(err)
|
|
return m2s
|
|
}
|
|
|
|
func (s *MessengerSyncSettingsSuite) TestSyncSettings() {
|
|
// Pair alice's two devices
|
|
PairDevices(&s.Suite, s.alice2, s.alice)
|
|
PairDevices(&s.Suite, s.alice, s.alice2)
|
|
|
|
// Check alice 1 settings values
|
|
as, err := s.alice.settings.GetSettings()
|
|
s.Require().NoError(err)
|
|
s.Require().Exactly(settings.ProfilePicturesShowToContactsOnly, as.ProfilePicturesShowTo)
|
|
s.Require().Exactly(settings.ProfilePicturesVisibilityContactsOnly, as.ProfilePicturesVisibility)
|
|
s.Require().Exactly(settings.URLUnfurlingAlwaysAsk, as.URLUnfurlingMode)
|
|
|
|
// Check alice 2 settings values
|
|
aos, err := s.alice2.settings.GetSettings()
|
|
s.Require().NoError(err)
|
|
s.Require().Exactly(settings.ProfilePicturesShowToContactsOnly, aos.ProfilePicturesShowTo)
|
|
s.Require().Exactly(settings.ProfilePicturesVisibilityContactsOnly, aos.ProfilePicturesVisibility)
|
|
s.Require().Exactly(settings.URLUnfurlingAlwaysAsk, as.URLUnfurlingMode)
|
|
|
|
aos = s.syncSettingAndCheck(s.alice, s.alice2, settings.ProfilePicturesVisibility, settings.ProfilePicturesVisibilityEveryone)
|
|
s.Require().Equal(settings.ProfilePicturesVisibilityEveryone, aos.ProfilePicturesVisibility)
|
|
|
|
as = s.syncSettingAndCheck(s.alice2, s.alice, settings.ProfilePicturesShowTo, settings.ProfilePicturesShowToEveryone)
|
|
s.Require().Exactly(settings.ProfilePicturesShowToEveryone, as.ProfilePicturesShowTo)
|
|
|
|
aos = s.syncSettingAndCheck(s.alice, s.alice2, settings.URLUnfurlingMode, settings.URLUnfurlingDisableAll)
|
|
s.Require().Exactly(settings.URLUnfurlingDisableAll, aos.URLUnfurlingMode)
|
|
}
|
|
|
|
func (s *MessengerSyncSettingsSuite) TestSyncSettings_StickerPacks() {
|
|
s.T().Skip("Currently sticker pack syncing has been deactivated, testing to resume after sticker packs works correctly")
|
|
|
|
// Check alice 1 settings values
|
|
as, err := s.alice.settings.GetSettings()
|
|
s.Require().NoError(err)
|
|
s.Require().Nil(as.StickerPacksInstalled)
|
|
s.Require().Nil(as.StickerPacksPending)
|
|
s.Require().Nil(as.StickersRecentStickers)
|
|
|
|
// Check alice 2 settings values
|
|
aos, err := s.alice2.settings.GetSettings()
|
|
s.Require().NoError(err)
|
|
s.Require().Nil(aos.StickerPacksInstalled)
|
|
s.Require().Nil(aos.StickerPacksPending)
|
|
s.Require().Nil(aos.StickersRecentStickers)
|
|
|
|
// Pair devices. Allows alice to send to alicesOtherDevice
|
|
PairDevices(&s.Suite, s.alice2, s.alice)
|
|
|
|
// Add sticker pack to alice device
|
|
stickerPacks := make(stickers.StickerPackCollection)
|
|
err = json.Unmarshal(rawSticker, &stickerPacks)
|
|
s.Require().NoError(err)
|
|
|
|
err = s.alice.settings.SaveSettingField(settings.StickersPacksInstalled, stickerPacks)
|
|
s.Require().NoError(err)
|
|
|
|
as, err = s.alice.settings.GetSettings()
|
|
s.Require().NoError(err)
|
|
spi, err := as.StickerPacksInstalled.MarshalJSON()
|
|
s.Require().NoError(err)
|
|
s.Require().Equal(2169, len(spi))
|
|
|
|
// Wait for the message to reach its destination
|
|
err = testutils.RetryWithBackOff(func() error {
|
|
mr, err := s.alice2.RetrieveAll()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if len(mr.Settings) == 0 {
|
|
return errors.New("sync settings not in MessengerResponse")
|
|
}
|
|
|
|
return nil
|
|
})
|
|
s.Require().NoError(err)
|
|
|
|
aos, err = s.alice2.settings.GetSettings()
|
|
s.Require().NoError(err)
|
|
ospi, err := aos.StickerPacksInstalled.MarshalJSON()
|
|
s.Require().NoError(err)
|
|
s.Require().Exactly(spi, ospi)
|
|
}
|
|
|
|
func (s *MessengerSyncSettingsSuite) TestSyncSettings_PreferredName() {
|
|
// Check alice 1 settings values
|
|
as, err := s.alice.settings.GetSettings()
|
|
s.Require().NoError(err)
|
|
s.Require().Equal(pf, *as.PreferredName)
|
|
|
|
// Check alice 2 settings values
|
|
aos, err := s.alice2.settings.GetSettings()
|
|
s.Require().NoError(err)
|
|
s.Require().Nil(aos.PreferredName)
|
|
|
|
// Pair devices. Allows alice to send to alicesOtherDevice
|
|
PairDevices(&s.Suite, s.alice2, s.alice)
|
|
|
|
// Update Alice's PreferredName
|
|
err = s.alice.settings.SaveSettingField(settings.PreferredName, pf2)
|
|
s.Require().NoError(err)
|
|
|
|
apn, err := s.alice.settings.GetPreferredUsername()
|
|
s.Require().NoError(err)
|
|
s.Require().Equal(pf2, apn)
|
|
|
|
// Wait for the sync message to reach its destination
|
|
err = testutils.RetryWithBackOff(func() error {
|
|
mr, err := s.alice2.RetrieveAll()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if len(mr.Settings) == 0 {
|
|
return errors.New("sync settings not in MessengerResponse")
|
|
}
|
|
|
|
return nil
|
|
})
|
|
s.Require().NoError(err)
|
|
|
|
opn, err := s.alice2.settings.GetPreferredUsername()
|
|
s.Require().NoError(err)
|
|
s.Require().Equal(pf2, opn)
|
|
}
|