Skip to content

Commit 31a7bc6

Browse files
committed
chore: fix tests
1 parent 0e9005c commit 31a7bc6

File tree

11 files changed

+1030
-1029
lines changed

11 files changed

+1030
-1029
lines changed

protocol/requests/create_account.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package requests
22

33
import (
44
"github.com/ethereum/go-ethereum/common"
5+
56
"github.com/pkg/errors"
67

78
utils "github.com/status-im/status-go/common"

services/wallet/api_impl_test.go

Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
package wallet
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"math/big"
7+
"net/http"
8+
"net/http/httptest"
9+
"testing"
10+
"time"
11+
12+
"github.com/brianvoe/gofakeit/v6"
13+
14+
"github.com/ethereum/go-ethereum/common"
15+
16+
"github.com/status-im/status-go/appdatabase"
17+
"github.com/status-im/status-go/multiaccounts/accounts"
18+
"github.com/status-im/status-go/params"
19+
"github.com/status-im/status-go/params/networkhelper"
20+
"github.com/status-im/status-go/pkg/pubsub"
21+
"github.com/status-im/status-go/pkg/security"
22+
"github.com/status-im/status-go/rpc"
23+
"github.com/status-im/status-go/rpc/network/testutil"
24+
"github.com/status-im/status-go/services/wallet/requests"
25+
"github.com/status-im/status-go/services/wallet/token"
26+
mock_tokenbalances "github.com/status-im/status-go/services/wallet/tokenbalances/mock"
27+
"github.com/status-im/status-go/t/helpers"
28+
"github.com/status-im/status-go/walletdatabase"
29+
30+
"github.com/stretchr/testify/require"
31+
32+
"go.uber.org/mock/gomock"
33+
)
34+
35+
func TestAPI_GetAddressDetails(t *testing.T) {
36+
appDB, err := helpers.SetupTestMemorySQLDB(appdatabase.DbInitializer{})
37+
require.NoError(t, err)
38+
defer appDB.Close()
39+
40+
accountsDb, err := accounts.NewDB(appDB)
41+
require.NoError(t, err)
42+
defer accountsDb.Close()
43+
44+
db, err := helpers.SetupTestMemorySQLDB(walletdatabase.DbInitializer{})
45+
require.NoError(t, err)
46+
defer db.Close()
47+
48+
accountsPublisher := pubsub.NewPublisher()
49+
50+
chainID := uint64(1)
51+
address := "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
52+
53+
// Create a new server that delays the response by 1 second
54+
serverWith1SecDelay := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
55+
time.Sleep(1 * time.Second)
56+
fmt.Fprintln(w, `{"result": "0x10"}`)
57+
}))
58+
defer serverWith1SecDelay.Close()
59+
60+
networks := []params.Network{
61+
*testutil.CreateNetwork(chainID, "Ethereum Mainnet", []params.RpcProvider{
62+
*params.NewProxyProvider(chainID, "Test Provider", security.NewSensitiveString(serverWith1SecDelay.URL+"/nodefleet/"), false),
63+
},
64+
),
65+
}
66+
67+
networks = networkhelper.OverrideBasicAuth(networks, params.EmbeddedProxyProviderType, true, security.NewSensitiveString(gofakeit.Username()), security.NewSensitiveString(gofakeit.LetterN(5)))
68+
require.NotEmpty(t, networks)
69+
70+
config := rpc.ClientConfig{
71+
UpstreamChainID: chainID,
72+
Networks: networks,
73+
DB: appDB,
74+
}
75+
c, err := rpc.NewClient(config)
76+
require.NoError(t, err)
77+
78+
tokenManager := token.NewTokenManager(db, c, nil, nil, appDB, nil, nil, nil, accountsDb, token.NewPersistence(db))
79+
80+
service := NewService(db, accountsDb, appDB, c, accountsPublisher, nil, nil, &params.NodeConfig{}, nil, nil, nil, nil, tokenManager, "")
81+
82+
mockCtrl := gomock.NewController(t)
83+
tokenbalancesFetcher := mock_tokenbalances.NewMockFetcherIface(mockCtrl)
84+
85+
service.tokenBalancesFetcher = tokenbalancesFetcher
86+
87+
api := NewAPI(service)
88+
89+
tokenbalancesFetcher.EXPECT().FetchSingle(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).DoAndReturn(func(ctx context.Context, chainID uint64, tokenAddress common.Address, accountAddress common.Address) (*big.Int, error) {
90+
// Delay the response by 1 second
91+
timer := time.NewTimer(1 * time.Second)
92+
select {
93+
case <-timer.C:
94+
return big.NewInt(1000000000000000000), nil
95+
case <-ctx.Done():
96+
return nil, ctx.Err()
97+
}
98+
}).AnyTimes()
99+
100+
// Test getting address details using `GetAddressDetails` call, that always waits for the request to finish
101+
details, err := api.GetAddressDetails(context.Background(), 1, address)
102+
require.NoError(t, err)
103+
require.Equal(t, true, details.HasActivity)
104+
105+
// empty params
106+
details, err = api.AddressDetails(context.Background(), &requests.AddressDetails{})
107+
require.Error(t, err)
108+
require.ErrorIs(t, err, requests.ErrAddresInvalid)
109+
require.Nil(t, details)
110+
111+
// no response longer than the set timeout
112+
details, err = api.AddressDetails(context.Background(), &requests.AddressDetails{
113+
Address: address,
114+
TimeoutInMilliseconds: 500,
115+
})
116+
require.NoError(t, err)
117+
require.Equal(t, false, details.HasActivity)
118+
119+
// timeout longer than the response time
120+
details, err = api.AddressDetails(context.Background(), &requests.AddressDetails{
121+
Address: address,
122+
TimeoutInMilliseconds: 1200,
123+
})
124+
require.NoError(t, err)
125+
require.Equal(t, true, details.HasActivity)
126+
127+
// specific chain and timeout longer than the response time
128+
details, err = api.AddressDetails(context.Background(), &requests.AddressDetails{
129+
Address: address,
130+
ChainIDs: []uint64{chainID},
131+
TimeoutInMilliseconds: 1200,
132+
})
133+
require.NoError(t, err)
134+
require.Equal(t, true, details.HasActivity)
135+
}

0 commit comments

Comments
 (0)