Skip to content

Commit

Permalink
feat: implement new endpoint to set customization color
Browse files Browse the repository at this point in the history
  • Loading branch information
mohsen-ghafouri committed Jan 15, 2024
1 parent 3d7ab79 commit 5a4e30a
Show file tree
Hide file tree
Showing 4 changed files with 137 additions and 0 deletions.
15 changes: 15 additions & 0 deletions protocol/messenger_settings.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package protocol

import (
"context"
"github.com/status-im/status-go/nodecfg"
"github.com/status-im/status-go/protocol/requests"
"github.com/status-im/status-go/timesource"
)

func (m *Messenger) SetLightClient(request *requests.SetLightClient) error {
Expand All @@ -20,3 +22,16 @@ func (m *Messenger) SetLogLevel(request *requests.SetLogLevel) error {
func (m *Messenger) SetCustomNodes(request *requests.SetCustomNodes) error {
return nodecfg.SetWakuV2CustomNodes(m.database, request.CustomNodes)
}

func (m *Messenger) SetCustomizationColor(ctx context.Context, request *requests.SetCustomizationColor) error {
updatedAt := timesource.GetCurrentTimeInMillis()

acc, err := m.multiAccounts.GetAccount(request.KeyUID)
acc.CustomizationColor = request.CustomizationColor
acc.CustomizationColorClock = updatedAt
err = m.syncAccountCustomizationColor(ctx, acc)
if err != nil {
return err
}
return nil
}
110 changes: 110 additions & 0 deletions protocol/messenger_settings_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
package protocol

import (
"context"
"github.com/status-im/status-go/protocol/requests"
"testing"

"github.com/stretchr/testify/suite"
"go.uber.org/zap"

"github.com/status-im/status-go/multiaccounts/common"

gethbridge "github.com/status-im/status-go/eth-node/bridge/geth"
"github.com/status-im/status-go/eth-node/crypto"
"github.com/status-im/status-go/eth-node/types"
"github.com/status-im/status-go/protocol/encryption/multidevice"
"github.com/status-im/status-go/protocol/tt"
"github.com/status-im/status-go/waku"
)

func TestMessengerSettings(t *testing.T) {
suite.Run(t, new(MessengerSettingsSuite))
}

type MessengerSettingsSuite struct {
suite.Suite
alice *Messenger
alice2 *Messenger
// If one wants to send messages between different instances of Messenger,
// a single Waku service should be shared.
shh types.Waku
logger *zap.Logger
}

func (s *MessengerSettingsSuite) SetupTest() {
s.logger = tt.MustCreateTestLogger()

config := waku.DefaultConfig
config.MinimumAcceptedPoW = 0
shh := waku.New(&config, s.logger)
s.shh = gethbridge.NewGethWakuWrapper(shh)
s.Require().NoError(shh.Start())

pk, err := crypto.GenerateKey()
s.Require().NoError(err)
s.alice, err = newMessengerWithKey(s.shh, pk, s.logger, nil)
s.Require().NoError(err)

s.alice2, err = newMessengerWithKey(s.shh, s.alice.identity, s.logger, nil)
s.Require().NoError(err)

prepareMessengersForPairing(&s.Suite, s.alice, s.alice2)
}

func (s *MessengerSettingsSuite) TearDownTest() {
TearDownMessenger(&s.Suite, s.alice)
TearDownMessenger(&s.Suite, s.alice2)
_ = s.logger.Sync()
}

func prepareMessengersForPairing(s *suite.Suite, alice1, alice2 *Messenger) {
// Set Alice's installation metadata
aim := &multidevice.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 := &multidevice.InstallationMetadata{
Name: "alice's-other-device",
DeviceType: "alice's-other-device-type",
}
err = alice2.SetInstallationMetadata(alice2.installationID, a2im)
s.Require().NoError(err)
}

func (s *MessengerSettingsSuite) TestSetCustomizationColor() {
PairDevices(&s.Suite, s.alice2, s.alice)
PairDevices(&s.Suite, s.alice, s.alice2)

s.Require().Equal(s.alice.account.KeyUID, s.alice2.account.KeyUID)

err := s.alice.multiAccounts.SaveAccount(*s.alice.account)
s.Require().NoError(err)
err = s.alice2.multiAccounts.SaveAccount(*s.alice2.account)
s.Require().NoError(err)

// check that accounts have no customization color
acc, err := s.alice.multiAccounts.GetAccount(s.alice.account.KeyUID)
s.Require().NoError(err)
acc2, err := s.alice2.multiAccounts.GetAccount(s.alice2.account.KeyUID)
s.Require().NoError(err)
s.Require().Equal(acc.CustomizationColor, common.CustomizationColor(""))
s.Require().Equal(acc.CustomizationColorClock, uint64(0))
s.Require().Equal(acc2.CustomizationColor, common.CustomizationColor(""))
s.Require().Equal(acc2.CustomizationColorClock, uint64(0))

err = s.alice.SetCustomizationColor(context.TODO(), &requests.SetCustomizationColor{KeyUID: s.alice.account.KeyUID, CustomizationColor: common.CustomizationColorBlue})
s.Require().NoError(err)
_, err = WaitOnMessengerResponse(s.alice2, func(r *MessengerResponse) bool {
return len(r.CustomizationColor) > 0
}, "message syncAccountCustomizationColor not received")
s.Require().NoError(err)
acc, err = s.alice2.multiAccounts.GetAccount(s.alice.account.KeyUID)
acc2, err = s.alice2.multiAccounts.GetAccount(s.alice2.account.KeyUID)
s.Require().NoError(err)
s.Require().Equal(acc.CustomizationColor, acc2.CustomizationColor)
}
8 changes: 8 additions & 0 deletions protocol/requests/set_customization_color.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package requests

import "github.com/status-im/status-go/multiaccounts/common"

type SetCustomizationColor struct {
CustomizationColor common.CustomizationColor `json:"customizationColor"`
KeyUID string `json:"keyUid"`
}
4 changes: 4 additions & 0 deletions services/ext/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -1714,6 +1714,10 @@ func (api *PublicAPI) SetCustomNodes(request *requests.SetCustomNodes) error {
return api.service.messenger.SetCustomNodes(request)
}

func (api *PublicAPI) SetCustomizationColor(ctx context.Context, request *requests.SetCustomizationColor) error {
return api.service.messenger.SetCustomizationColor(ctx, request)
}

// -----
// HELPER
// -----
Expand Down

0 comments on commit 5a4e30a

Please sign in to comment.