github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/gov/handler_test.go (about) 1 package gov 2 3 import ( 4 "testing" 5 6 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 7 "github.com/fibonacci-chain/fbc/libs/tendermint/libs/cli/flags" 8 "github.com/fibonacci-chain/fbc/x/staking" 9 "github.com/stretchr/testify/require" 10 11 "github.com/fibonacci-chain/fbc/x/gov/keeper" 12 "github.com/fibonacci-chain/fbc/x/gov/types" 13 ) 14 15 func TestNewHandler(t *testing.T) { 16 ctx, _, gk, _, _ := keeper.CreateTestInput(t, false, 1000) 17 govHandler := NewHandler(gk) 18 19 _, err := govHandler(ctx, sdk.NewTestMsg()) 20 require.NotNil(t, err) 21 } 22 23 func TestHandleMsgDeposit(t *testing.T) { 24 ctx, _, gk, _, _ := keeper.CreateTestInput(t, false, 1000) 25 govHandler := NewHandler(gk) 26 27 initialDeposit := sdk.SysCoins{sdk.NewInt64DecCoin(sdk.DefaultBondDenom, 50)} 28 content := types.NewTextProposal("Test", "description") 29 newProposalMsg := NewMsgSubmitProposal(content, initialDeposit, keeper.Addrs[0]) 30 res, err := govHandler(ctx, newProposalMsg) 31 require.Nil(t, err) 32 var proposalID uint64 33 gk.Cdc().MustUnmarshalBinaryLengthPrefixed(res.Data, &proposalID) 34 35 newDepositMsg := NewMsgDeposit(keeper.Addrs[0], proposalID, 36 sdk.SysCoins{sdk.NewInt64DecCoin(sdk.DefaultBondDenom, 100)}) 37 res, err = govHandler(ctx, newDepositMsg) 38 require.Nil(t, err) 39 40 // nil address deposit on proposal 41 newDepositMsg = NewMsgDeposit(sdk.AccAddress{}, proposalID, 42 sdk.SysCoins{sdk.NewInt64DecCoin(sdk.DefaultBondDenom, 1000)}) 43 res, err = govHandler(ctx, newDepositMsg) 44 require.NotNil(t, err) 45 46 // deposit on proposal whose proposal id is 0 47 newDepositMsg = NewMsgDeposit(keeper.Addrs[0], 0, 48 sdk.SysCoins{sdk.NewInt64DecCoin(sdk.DefaultBondDenom, 1000)}) 49 res, err = govHandler(ctx, newDepositMsg) 50 require.NotNil(t, err) 51 } 52 53 func TestHandleMsgVote(t *testing.T) { 54 ctx, _, gk, _, _ := keeper.CreateTestInput(t, false, 1000) 55 govHandler := NewHandler(gk) 56 57 proposalCoins := sdk.SysCoins{sdk.NewInt64DecCoin(sdk.DefaultBondDenom, 500)} 58 content := types.NewTextProposal("Test", "description") 59 newProposalMsg := NewMsgSubmitProposal(content, proposalCoins, keeper.Addrs[0]) 60 res, err := govHandler(ctx, newProposalMsg) 61 require.Nil(t, err) 62 var proposalID uint64 63 gk.Cdc().MustUnmarshalBinaryLengthPrefixed(res.Data, &proposalID) 64 65 newVoteMsg := NewMsgVote(keeper.Addrs[4], proposalID, types.OptionYes) 66 res, err = govHandler(ctx, newVoteMsg) 67 require.Nil(t, err) 68 69 newVoteMsg = NewMsgVote(keeper.Addrs[4], 0, types.OptionYes) 70 res, err = govHandler(ctx, newVoteMsg) 71 require.NotNil(t, err) 72 73 newVoteMsg = NewMsgVote(sdk.AccAddress{}, proposalID, types.OptionYes) 74 res, err = govHandler(ctx, newVoteMsg) 75 require.NotNil(t, err) 76 } 77 78 func TestHandleMsgVote2(t *testing.T) { 79 ctx, _, gk, sk, _ := keeper.CreateTestInput(t, false, 100000) 80 govHandler := NewHandler(gk) 81 82 proposalCoins := sdk.SysCoins{sdk.NewInt64DecCoin(sdk.DefaultBondDenom, 500)} 83 content := types.NewTextProposal("Test", "description") 84 newProposalMsg := NewMsgSubmitProposal(content, proposalCoins, keeper.Addrs[0]) 85 res, err := govHandler(ctx, newProposalMsg) 86 require.Nil(t, err) 87 var proposalID uint64 88 gk.Cdc().MustUnmarshalBinaryLengthPrefixed(res.Data, &proposalID) 89 90 ctx.SetBlockHeight(int64(sk.GetEpoch(ctx))) 91 skHandler := staking.NewHandler(sk) 92 valAddrs := make([]sdk.ValAddress, len(keeper.Addrs[:2])) 93 for i, addr := range keeper.Addrs[:2] { 94 valAddrs[i] = sdk.ValAddress(addr) 95 } 96 keeper.CreateValidators(t, skHandler, ctx, valAddrs, []int64{10, 10}) 97 staking.EndBlocker(ctx, sk) 98 99 newVoteMsg := NewMsgVote(keeper.Addrs[0], proposalID, types.OptionYes) 100 res, err = govHandler(ctx, newVoteMsg) 101 require.Nil(t, err) 102 103 newVoteMsg = NewMsgVote(keeper.Addrs[1], proposalID, types.OptionYes) 104 res, err = govHandler(ctx, newVoteMsg) 105 require.Nil(t, err) 106 } 107 108 // test distribute deposits after voting 109 func TestHandleMsgVote3(t *testing.T) { 110 ctx, _, gk, sk, _ := keeper.CreateTestInput(t, false, 100000) 111 govHandler := NewHandler(gk) 112 113 proposalCoins := sdk.SysCoins{sdk.NewInt64DecCoin(sdk.DefaultBondDenom, 500)} 114 content := types.NewTextProposal("Test", "description") 115 newProposalMsg := NewMsgSubmitProposal(content, proposalCoins, keeper.Addrs[0]) 116 res, err := govHandler(ctx, newProposalMsg) 117 require.Nil(t, err) 118 var proposalID uint64 119 gk.Cdc().MustUnmarshalBinaryLengthPrefixed(res.Data, &proposalID) 120 121 ctx.SetBlockHeight(int64(sk.GetEpoch(ctx))) 122 skHandler := staking.NewHandler(sk) 123 valAddrs := make([]sdk.ValAddress, len(keeper.Addrs[:2])) 124 for i, addr := range keeper.Addrs[:2] { 125 valAddrs[i] = sdk.ValAddress(addr) 126 } 127 keeper.CreateValidators(t, skHandler, ctx, valAddrs, []int64{10, 10}) 128 staking.EndBlocker(ctx, sk) 129 130 require.Equal(t, proposalCoins, gk.SupplyKeeper(). 131 GetModuleAccount(ctx, types.ModuleName).GetCoins()) 132 newVoteMsg := NewMsgVote(keeper.Addrs[0], proposalID, types.OptionNoWithVeto) 133 res, err = govHandler(ctx, newVoteMsg) 134 require.Nil(t, err) 135 require.Equal(t, sdk.Coins(nil), gk.SupplyKeeper().GetModuleAccount(ctx, types.ModuleName).GetCoins()) 136 } 137 138 func TestHandleMsgSubmitProposal(t *testing.T) { 139 ctx, _, gk, _, _ := keeper.CreateTestInput(t, false, 1000) 140 log, err := flags.ParseLogLevel("*:error", ctx.Logger(), "error") 141 require.Nil(t, err) 142 ctx.SetLogger(log) 143 handler := NewHandler(gk) 144 145 proposalCoins := sdk.SysCoins{sdk.NewInt64DecCoin("xxx", 500)} 146 content := types.NewTextProposal("Test", "description") 147 newProposalMsg := NewMsgSubmitProposal(content, proposalCoins, keeper.Addrs[0]) 148 _, err = handler(ctx, newProposalMsg) 149 require.NotNil(t, err) 150 151 proposalCoins = sdk.SysCoins{sdk.NewInt64DecCoin(sdk.DefaultBondDenom, 500)} 152 content = types.NewTextProposal("Test", "description") 153 newProposalMsg = NewMsgSubmitProposal(content, proposalCoins, sdk.AccAddress{}) 154 _, err = handler(ctx, newProposalMsg) 155 require.NotNil(t, err) 156 157 //content = tokenTypes.NewDexListProposal("Test", "", keeper.Addrs[0], 158 // "btc-123", common.NativeToken, sdk.NewDec(1000), 0, 159 // 4, 4, sdk.NewDec(1)) 160 //newProposalMsg = NewMsgSubmitProposal(content, proposalCoins, keeper.Addrs[0]) 161 //res = handler(ctx, newProposalMsg) 162 //require.NotNil(t, err) 163 }