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