github.com/status-im/status-go@v1.1.0/services/wallet/transfer/multi_transaction_db_test.go (about) 1 package transfer 2 3 import ( 4 "math/big" 5 "testing" 6 7 "github.com/stretchr/testify/require" 8 9 "github.com/ethereum/go-ethereum/common" 10 "github.com/ethereum/go-ethereum/common/hexutil" 11 wallet_common "github.com/status-im/status-go/services/wallet/common" 12 "github.com/status-im/status-go/t/helpers" 13 "github.com/status-im/status-go/walletdatabase" 14 ) 15 16 func setupTestMultiTransactionDB(t *testing.T) (*MultiTransactionDB, func()) { 17 db, err := helpers.SetupTestMemorySQLDB(walletdatabase.DbInitializer{}) 18 require.NoError(t, err) 19 SetMultiTransactionIDGenerator(StaticIDCounter()) // to have different multi-transaction IDs even with fast execution 20 return NewMultiTransactionDB(db), func() { 21 require.NoError(t, db.Close()) 22 } 23 } 24 func TestCreateMultiTransaction(t *testing.T) { 25 mtDB, cleanup := setupTestMultiTransactionDB(t) 26 defer cleanup() 27 28 tr := generateTestTransfer(0) 29 multiTransaction := GenerateTestSendMultiTransaction(tr) 30 31 err := mtDB.CreateMultiTransaction(&multiTransaction) 32 require.NoError(t, err) 33 34 // Add assertions here to verify the result of the CreateMultiTransaction method 35 details := NewMultiTxDetails() 36 details.IDs = []wallet_common.MultiTransactionIDType{multiTransaction.ID} 37 mtx, err := mtDB.ReadMultiTransactions(details) 38 require.NoError(t, err) 39 require.Len(t, mtx, 1) 40 require.True(t, areMultiTransactionsEqual(&multiTransaction, mtx[0])) 41 } 42 func TestReadMultiTransactions(t *testing.T) { 43 mtDB, cleanup := setupTestMultiTransactionDB(t) 44 defer cleanup() 45 46 // Create test multi transactions 47 tr := generateTestTransfer(0) 48 mt1 := GenerateTestSendMultiTransaction(tr) 49 tr20 := generateTestTransfer(1) 50 tr21 := generateTestTransfer(2) 51 mt2 := GenerateTestBridgeMultiTransaction(tr20, tr21) 52 tr3 := generateTestTransfer(3) 53 mt3 := GenerateTestSwapMultiTransaction(tr3, "SNT", 100) 54 55 require.NotEqual(t, mt1.ID, mt2.ID) 56 require.NotEqual(t, mt1.ID, mt3.ID) 57 58 err := mtDB.CreateMultiTransaction(&mt1) 59 require.NoError(t, err) 60 err = mtDB.CreateMultiTransaction(&mt2) 61 require.NoError(t, err) 62 err = mtDB.CreateMultiTransaction(&mt3) 63 require.NoError(t, err) 64 65 // Read multi transactions 66 details := NewMultiTxDetails() 67 details.IDs = []wallet_common.MultiTransactionIDType{mt1.ID, mt2.ID, mt3.ID} 68 mtx, err := mtDB.ReadMultiTransactions(details) 69 require.NoError(t, err) 70 require.Len(t, mtx, 3) 71 require.True(t, areMultiTransactionsEqual(&mt1, mtx[0])) 72 require.True(t, areMultiTransactionsEqual(&mt2, mtx[1])) 73 require.True(t, areMultiTransactionsEqual(&mt3, mtx[2])) 74 } 75 76 func TestUpdateMultiTransaction(t *testing.T) { 77 mtDB, cleanup := setupTestMultiTransactionDB(t) 78 defer cleanup() 79 80 // Create test multi transaction 81 tr := generateTestTransfer(0) 82 multiTransaction := GenerateTestSendMultiTransaction(tr) 83 84 err := mtDB.CreateMultiTransaction(&multiTransaction) 85 require.NoError(t, err) 86 87 // Update the multi transaction 88 multiTransaction.FromNetworkID = 1 89 multiTransaction.FromTxHash = common.Hash{1} 90 multiTransaction.FromAddress = common.Address{2} 91 multiTransaction.FromAsset = "fromAsset1" 92 multiTransaction.FromAmount = (*hexutil.Big)(big.NewInt(234)) 93 multiTransaction.ToNetworkID = 2 94 multiTransaction.ToTxHash = common.Hash{3} 95 multiTransaction.ToAddress = common.Address{4} 96 multiTransaction.ToAsset = "toAsset1" 97 multiTransaction.ToAmount = (*hexutil.Big)(big.NewInt(345)) 98 multiTransaction.Type = MultiTransactionBridge 99 multiTransaction.CrossTxID = "crossTxD2" 100 101 err = mtDB.UpdateMultiTransaction(&multiTransaction) 102 require.NoError(t, err) 103 104 // Read the updated multi transaction 105 details := NewMultiTxDetails() 106 details.IDs = []wallet_common.MultiTransactionIDType{multiTransaction.ID} 107 mtx, err := mtDB.ReadMultiTransactions(details) 108 require.NoError(t, err) 109 require.Len(t, mtx, 1) 110 require.True(t, areMultiTransactionsEqual(&multiTransaction, mtx[0])) 111 } 112 113 func TestDeleteMultiTransaction(t *testing.T) { 114 mtDB, cleanup := setupTestMultiTransactionDB(t) 115 defer cleanup() 116 117 // Create test multi transaction 118 tr := generateTestTransfer(0) 119 multiTransaction := GenerateTestSendMultiTransaction(tr) 120 121 err := mtDB.CreateMultiTransaction(&multiTransaction) 122 require.NoError(t, err) 123 124 // Delete the multi transaction 125 err = mtDB.DeleteMultiTransaction(multiTransaction.ID) 126 require.NoError(t, err) 127 128 // Read the deleted multi transaction 129 mtx, err := mtDB.ReadMultiTransactions(&MultiTxDetails{ 130 IDs: []wallet_common.MultiTransactionIDType{multiTransaction.ID}}) 131 require.NoError(t, err) 132 require.Len(t, mtx, 0) 133 }