github.com/status-im/status-go@v1.1.0/services/connector/api_test.go (about)

     1  package connector
     2  
     3  import (
     4  	"database/sql"
     5  	"testing"
     6  
     7  	"github.com/golang/mock/gomock"
     8  	"github.com/stretchr/testify/require"
     9  
    10  	gethrpc "github.com/ethereum/go-ethereum/rpc"
    11  
    12  	"github.com/status-im/status-go/params"
    13  	statusRPC "github.com/status-im/status-go/rpc"
    14  	"github.com/status-im/status-go/services/connector/commands"
    15  	"github.com/status-im/status-go/t/helpers"
    16  	"github.com/status-im/status-go/transactions/fake"
    17  	"github.com/status-im/status-go/walletdatabase"
    18  )
    19  
    20  func createDB(t *testing.T) (*sql.DB, func()) {
    21  	db, cleanup, err := helpers.SetupTestSQLDB(walletdatabase.DbInitializer{}, "provider-tests-")
    22  	require.NoError(t, err)
    23  	return db, func() { require.NoError(t, cleanup()) }
    24  }
    25  
    26  func setupTestAPI(t *testing.T) (*API, func()) {
    27  	db, cancel := createDB(t)
    28  
    29  	txServiceMockCtrl := gomock.NewController(t)
    30  	server, _ := fake.NewTestServer(txServiceMockCtrl)
    31  
    32  	// Creating a dummy status node to simulate what it's done in get_status_node.go
    33  	upstreamConfig := params.UpstreamRPCConfig{
    34  		URL:     "https://mainnet.infura.io/v3/fake",
    35  		Enabled: true,
    36  	}
    37  
    38  	client := gethrpc.DialInProc(server)
    39  	rpcClient, err := statusRPC.NewClient(client, 1, upstreamConfig, nil, db, nil)
    40  	require.NoError(t, err)
    41  
    42  	service := NewService(db, rpcClient, nil)
    43  
    44  	return NewAPI(service), cancel
    45  }
    46  
    47  func TestCallRPC(t *testing.T) {
    48  	api, cancel := setupTestAPI(t)
    49  	defer cancel()
    50  
    51  	tests := []struct {
    52  		request     string
    53  		expectError error
    54  	}{
    55  		{
    56  			request:     "{\"method\": \"eth_chainId\", \"params\": []}",
    57  			expectError: commands.ErrRequestMissingDAppData,
    58  		},
    59  		{
    60  			request:     "{\"method\": \"eth_accounts\", \"params\": []}",
    61  			expectError: commands.ErrRequestMissingDAppData,
    62  		},
    63  		{
    64  			request:     "{\"method\": \"eth_requestAccounts\", \"params\": []}",
    65  			expectError: commands.ErrRequestMissingDAppData,
    66  		},
    67  		{
    68  			request:     "{\"method\": \"eth_sendTransaction\", \"params\": []}",
    69  			expectError: commands.ErrRequestMissingDAppData,
    70  		},
    71  		{
    72  			request:     "{\"method\": \"wallet_switchEthereumChain\", \"params\": []}",
    73  			expectError: commands.ErrRequestMissingDAppData,
    74  		},
    75  	}
    76  
    77  	for _, tt := range tests {
    78  		t.Run(tt.request, func(t *testing.T) {
    79  			_, err := api.CallRPC(tt.request)
    80  			require.Error(t, err)
    81  			require.Equal(t, tt.expectError, err)
    82  		})
    83  	}
    84  }