github.com/status-im/status-go@v1.1.0/services/wallet/transfer/block_ranges_sequential_dao_test.go (about) 1 package transfer 2 3 import ( 4 "database/sql" 5 "math/big" 6 "testing" 7 8 "github.com/stretchr/testify/require" 9 10 "github.com/ethereum/go-ethereum/common" 11 "github.com/status-im/status-go/t/helpers" 12 "github.com/status-im/status-go/walletdatabase" 13 ) 14 15 func setupBlockRangesTestDB(t *testing.T) (*sql.DB, func()) { 16 db, err := helpers.SetupTestMemorySQLDB(walletdatabase.DbInitializer{}) 17 require.NoError(t, err) 18 return db, func() { 19 require.NoError(t, db.Close()) 20 } 21 } 22 23 func TestBlockRangeSequentialDAO_updateTokenRange(t *testing.T) { 24 walletDb, stop := setupBlockRangesTestDB(t) 25 defer stop() 26 27 type fields struct { 28 db *sql.DB 29 } 30 type args struct { 31 chainID uint64 32 account common.Address 33 newBlockRange *BlockRange 34 } 35 tests := []struct { 36 name string 37 fields fields 38 args args 39 wantErr bool 40 }{ 41 { 42 "testTokenBlockRange", 43 fields{db: walletDb}, 44 args{ 45 chainID: 1, 46 account: common.Address{}, 47 newBlockRange: &BlockRange{ 48 LastKnown: big.NewInt(1), 49 }, 50 }, 51 false, 52 }, 53 } 54 for _, tt := range tests { 55 t.Run(tt.name, func(t *testing.T) { 56 b := &BlockRangeSequentialDAO{ 57 db: tt.fields.db, 58 } 59 60 err := b.upsertRange(tt.args.chainID, tt.args.account, newEthTokensBlockRanges()) 61 require.NoError(t, err) 62 63 if err := b.updateTokenRange(tt.args.chainID, tt.args.account, tt.args.newBlockRange); (err != nil) != tt.wantErr { 64 t.Errorf("BlockRangeSequentialDAO.updateTokenRange() error = %v, wantErr %v", err, tt.wantErr) 65 } 66 67 ethTokensBlockRanges, _, err := b.getBlockRange(tt.args.chainID, tt.args.account) 68 require.NoError(t, err) 69 require.NotNil(t, ethTokensBlockRanges.tokens) 70 require.Equal(t, tt.args.newBlockRange.LastKnown, ethTokensBlockRanges.tokens.LastKnown) 71 }) 72 } 73 } 74 75 func TestBlockRangeSequentialDAO_updateEthRange(t *testing.T) { 76 walletDb, stop := setupBlockRangesTestDB(t) 77 defer stop() 78 79 type fields struct { 80 db *sql.DB 81 } 82 type args struct { 83 chainID uint64 84 account common.Address 85 newBlockRange *BlockRange 86 } 87 tests := []struct { 88 name string 89 fields fields 90 args args 91 wantErr bool 92 }{ 93 { 94 "testEthBlockRange", 95 fields{db: walletDb}, 96 args{ 97 chainID: 1, 98 account: common.Address{}, 99 newBlockRange: &BlockRange{ 100 Start: big.NewInt(2), 101 FirstKnown: big.NewInt(1), 102 LastKnown: big.NewInt(3), 103 }, 104 }, 105 false, 106 }, 107 } 108 for _, tt := range tests { 109 t.Run(tt.name, func(t *testing.T) { 110 b := &BlockRangeSequentialDAO{ 111 db: tt.fields.db, 112 } 113 114 // Initial insert 115 dummyBlockRange := NewBlockRange() 116 dummyBlockRange.FirstKnown = big.NewInt(2) // To confirm that it is updated it must be greater than newBlockRange.FirstKnown 117 if err := b.upsertEthRange(tt.args.chainID, tt.args.account, dummyBlockRange); (err != nil) != tt.wantErr { 118 t.Errorf("BlockRangeSequentialDAO.upsertEthRange() insert error = %v, wantErr %v", err, tt.wantErr) 119 } 120 121 ethTokensBlockRanges, _, err := b.getBlockRange(tt.args.chainID, tt.args.account) 122 require.NoError(t, err) 123 require.NotNil(t, ethTokensBlockRanges.eth) 124 require.Equal(t, dummyBlockRange.Start, ethTokensBlockRanges.eth.Start) 125 require.Equal(t, dummyBlockRange.FirstKnown, ethTokensBlockRanges.eth.FirstKnown) 126 require.Equal(t, dummyBlockRange.LastKnown, ethTokensBlockRanges.eth.LastKnown) 127 128 // Update 129 if err := b.upsertEthRange(tt.args.chainID, tt.args.account, tt.args.newBlockRange); (err != nil) != tt.wantErr { 130 t.Errorf("BlockRangeSequentialDAO.upsertEthRange() update error = %v, wantErr %v", err, tt.wantErr) 131 } 132 133 ethTokensBlockRanges, _, err = b.getBlockRange(tt.args.chainID, tt.args.account) 134 require.NoError(t, err) 135 require.NotNil(t, ethTokensBlockRanges.eth) 136 require.Equal(t, tt.args.newBlockRange.Start, ethTokensBlockRanges.eth.Start) 137 require.Equal(t, tt.args.newBlockRange.LastKnown, ethTokensBlockRanges.eth.LastKnown) 138 require.Equal(t, tt.args.newBlockRange.FirstKnown, ethTokensBlockRanges.eth.FirstKnown) 139 }) 140 } 141 }