github.com/Finschia/finschia-sdk@v0.48.1/x/gov/client/testutil/deposits.go (about) 1 package testutil 2 3 import ( 4 "fmt" 5 "time" 6 7 "github.com/stretchr/testify/suite" 8 9 ostcli "github.com/Finschia/ostracon/libs/cli" 10 11 clitestutil "github.com/Finschia/finschia-sdk/testutil/cli" 12 "github.com/Finschia/finschia-sdk/testutil/network" 13 sdk "github.com/Finschia/finschia-sdk/types" 14 "github.com/Finschia/finschia-sdk/x/gov/client/cli" 15 "github.com/Finschia/finschia-sdk/x/gov/types" 16 ) 17 18 type DepositTestSuite struct { 19 suite.Suite 20 21 cfg network.Config 22 network *network.Network 23 fees string 24 } 25 26 func NewDepositTestSuite(cfg network.Config) *DepositTestSuite { 27 return &DepositTestSuite{cfg: cfg} 28 } 29 30 func (s *DepositTestSuite) SetupSuite() { 31 s.T().Log("setting up test suite") 32 33 s.network = network.New(s.T(), s.cfg) 34 35 _, err := s.network.WaitForHeight(1) 36 s.Require().NoError(err) 37 s.fees = sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(20))).String() 38 } 39 40 func (s *DepositTestSuite) TearDownSuite() { 41 s.T().Log("tearing down test suite") 42 s.network.Cleanup() 43 } 44 45 func (s *DepositTestSuite) TestQueryDepositsInitialDeposit() { 46 val := s.network.Validators[0] 47 clientCtx := val.ClientCtx 48 initialDeposit := sdk.NewCoin(s.cfg.BondDenom, types.DefaultMinDepositTokens.Sub(sdk.NewInt(20))).String() 49 50 // create a proposal with deposit 51 _, err := MsgSubmitProposal(val.ClientCtx, val.Address.String(), 52 "Text Proposal 1", "Where is the title!?", types.ProposalTypeText, 53 fmt.Sprintf("--%s=%s", cli.FlagDeposit, initialDeposit)) 54 s.Require().NoError(err) 55 56 // deposit more amount 57 _, err = MsgDeposit(clientCtx, val.Address.String(), "1", sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(50)).String()) 58 s.Require().NoError(err) 59 60 // waiting for voting period to end 61 time.Sleep(20 * time.Second) 62 63 // query deposit & verify initial deposit 64 deposit := s.queryDeposit(val, "1", false) 65 s.Require().Equal(deposit.Amount.String(), initialDeposit) 66 67 // query deposits 68 deposits := s.queryDeposits(val, "1", false) 69 s.Require().Equal(len(deposits), 2) 70 // verify initial deposit 71 s.Require().Equal(deposits[0].Amount.String(), initialDeposit) 72 } 73 74 func (s *DepositTestSuite) TestQueryDepositsWithoutInitialDeposit() { 75 val := s.network.Validators[0] 76 clientCtx := val.ClientCtx 77 78 // create a proposal without deposit 79 _, err := MsgSubmitProposal(val.ClientCtx, val.Address.String(), 80 "Text Proposal 2", "Where is the title!?", types.ProposalTypeText) 81 s.Require().NoError(err) 82 83 // deposit amount 84 _, err = MsgDeposit(clientCtx, val.Address.String(), "2", sdk.NewCoin(s.cfg.BondDenom, types.DefaultMinDepositTokens.Add(sdk.NewInt(50))).String()) 85 s.Require().NoError(err) 86 87 // waiting for voting period to end 88 time.Sleep(20 * time.Second) 89 90 // query deposit 91 deposit := s.queryDeposit(val, "2", false) 92 s.Require().Equal(deposit.Amount.String(), sdk.NewCoin(s.cfg.BondDenom, types.DefaultMinDepositTokens.Add(sdk.NewInt(50))).String()) 93 94 // query deposits 95 deposits := s.queryDeposits(val, "2", false) 96 s.Require().Equal(len(deposits), 1) 97 // verify initial deposit 98 s.Require().Equal(deposits[0].Amount.String(), sdk.NewCoin(s.cfg.BondDenom, types.DefaultMinDepositTokens.Add(sdk.NewInt(50))).String()) 99 } 100 101 func (s *DepositTestSuite) TestQueryProposalNotEnoughDeposits() { 102 val := s.network.Validators[0] 103 clientCtx := val.ClientCtx 104 initialDeposit := sdk.NewCoin(s.cfg.BondDenom, types.DefaultMinDepositTokens.Sub(sdk.NewInt(2000))).String() 105 106 // create a proposal with deposit 107 _, err := MsgSubmitProposal(val.ClientCtx, val.Address.String(), 108 "Text Proposal 3", "Where is the title!?", types.ProposalTypeText, 109 fmt.Sprintf("--%s=%s", cli.FlagDeposit, initialDeposit)) 110 s.Require().NoError(err) 111 112 // query proposal 113 args := []string{"3", fmt.Sprintf("--%s=json", ostcli.OutputFlag)} 114 cmd := cli.GetCmdQueryProposal() 115 _, err = clitestutil.ExecTestCLICmd(clientCtx, cmd, args) 116 s.Require().NoError(err) 117 118 // waiting for deposit period to end 119 time.Sleep(20 * time.Second) 120 121 // query proposal 122 _, err = clitestutil.ExecTestCLICmd(clientCtx, cmd, args) 123 s.Require().Error(err) 124 s.Require().Contains(err.Error(), "proposal 3 doesn't exist") 125 } 126 127 func (s *DepositTestSuite) TestRejectedProposalDeposits() { 128 val := s.network.Validators[0] 129 clientCtx := val.ClientCtx 130 initialDeposit := sdk.NewCoin(s.cfg.BondDenom, types.DefaultMinDepositTokens) 131 132 // create a proposal with deposit 133 _, err := MsgSubmitProposal(clientCtx, val.Address.String(), 134 "Text Proposal 4", "Where is the title!?", types.ProposalTypeText, 135 fmt.Sprintf("--%s=%s", cli.FlagDeposit, initialDeposit)) 136 s.Require().NoError(err) 137 138 // query deposits 139 var deposits types.QueryDepositsResponse 140 args := []string{"4", fmt.Sprintf("--%s=json", ostcli.OutputFlag)} 141 cmd := cli.GetCmdQueryDeposits() 142 out, err := clitestutil.ExecTestCLICmd(val.ClientCtx, cmd, args) 143 s.Require().NoError(err) 144 s.Require().NoError(val.ClientCtx.LegacyAmino.UnmarshalJSON(out.Bytes(), &deposits)) 145 s.Require().Equal(len(deposits.Deposits), 1) 146 // verify initial deposit 147 s.Require().Equal(deposits.Deposits[0].Amount.String(), sdk.NewCoin(s.cfg.BondDenom, types.DefaultMinDepositTokens).String()) 148 149 // vote 150 _, err = MsgVote(clientCtx, val.Address.String(), "4", "no") 151 s.Require().NoError(err) 152 153 time.Sleep(20 * time.Second) 154 155 args = []string{"4", fmt.Sprintf("--%s=json", ostcli.OutputFlag)} 156 cmd = cli.GetCmdQueryProposal() 157 _, err = clitestutil.ExecTestCLICmd(clientCtx, cmd, args) 158 s.Require().NoError(err) 159 160 // query deposits 161 depositsRes := s.queryDeposits(val, "4", false) 162 s.Require().Equal(len(depositsRes), 1) 163 // verify initial deposit 164 s.Require().Equal(depositsRes[0].Amount.String(), initialDeposit.String()) 165 } 166 167 func (s *DepositTestSuite) queryDeposits(val *network.Validator, proposalID string, exceptErr bool) types.Deposits { 168 args := []string{proposalID, fmt.Sprintf("--%s=json", ostcli.OutputFlag)} 169 var depositsRes types.Deposits 170 cmd := cli.GetCmdQueryDeposits() 171 out, err := clitestutil.ExecTestCLICmd(val.ClientCtx, cmd, args) 172 if exceptErr { 173 s.Require().Error(err) 174 return nil 175 } 176 s.Require().NoError(err) 177 s.Require().NoError(val.ClientCtx.LegacyAmino.UnmarshalJSON(out.Bytes(), &depositsRes)) 178 return depositsRes 179 } 180 181 func (s *DepositTestSuite) queryDeposit(val *network.Validator, proposalID string, exceptErr bool) *types.Deposit { 182 args := []string{proposalID, val.Address.String(), fmt.Sprintf("--%s=json", ostcli.OutputFlag)} 183 var depositRes types.Deposit 184 cmd := cli.GetCmdQueryDeposit() 185 out, err := clitestutil.ExecTestCLICmd(val.ClientCtx, cmd, args) 186 if exceptErr { 187 s.Require().Error(err) 188 return nil 189 } 190 s.Require().NoError(err) 191 s.Require().NoError(val.ClientCtx.LegacyAmino.UnmarshalJSON(out.Bytes(), &depositRes)) 192 return &depositRes 193 }