github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/gov/keeper/deposit_test.go (about) 1 package keeper 2 3 import ( 4 "testing" 5 6 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 7 "github.com/stretchr/testify/require" 8 9 "github.com/fibonacci-chain/fbc/x/gov/types" 10 "github.com/fibonacci-chain/fbc/x/params" 11 paramsTypes "github.com/fibonacci-chain/fbc/x/params/types" 12 ) 13 14 func TestKeeper_AddDeposit(t *testing.T) { 15 ctx, _, keeper, _, _ := CreateTestInput(t, false, 1000) 16 17 // deposit on proposal which is not exist 18 err := keeper.AddDeposit(ctx, 0, Addrs[0], 19 sdk.SysCoins{sdk.NewInt64DecCoin(sdk.DefaultBondDenom, 40)}, "") 20 require.NotNil(t, err) 21 22 content := types.NewTextProposal("Test", "description") 23 proposal, err := keeper.SubmitProposal(ctx, content) 24 require.Nil(t, err) 25 proposalID := proposal.ProposalID 26 27 // nil address deposit 28 err = keeper.AddDeposit(ctx, proposalID, sdk.AccAddress{}, 29 sdk.SysCoins{sdk.NewInt64DecCoin(sdk.DefaultBondDenom, 40)}, "") 30 require.NotNil(t, err) 31 32 // deposit on proposal whose status is not DepositPeriod 33 proposal.Status = types.StatusPassed 34 keeper.SetProposal(ctx, proposal) 35 err = keeper.AddDeposit(ctx, proposalID, Addrs[0], 36 sdk.SysCoins{sdk.NewInt64DecCoin(sdk.DefaultBondDenom, 40)}, "") 37 require.NotNil(t, err) 38 39 proposal.Status = types.StatusDepositPeriod 40 keeper.SetProposal(ctx, proposal) 41 err = keeper.AddDeposit(ctx, proposalID, Addrs[0], 42 sdk.SysCoins{sdk.NewInt64DecCoin(sdk.DefaultBondDenom, 40)}, "") 43 require.Nil(t, err) 44 45 // change old deposit and activate proposal 46 err = keeper.AddDeposit(ctx, proposalID, Addrs[0], 47 sdk.SysCoins{sdk.NewInt64DecCoin(sdk.DefaultBondDenom, 100)}, "") 48 require.Nil(t, err) 49 50 // deposit on proposal which registered proposal handler router 51 paramsChanges := []params.ParamChange{{Subspace: "staking", Key: "MaxValidators", Value: "105"}} 52 content = paramsTypes.NewParameterChangeProposal("Test", "", paramsChanges, 1) 53 proposal, err = keeper.SubmitProposal(ctx, content) 54 require.Nil(t, err) 55 proposalID = proposal.ProposalID 56 err = keeper.AddDeposit(ctx, proposalID, Addrs[0], 57 sdk.SysCoins{sdk.NewInt64DecCoin(sdk.DefaultBondDenom, 100)}, "") 58 require.Nil(t, err) 59 } 60 61 func TestKeeper_GetDeposit(t *testing.T) { 62 ctx, _, keeper, _, _ := CreateTestInput(t, false, 1000) 63 64 content := types.NewTextProposal("Test", "description") 65 proposal, err := keeper.SubmitProposal(ctx, content) 66 require.Nil(t, err) 67 proposalID := proposal.ProposalID 68 69 err = keeper.AddDeposit(ctx, proposalID, Addrs[0], 70 sdk.SysCoins{sdk.NewInt64DecCoin(sdk.DefaultBondDenom, 40)}, "") 71 require.Nil(t, err) 72 73 expectedDeposit := types.Deposit{ 74 ProposalID: proposalID, 75 Depositor: Addrs[0], 76 Amount: sdk.SysCoins{sdk.NewInt64DecCoin(sdk.DefaultBondDenom, 40)}, 77 } 78 deposit, found := keeper.GetDeposit(ctx, proposalID, Addrs[0]) 79 require.True(t, found) 80 require.True(t, deposit.Equals(expectedDeposit)) 81 82 // get deposit from db 83 deposit, found = keeper.GetDeposit(ctx, proposalID, Addrs[0]) 84 require.True(t, found) 85 require.True(t, deposit.Equals(expectedDeposit)) 86 } 87 88 func TestKeeper_GetDeposits(t *testing.T) { 89 ctx, _, keeper, _, _ := CreateTestInput(t, false, 1000) 90 91 content := types.NewTextProposal("Test", "description") 92 proposal, err := keeper.SubmitProposal(ctx, content) 93 require.Nil(t, err) 94 proposalID := proposal.ProposalID 95 96 err = keeper.AddDeposit(ctx, proposalID, Addrs[0], 97 sdk.SysCoins{sdk.NewInt64DecCoin(sdk.DefaultBondDenom, 40)}, "") 98 require.Nil(t, err) 99 100 err = keeper.AddDeposit(ctx, proposalID, Addrs[1], 101 sdk.SysCoins{sdk.NewInt64DecCoin(sdk.DefaultBondDenom, 40)}, "") 102 require.Nil(t, err) 103 104 expectedDeposits := types.Deposits{ 105 { 106 ProposalID: proposalID, 107 Depositor: Addrs[0], 108 Amount: sdk.SysCoins{sdk.NewInt64DecCoin(sdk.DefaultBondDenom, 40)}, 109 }, 110 { 111 ProposalID: proposalID, 112 Depositor: Addrs[1], 113 Amount: sdk.SysCoins{sdk.NewInt64DecCoin(sdk.DefaultBondDenom, 40)}, 114 }, 115 } 116 deposits := keeper.GetDeposits(ctx, proposalID) 117 require.Equal(t, expectedDeposits, deposits) 118 119 // get deposits from db 120 deposits = keeper.GetDeposits(ctx, proposalID) 121 require.Equal(t, expectedDeposits, deposits) 122 } 123 124 func TestKeeper_DistributeDeposits(t *testing.T) { 125 ctx, _, keeper, _, _ := CreateTestInput(t, false, 1000) 126 127 content := types.NewTextProposal("Test", "description") 128 proposal, err := keeper.SubmitProposal(ctx, content) 129 require.Nil(t, err) 130 proposalID := proposal.ProposalID 131 132 amount1 := sdk.SysCoins{sdk.NewInt64DecCoin(sdk.DefaultBondDenom, 40)} 133 err = keeper.AddDeposit(ctx, proposalID, Addrs[0], amount1, "") 134 require.Nil(t, err) 135 136 amount2 := sdk.SysCoins{sdk.NewInt64DecCoin(sdk.DefaultBondDenom, 40)} 137 err = keeper.AddDeposit(ctx, proposalID, Addrs[1], amount2, "") 138 require.Nil(t, err) 139 140 moduleAccBalance := keeper.SupplyKeeper().GetModuleAccount(ctx, types.ModuleName).GetCoins() 141 require.Equal(t, amount1.Add(amount2...), moduleAccBalance) 142 143 // after DistributeDeposits 144 keeper.DistributeDeposits(ctx, proposalID) 145 moduleAccBalance = keeper.SupplyKeeper().GetModuleAccount(ctx, types.ModuleName).GetCoins() 146 require.Equal(t, sdk.Coins(nil), moduleAccBalance) 147 feeCollectorBalance := keeper.SupplyKeeper().GetModuleAccount(ctx, keeper.feeCollectorName).GetCoins() 148 require.Equal(t, amount1.Add(amount2...), feeCollectorBalance) 149 } 150 151 func TestKeeper_RefundDeposits(t *testing.T) { 152 ctx, accKeeper, keeper, _, _ := CreateTestInput(t, false, 1000) 153 amount := accKeeper.GetAccount(ctx, Addrs[0]).GetCoins().AmountOf(sdk.DefaultBondDenom) 154 155 content := types.NewTextProposal("Test", "description") 156 proposal, err := keeper.SubmitProposal(ctx, content) 157 require.Nil(t, err) 158 proposalID := proposal.ProposalID 159 160 amount1 := sdk.SysCoins{sdk.NewInt64DecCoin(sdk.DefaultBondDenom, 40)} 161 err = keeper.AddDeposit(ctx, proposalID, Addrs[0], amount1, "") 162 require.Nil(t, err) 163 164 amount2 := sdk.SysCoins{sdk.NewInt64DecCoin(sdk.DefaultBondDenom, 40)} 165 err = keeper.AddDeposit(ctx, proposalID, Addrs[1], amount2, "") 166 require.Nil(t, err) 167 168 moduleAccBalance := keeper.SupplyKeeper().GetModuleAccount(ctx, types.ModuleName).GetCoins() 169 require.Equal(t, amount1.Add(amount2...), moduleAccBalance) 170 171 // after RefundDeposits 172 keeper.RefundDeposits(ctx, proposalID) 173 moduleAccBalance = keeper.SupplyKeeper().GetModuleAccount(ctx, types.ModuleName).GetCoins() 174 require.Equal(t, sdk.Coins(nil), moduleAccBalance) 175 176 require.Equal(t, amount, sdk.NewDec(1000)) 177 178 require.Equal(t, accKeeper.GetAccount(ctx, Addrs[1]).GetCoins(), 179 sdk.SysCoins{sdk.NewInt64DecCoin(sdk.DefaultBondDenom, 1000)}) 180 181 // refund panic 182 content = types.NewTextProposal("Test", "description") 183 proposal, err = keeper.SubmitProposal(ctx, content) 184 require.Nil(t, err) 185 proposalID = proposal.ProposalID 186 187 amount1 = sdk.SysCoins{sdk.NewInt64DecCoin(sdk.DefaultBondDenom, 40)} 188 err = keeper.AddDeposit(ctx, proposalID, Addrs[0], amount1, "") 189 require.Nil(t, err) 190 191 err = keeper.SupplyKeeper().SendCoinsFromModuleToModule(ctx, types.ModuleName, keeper.feeCollectorName, 192 amount1) 193 require.Nil(t, err) 194 require.Panics(t, func() { 195 keeper.RefundDeposits(ctx, proposalID) 196 }) 197 }