mirror of
https://github.com/status-im/status-go.git
synced 2025-01-10 14:47:06 +00:00
be9c55bc16
* WIP accounts implementation * Accounts datasore and changes to status mobile API * Add library changes and method to update config * Handle error after account selection * Add two methods to start account to backend * Use encrypted database for settings and add a service for them * Resolve linter warning * Bring back StartNode StopNode for tests * Add sub accounts and get/save api * Changes to accounts structure * Login use root address and fetch necessary info from database * Cover accounts store with tests * Refactor in progress * Initialize status keystore instance before starting ethereum node * Rework library tests * Resolve failures in private api test and send transaction test * Pass pointer to initialized config to unmarshal * Use multiaccounts/accounts naming consistently Multiaccount is used as a login identifier Account references an address and a key, if account is not watch-only. * Add login timestamp stored in the database to accounts.Account object * Add photo-path field for multiaccount struct * Add multiaccoutns rpc with updateAccount method Update to any other account that wasn't used for login will return an error * Fix linter in services/accounts * Select account before starting a node * Save list of accounts on first login * Pass account manager to accounts service to avoid selecting account before starting a node * Add logs to login with save and regualr login
63 lines
1.7 KiB
Go
63 lines
1.7 KiB
Go
package multiaccounts
|
|
|
|
import (
|
|
"io/ioutil"
|
|
"os"
|
|
"testing"
|
|
|
|
"github.com/ethereum/go-ethereum/common"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func setupTestDB(t *testing.T) (*Database, func()) {
|
|
tmpfile, err := ioutil.TempFile("", "accounts-tests-")
|
|
require.NoError(t, err)
|
|
db, err := InitializeDB(tmpfile.Name())
|
|
require.NoError(t, err)
|
|
return db, func() {
|
|
require.NoError(t, db.Close())
|
|
require.NoError(t, os.Remove(tmpfile.Name()))
|
|
}
|
|
}
|
|
|
|
func TestAccounts(t *testing.T) {
|
|
db, stop := setupTestDB(t)
|
|
defer stop()
|
|
expected := Account{Name: "string", Address: common.Address{0xff}}
|
|
require.NoError(t, db.SaveAccount(expected))
|
|
accounts, err := db.GetAccounts()
|
|
require.NoError(t, err)
|
|
require.Len(t, accounts, 1)
|
|
require.Equal(t, expected, accounts[0])
|
|
}
|
|
|
|
func TestAccountsUpdate(t *testing.T) {
|
|
db, stop := setupTestDB(t)
|
|
defer stop()
|
|
expected := Account{Address: common.Address{0x01}}
|
|
require.NoError(t, db.SaveAccount(expected))
|
|
expected.PhotoPath = "chars"
|
|
require.NoError(t, db.UpdateAccount(expected))
|
|
rst, err := db.GetAccounts()
|
|
require.NoError(t, err)
|
|
require.Len(t, rst, 1)
|
|
require.Equal(t, expected, rst[0])
|
|
}
|
|
|
|
func TestLoginUpdate(t *testing.T) {
|
|
db, stop := setupTestDB(t)
|
|
defer stop()
|
|
|
|
accounts := []Account{{Name: "first", Address: common.Address{0xff}}, {Name: "second", Address: common.Address{0xf1}}}
|
|
for _, acc := range accounts {
|
|
require.NoError(t, db.SaveAccount(acc))
|
|
}
|
|
require.NoError(t, db.UpdateAccountTimestamp(accounts[0].Address, 100))
|
|
require.NoError(t, db.UpdateAccountTimestamp(accounts[1].Address, 10))
|
|
accounts[0].Timestamp = 100
|
|
accounts[1].Timestamp = 10
|
|
rst, err := db.GetAccounts()
|
|
require.NoError(t, err)
|
|
require.Equal(t, accounts, rst)
|
|
}
|