github.com/Finschia/finschia-sdk@v0.49.1/x/fbridge/keeper/params_test.go (about)

     1  package keeper
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/require"
     7  
     8  	"github.com/Finschia/finschia-sdk/x/fbridge/testutil"
     9  	"github.com/Finschia/finschia-sdk/x/fbridge/types"
    10  )
    11  
    12  func TestSetParams(t *testing.T) {
    13  	key, memKey, ctx, encCfg, authKeeper, bankKeeper, _ := testutil.PrepareFbridgeTest(t, 0)
    14  	keeper := NewKeeper(encCfg.Codec, key, memKey, authKeeper, bankKeeper, types.DefaultAuthority().String())
    15  
    16  	tcs := map[string]struct {
    17  		malleate func() types.Params
    18  		isErr    bool
    19  	}{
    20  		"invalid guardian trust level": {
    21  			malleate: func() types.Params {
    22  				params := types.Params{}
    23  				params.GuardianTrustLevel = types.Fraction{Numerator: 4, Denominator: 3}
    24  				return params
    25  			},
    26  			isErr: true,
    27  		},
    28  		"invalid operator trust level": {
    29  			malleate: func() types.Params {
    30  				params := types.Params{}
    31  				params.GuardianTrustLevel = types.Fraction{Numerator: 2, Denominator: 3}
    32  				params.OperatorTrustLevel = types.Fraction{Numerator: 4, Denominator: 3}
    33  				return params
    34  			},
    35  			isErr: true,
    36  		},
    37  		"invalid judge trust level": {
    38  			malleate: func() types.Params {
    39  				params := types.Params{}
    40  				params.GuardianTrustLevel = types.Fraction{Numerator: 2, Denominator: 3}
    41  				params.OperatorTrustLevel = types.Fraction{Numerator: 2, Denominator: 3}
    42  				params.JudgeTrustLevel = types.Fraction{Numerator: 4, Denominator: 3}
    43  				return params
    44  			},
    45  			isErr: true,
    46  		},
    47  		"invalid proposal period": {
    48  			malleate: func() types.Params {
    49  				params := types.Params{}
    50  				params.GuardianTrustLevel = types.Fraction{Numerator: 2, Denominator: 3}
    51  				params.OperatorTrustLevel = types.Fraction{Numerator: 2, Denominator: 3}
    52  				params.JudgeTrustLevel = types.Fraction{Numerator: 2, Denominator: 3}
    53  				params.ProposalPeriod = 0
    54  				return params
    55  			},
    56  			isErr: true,
    57  		},
    58  		"invalid timelock period": {
    59  			malleate: func() types.Params {
    60  				params := types.Params{}
    61  				params.GuardianTrustLevel = types.Fraction{Numerator: 2, Denominator: 3}
    62  				params.OperatorTrustLevel = types.Fraction{Numerator: 2, Denominator: 3}
    63  				params.JudgeTrustLevel = types.Fraction{Numerator: 2, Denominator: 3}
    64  				params.ProposalPeriod = 10
    65  				params.TimelockPeriod = 0
    66  				return params
    67  			},
    68  			isErr: true,
    69  		},
    70  		"invalid target denom": {
    71  			malleate: func() types.Params {
    72  				params := types.Params{}
    73  				params.GuardianTrustLevel = types.Fraction{Numerator: 2, Denominator: 3}
    74  				params.OperatorTrustLevel = types.Fraction{Numerator: 2, Denominator: 3}
    75  				params.JudgeTrustLevel = types.Fraction{Numerator: 2, Denominator: 3}
    76  				params.ProposalPeriod = 10
    77  				params.TimelockPeriod = 20
    78  				params.TargetDenom = ""
    79  				return params
    80  			},
    81  			isErr: true,
    82  		},
    83  		"missing some fields": {
    84  			malleate: func() types.Params {
    85  				params := types.Params{}
    86  				params.GuardianTrustLevel = types.Fraction{Numerator: 2, Denominator: 3}
    87  				params.OperatorTrustLevel = types.Fraction{Numerator: 2, Denominator: 3}
    88  				params.JudgeTrustLevel = types.Fraction{Numerator: 2, Denominator: 3}
    89  				params.TimelockPeriod = 20
    90  				return params
    91  			},
    92  			isErr: true,
    93  		},
    94  		"valid": {
    95  			malleate: func() types.Params {
    96  				params := types.Params{}
    97  				params.GuardianTrustLevel = types.Fraction{Numerator: 2, Denominator: 3}
    98  				params.OperatorTrustLevel = types.Fraction{Numerator: 2, Denominator: 3}
    99  				params.JudgeTrustLevel = types.Fraction{Numerator: 2, Denominator: 3}
   100  				params.ProposalPeriod = 10
   101  				params.TimelockPeriod = 20
   102  				params.TargetDenom = "stake"
   103  				return params
   104  			},
   105  			isErr: false,
   106  		},
   107  	}
   108  
   109  	for name, tc := range tcs {
   110  		t.Run(name, func(t *testing.T) {
   111  			params := tc.malleate()
   112  			if tc.isErr {
   113  				require.Error(t, keeper.SetParams(ctx, params))
   114  			} else {
   115  				require.NoError(t, keeper.SetParams(ctx, params))
   116  			}
   117  		})
   118  	}
   119  }