github.com/Finschia/finschia-sdk@v0.48.1/x/params/proposal_handler_test.go (about)

     1  package params_test
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/suite"
     7  	tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
     8  
     9  	"github.com/Finschia/finschia-sdk/simapp"
    10  	sdk "github.com/Finschia/finschia-sdk/types"
    11  	govtypes "github.com/Finschia/finschia-sdk/x/gov/types"
    12  	"github.com/Finschia/finschia-sdk/x/params"
    13  	"github.com/Finschia/finschia-sdk/x/params/types/proposal"
    14  	stakingtypes "github.com/Finschia/finschia-sdk/x/staking/types"
    15  )
    16  
    17  type HandlerTestSuite struct {
    18  	suite.Suite
    19  
    20  	app        *simapp.SimApp
    21  	ctx        sdk.Context
    22  	govHandler govtypes.Handler
    23  }
    24  
    25  func (suite *HandlerTestSuite) SetupTest() {
    26  	suite.app = simapp.Setup(false)
    27  	suite.ctx = suite.app.BaseApp.NewContext(false, tmproto.Header{})
    28  	suite.govHandler = params.NewParamChangeProposalHandler(suite.app.ParamsKeeper)
    29  }
    30  
    31  func TestHandlerTestSuite(t *testing.T) {
    32  	suite.Run(t, new(HandlerTestSuite))
    33  }
    34  
    35  func testProposal(changes ...proposal.ParamChange) *proposal.ParameterChangeProposal {
    36  	return proposal.NewParameterChangeProposal("title", "description", changes)
    37  }
    38  
    39  func (suite *HandlerTestSuite) TestProposalHandler() {
    40  	testCases := []struct {
    41  		name     string
    42  		proposal *proposal.ParameterChangeProposal
    43  		onHandle func()
    44  		expErr   bool
    45  	}{
    46  		{
    47  			"all fields",
    48  			testProposal(proposal.NewParamChange(stakingtypes.ModuleName, string(stakingtypes.KeyMaxValidators), "1")),
    49  			func() {
    50  				maxVals := suite.app.StakingKeeper.MaxValidators(suite.ctx)
    51  				suite.Require().Equal(uint32(1), maxVals)
    52  			},
    53  			false,
    54  		},
    55  		{
    56  			"invalid type",
    57  			testProposal(proposal.NewParamChange(stakingtypes.ModuleName, string(stakingtypes.KeyMaxValidators), "-")),
    58  			func() {},
    59  			true,
    60  		},
    61  		{
    62  			"omit empty fields",
    63  			testProposal(proposal.ParamChange{
    64  				Subspace: govtypes.ModuleName,
    65  				Key:      string(govtypes.ParamStoreKeyDepositParams),
    66  				Value:    `{"min_deposit": [{"denom": "uatom","amount": "64000000"}]}`,
    67  			}),
    68  			func() {
    69  				depositParams := suite.app.GovKeeper.GetDepositParams(suite.ctx)
    70  				suite.Require().Equal(govtypes.DepositParams{
    71  					MinDeposit:       sdk.NewCoins(sdk.NewCoin("uatom", sdk.NewInt(64000000))),
    72  					MaxDepositPeriod: govtypes.DefaultPeriod,
    73  				}, depositParams)
    74  			},
    75  			false,
    76  		},
    77  	}
    78  
    79  	for _, tc := range testCases {
    80  		tc := tc
    81  		suite.Run(tc.name, func() {
    82  			err := suite.govHandler(suite.ctx, tc.proposal)
    83  			if tc.expErr {
    84  				suite.Require().Error(err)
    85  			} else {
    86  				suite.Require().NoError(err)
    87  				tc.onHandle()
    88  			}
    89  		})
    90  	}
    91  }