package commands import ( "fmt" "testing" "github.com/stretchr/testify/assert" "github.com/status-im/status-go/eth-node/types" "github.com/status-im/status-go/params" walletCommon "github.com/status-im/status-go/services/wallet/common" ) func TestFailToSwitchEthereumChainWithMissingDAppFields(t *testing.T) { db, close := SetupTestDB(t) defer close() cmd := &SwitchEthereumChainCommand{Db: db} // Missing DApp fields request, err := ConstructRPCRequest("wallet_switchEthereumChain", []interface{}{}, nil) assert.NoError(t, err) result, err := cmd.Execute(request) assert.Equal(t, ErrRequestMissingDAppData, err) assert.Empty(t, result) } func TestFailToSwitchEthereumChainWithNoChainId(t *testing.T) { db, close := SetupTestDB(t) defer close() cmd := &SwitchEthereumChainCommand{Db: db} request, err := ConstructRPCRequest("wallet_switchEthereumChain", []interface{}{}, &testDAppData) assert.NoError(t, err) _, err = cmd.Execute(request) assert.Equal(t, ErrEmptyRPCParams, err) } func TestFailToSwitchEthereumChainWithUnsupportedChainId(t *testing.T) { db, close := SetupTestDB(t) defer close() nm := NetworkManagerMock{} nm.SetNetworks([]*params.Network{ { ChainID: walletCommon.EthereumMainnet, }, }) cmd := &SwitchEthereumChainCommand{ Db: db, NetworkManager: &nm, } params := make([]interface{}, 1) params[0] = map[string]interface{}{ "chainId": "0x1a343", } // some unrecoginzed chain id request, err := ConstructRPCRequest("wallet_switchEthereumChain", params, &testDAppData) assert.NoError(t, err) _, err = cmd.Execute(request) assert.Equal(t, ErrUnsupportedNetwork, err) } func TestSwitchEthereumChain(t *testing.T) { db, close := SetupTestDB(t) defer close() nm := NetworkManagerMock{} nm.SetNetworks([]*params.Network{ { ChainID: walletCommon.EthereumMainnet, }, { ChainID: walletCommon.EthereumGoerli, }, }) cmd := &SwitchEthereumChainCommand{ Db: db, NetworkManager: &nm, } params := make([]interface{}, 1) params[0] = map[string]interface{}{ "chainId": "0x1", } request, err := ConstructRPCRequest("wallet_switchEthereumChain", params, &testDAppData) assert.NoError(t, err) err = PersistDAppData(db, testDAppData, types.HexToAddress("0x6d0aa2a774b74bb1d36f97700315adf962c69fcg"), walletCommon.EthereumMainnet) assert.NoError(t, err) response, err := cmd.Execute(request) assert.NoError(t, err) chainId := fmt.Sprintf(`0x%s`, walletCommon.ChainID(walletCommon.EthereumMainnet).String()) assert.Equal(t, chainId, response) }