github.com/Finschia/finschia-sdk@v0.48.1/x/staking/types/commission_test.go (about) 1 package types_test 2 3 import ( 4 "testing" 5 "time" 6 7 "github.com/stretchr/testify/require" 8 9 sdk "github.com/Finschia/finschia-sdk/types" 10 "github.com/Finschia/finschia-sdk/x/staking/types" 11 ) 12 13 func TestCommissionValidate(t *testing.T) { 14 testCases := []struct { 15 input types.Commission 16 expectErr bool 17 }{ 18 // invalid commission; max rate < 0% 19 {types.NewCommission(sdk.ZeroDec(), sdk.MustNewDecFromStr("-1.00"), sdk.ZeroDec()), true}, 20 // invalid commission; max rate > 100% 21 {types.NewCommission(sdk.ZeroDec(), sdk.MustNewDecFromStr("2.00"), sdk.ZeroDec()), true}, 22 // invalid commission; rate < 0% 23 {types.NewCommission(sdk.MustNewDecFromStr("-1.00"), sdk.ZeroDec(), sdk.ZeroDec()), true}, 24 // invalid commission; rate > max rate 25 {types.NewCommission(sdk.MustNewDecFromStr("0.75"), sdk.MustNewDecFromStr("0.50"), sdk.ZeroDec()), true}, 26 // invalid commission; max change rate < 0% 27 {types.NewCommission(sdk.OneDec(), sdk.OneDec(), sdk.MustNewDecFromStr("-1.00")), true}, 28 // invalid commission; max change rate > max rate 29 {types.NewCommission(sdk.OneDec(), sdk.MustNewDecFromStr("0.75"), sdk.MustNewDecFromStr("0.90")), true}, 30 // valid commission 31 {types.NewCommission(sdk.MustNewDecFromStr("0.20"), sdk.OneDec(), sdk.MustNewDecFromStr("0.10")), false}, 32 } 33 34 for i, tc := range testCases { 35 err := tc.input.Validate() 36 require.Equal(t, tc.expectErr, err != nil, "unexpected result; tc #%d, input: %v", i, tc.input) 37 } 38 } 39 40 func TestCommissionValidateNewRate(t *testing.T) { 41 now := time.Now().UTC() 42 c1 := types.NewCommission(sdk.MustNewDecFromStr("0.40"), sdk.MustNewDecFromStr("0.80"), sdk.MustNewDecFromStr("0.10")) 43 c1.UpdateTime = now 44 45 testCases := []struct { 46 input types.Commission 47 newRate sdk.Dec 48 blockTime time.Time 49 expectErr bool 50 }{ 51 // invalid new commission rate; last update < 24h ago 52 {c1, sdk.MustNewDecFromStr("0.50"), now, true}, 53 // invalid new commission rate; new rate < 0% 54 {c1, sdk.MustNewDecFromStr("-1.00"), now.Add(48 * time.Hour), true}, 55 // invalid new commission rate; new rate > max rate 56 {c1, sdk.MustNewDecFromStr("0.90"), now.Add(48 * time.Hour), true}, 57 // invalid new commission rate; new rate > max change rate 58 {c1, sdk.MustNewDecFromStr("0.60"), now.Add(48 * time.Hour), true}, 59 // valid commission 60 {c1, sdk.MustNewDecFromStr("0.50"), now.Add(48 * time.Hour), false}, 61 // valid commission 62 {c1, sdk.MustNewDecFromStr("0.10"), now.Add(48 * time.Hour), false}, 63 } 64 65 for i, tc := range testCases { 66 err := tc.input.ValidateNewRate(tc.newRate, tc.blockTime) 67 require.Equal( 68 t, tc.expectErr, err != nil, 69 "unexpected result; tc #%d, input: %v, newRate: %s, blockTime: %s", 70 i, tc.input, tc.newRate, tc.blockTime, 71 ) 72 } 73 }