From b1f31c6a909f180623501ef717f9228f3cabafcb Mon Sep 17 00:00:00 2001 From: AntiD2ta Date: Thu, 14 Nov 2019 18:28:07 -0500 Subject: [PATCH] [test] refs #136 - Add tests for LocalWallet of account.go Tests: - LocalWallet::ScanUnspentOutputs - LocalWallet::ListTransactions --- src/coin/skycoin/models/account_test.go | 76 ++++++++++++++++++++ src/coin/skycoin/models/skyapi_mock_test.go | 78 +++++++++++++++++++++ 2 files changed, 154 insertions(+) diff --git a/src/coin/skycoin/models/account_test.go b/src/coin/skycoin/models/account_test.go index f7ea5a1b..8747017c 100644 --- a/src/coin/skycoin/models/account_test.go +++ b/src/coin/skycoin/models/account_test.go @@ -322,3 +322,79 @@ func TestRemoteWalletListTransactions(t *testing.T) { } require.Equal(t, 1, items) } + +func TestLocalWalletScanUnspentOutputs(t *testing.T) { + CleanGlobalMock() + + global_mock.On("Wallet", "test.wlt").Return( + &api.WalletResponse{ + Meta: readable.WalletMeta{ + Coin: "Sky", + Filename: "FiberCrypto", + Label: "test.wlt", + Encrypted: true, + }, + Entries: []readable.WalletEntry{ + readable.WalletEntry{Address: "addr"}, + }, + }, + nil) + + addresses := []string{ + "2HPiZkMTD2pB9FZ6HbCxFSXa1FGeNkLeEbP", + "7wqRjpVwg5uSsz72oAZcDrBevHQRHQudyj", + "2G9wDPX14WsbZuZU1f7MveYc9vpLxj2qNsz", + "6gnBM5gMSSb7XRUEap7q3WxFnuvbN9usTq", + } + + mockSkyApiOutputsForAddresses(global_mock, addresses) + + wlt := &LocalWallet{WalletDir: "./testdata", Id: "test.wlt"} + + iter := wlt.ScanUnspentOutputs() + items := 0 + for iter.Next() { + to := iter.Value() + items++ + require.Equal(t, "2HPiZkMTD2pB9FZ6HbCxFSXa1FGeNkLeEbP", to.GetAddress().String()) + } + require.Equal(t, 8, items) +} + +func TestLocalWalletListTransactions(t *testing.T) { + CleanGlobalMock() + + global_mock.On("Wallet", "test.wlt").Return( + &api.WalletResponse{ + Meta: readable.WalletMeta{ + Coin: "Sky", + Filename: "FiberCrypto", + Label: "test.wlt", + Encrypted: true, + }, + Entries: []readable.WalletEntry{ + readable.WalletEntry{Address: "addr"}, + }, + }, + nil) + + addresses := []string{ + "2HPiZkMTD2pB9FZ6HbCxFSXa1FGeNkLeEbP", + "7wqRjpVwg5uSsz72oAZcDrBevHQRHQudyj", + "2G9wDPX14WsbZuZU1f7MveYc9vpLxj2qNsz", + "6gnBM5gMSSb7XRUEap7q3WxFnuvbN9usTq", + } + + mockSkyApiTransactionsVerbose(global_mock, addresses) + + wlt := &LocalWallet{WalletDir: "./testdata", Id: "test.wlt"} + + iter := wlt.ListTransactions() + items := 0 + for iter.Next() { + tx := iter.Value() + items++ + require.Equal(t, "hash1", tx.GetId()) + } + require.Equal(t, 4, items) +} diff --git a/src/coin/skycoin/models/skyapi_mock_test.go b/src/coin/skycoin/models/skyapi_mock_test.go index dfa7966a..d1eb210a 100644 --- a/src/coin/skycoin/models/skyapi_mock_test.go +++ b/src/coin/skycoin/models/skyapi_mock_test.go @@ -66,3 +66,81 @@ func mockSkyApiCreateTransaction(mock *SkycoinApiMock, req *api.CreateTransactio crtTxn, nil) } + +func mockSkyApiOutputsForAddresses(mock *SkycoinApiMock, addresses []string) { + usOut := readable.UnspentOutput{ + Hash: "hash1", + Coins: "42", + Hours: uint64(42), + CalculatedHours: uint64(42), + Address: "2HPiZkMTD2pB9FZ6HbCxFSXa1FGeNkLeEbP", + } + response := &readable.UnspentOutputsSummary{ + HeadOutputs: readable.UnspentOutputs{usOut, usOut}, + } + + global_mock.On( + "OutputsForAddresses", + []string{ + "6gnBM5gMSSb7XRUEap7q3WxFnuvbN9usTq", + }, + ).Return(response, nil) + + global_mock.On( + "OutputsForAddresses", + []string{ + "2HPiZkMTD2pB9FZ6HbCxFSXa1FGeNkLeEbP", + }, + ).Return(response, nil) + + global_mock.On( + "OutputsForAddresses", + []string{ + "7wqRjpVwg5uSsz72oAZcDrBevHQRHQudyj", + }, + ).Return(response, nil) + + global_mock.On( + "OutputsForAddresses", + []string{ + "2G9wDPX14WsbZuZU1f7MveYc9vpLxj2qNsz", + }, + ).Return(response, nil) +} + +func mockSkyApiTransactionsVerbose(mock *SkycoinApiMock, addresses []string) { + response := readable.TransactionWithStatusVerbose{ + Status: readable.TransactionStatus{ + Confirmed: false, + }, + } + response.Transaction.Hash = "hash1" + + global_mock.On("TransactionsVerbose", []string{"2HPiZkMTD2pB9FZ6HbCxFSXa1FGeNkLeEbP"}).Return( + []readable.TransactionWithStatusVerbose{ + response, + }, + nil, + ) + + global_mock.On("TransactionsVerbose", []string{"7wqRjpVwg5uSsz72oAZcDrBevHQRHQudyj"}).Return( + []readable.TransactionWithStatusVerbose{ + response, + }, + nil, + ) + + global_mock.On("TransactionsVerbose", []string{"2G9wDPX14WsbZuZU1f7MveYc9vpLxj2qNsz"}).Return( + []readable.TransactionWithStatusVerbose{ + response, + }, + nil, + ) + + global_mock.On("TransactionsVerbose", []string{"6gnBM5gMSSb7XRUEap7q3WxFnuvbN9usTq"}).Return( + []readable.TransactionWithStatusVerbose{ + response, + }, + nil, + ) +}