github.com/Finschia/finschia-sdk@v0.49.1/x/gov/keeper/deposit_test.go (about) 1 package keeper_test 2 3 import ( 4 "testing" 5 "time" 6 7 "github.com/stretchr/testify/require" 8 tmproto "github.com/tendermint/tendermint/proto/tendermint/types" 9 10 "github.com/Finschia/finschia-sdk/simapp" 11 sdk "github.com/Finschia/finschia-sdk/types" 12 ) 13 14 func TestDeposits(t *testing.T) { 15 app := simapp.Setup(false) 16 ctx := app.BaseApp.NewContext(false, tmproto.Header{}) 17 18 TestAddrs := simapp.AddTestAddrsIncremental(app, ctx, 2, sdk.NewInt(10000000)) 19 20 tp := TestProposal 21 proposal, err := app.GovKeeper.SubmitProposal(ctx, tp) 22 require.NoError(t, err) 23 proposalID := proposal.ProposalId 24 25 fourStake := sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, app.StakingKeeper.TokensFromConsensusPower(ctx, 4))) 26 fiveStake := sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, app.StakingKeeper.TokensFromConsensusPower(ctx, 5))) 27 28 addr0Initial := app.BankKeeper.GetAllBalances(ctx, TestAddrs[0]) 29 addr1Initial := app.BankKeeper.GetAllBalances(ctx, TestAddrs[1]) 30 31 require.True(t, proposal.TotalDeposit.Equal(sdk.NewCoins())) 32 33 // Check no deposits at beginning 34 _, found := app.GovKeeper.GetDeposit(ctx, proposalID, TestAddrs[1]) 35 require.False(t, found) 36 proposal, ok := app.GovKeeper.GetProposal(ctx, proposalID) 37 require.True(t, ok) 38 require.True(t, proposal.VotingStartTime.Equal(time.Time{})) 39 40 // Check first deposit 41 votingStarted, err := app.GovKeeper.AddDeposit(ctx, proposalID, TestAddrs[0], fourStake) 42 require.NoError(t, err) 43 require.False(t, votingStarted) 44 deposit, found := app.GovKeeper.GetDeposit(ctx, proposalID, TestAddrs[0]) 45 require.True(t, found) 46 require.Equal(t, fourStake, deposit.Amount) 47 require.Equal(t, TestAddrs[0].String(), deposit.Depositor) 48 proposal, ok = app.GovKeeper.GetProposal(ctx, proposalID) 49 require.True(t, ok) 50 require.Equal(t, fourStake, proposal.TotalDeposit) 51 require.Equal(t, addr0Initial.Sub(fourStake), app.BankKeeper.GetAllBalances(ctx, TestAddrs[0])) 52 53 // Check a second deposit from same address 54 votingStarted, err = app.GovKeeper.AddDeposit(ctx, proposalID, TestAddrs[0], fiveStake) 55 require.NoError(t, err) 56 require.False(t, votingStarted) 57 deposit, found = app.GovKeeper.GetDeposit(ctx, proposalID, TestAddrs[0]) 58 require.True(t, found) 59 require.Equal(t, fourStake.Add(fiveStake...), deposit.Amount) 60 require.Equal(t, TestAddrs[0].String(), deposit.Depositor) 61 proposal, ok = app.GovKeeper.GetProposal(ctx, proposalID) 62 require.True(t, ok) 63 require.Equal(t, fourStake.Add(fiveStake...), proposal.TotalDeposit) 64 require.Equal(t, addr0Initial.Sub(fourStake).Sub(fiveStake), app.BankKeeper.GetAllBalances(ctx, TestAddrs[0])) 65 66 // Check third deposit from a new address 67 votingStarted, err = app.GovKeeper.AddDeposit(ctx, proposalID, TestAddrs[1], fourStake) 68 require.NoError(t, err) 69 require.True(t, votingStarted) 70 deposit, found = app.GovKeeper.GetDeposit(ctx, proposalID, TestAddrs[1]) 71 require.True(t, found) 72 require.Equal(t, TestAddrs[1].String(), deposit.Depositor) 73 require.Equal(t, fourStake, deposit.Amount) 74 proposal, ok = app.GovKeeper.GetProposal(ctx, proposalID) 75 require.True(t, ok) 76 require.Equal(t, fourStake.Add(fiveStake...).Add(fourStake...), proposal.TotalDeposit) 77 require.Equal(t, addr1Initial.Sub(fourStake), app.BankKeeper.GetAllBalances(ctx, TestAddrs[1])) 78 79 // Check that proposal moved to voting period 80 proposal, ok = app.GovKeeper.GetProposal(ctx, proposalID) 81 require.True(t, ok) 82 require.True(t, proposal.VotingStartTime.Equal(ctx.BlockHeader().Time)) 83 84 // Test deposit iterator 85 // NOTE order of deposits is determined by the addresses 86 deposits := app.GovKeeper.GetAllDeposits(ctx) 87 require.Len(t, deposits, 2) 88 require.Equal(t, deposits, app.GovKeeper.GetDeposits(ctx, proposalID)) 89 require.Equal(t, TestAddrs[0].String(), deposits[0].Depositor) 90 require.Equal(t, fourStake.Add(fiveStake...), deposits[0].Amount) 91 require.Equal(t, TestAddrs[1].String(), deposits[1].Depositor) 92 require.Equal(t, fourStake, deposits[1].Amount) 93 94 // Test Refund Deposits 95 deposit, found = app.GovKeeper.GetDeposit(ctx, proposalID, TestAddrs[1]) 96 require.True(t, found) 97 require.Equal(t, fourStake, deposit.Amount) 98 app.GovKeeper.RefundDeposits(ctx, proposalID) 99 _, found = app.GovKeeper.GetDeposit(ctx, proposalID, TestAddrs[1]) 100 require.False(t, found) 101 require.Equal(t, addr0Initial, app.BankKeeper.GetAllBalances(ctx, TestAddrs[0])) 102 require.Equal(t, addr1Initial, app.BankKeeper.GetAllBalances(ctx, TestAddrs[1])) 103 104 // Test delete deposits 105 _, err = app.GovKeeper.AddDeposit(ctx, proposalID, TestAddrs[0], fourStake) 106 require.NoError(t, err) 107 app.GovKeeper.DeleteDeposits(ctx, proposalID) 108 deposits = app.GovKeeper.GetDeposits(ctx, proposalID) 109 require.Len(t, deposits, 0) 110 }