cosmos-sdk/x/bank/types/params_test.go

115 lines
3.6 KiB
Go

package types
import (
"testing"
"github.com/stretchr/testify/require"
sdk "github.com/cosmos/cosmos-sdk/types"
)
func Test_validateSendEnabledParam(t *testing.T) {
type args struct {
i interface{}
}
tests := []struct {
name string
args args
wantErr bool
}{
{"invalid type", args{sdk.NewCoin(sdk.DefaultBondDenom, sdk.OneInt())}, true},
{"invalid empty denom send enabled", args{*NewSendEnabled("", true)}, true},
{"invalid empty denom send disabled", args{*NewSendEnabled("", false)}, true},
{"valid denom send enabled", args{*NewSendEnabled(sdk.DefaultBondDenom, true)}, false},
{"valid denom send disabled", args{*NewSendEnabled(sdk.DefaultBondDenom, false)}, false},
{"invalid denom send enabled", args{*NewSendEnabled("0FOO", true)}, true},
{"invalid denom send disabled", args{*NewSendEnabled("0FOO", false)}, true},
}
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
require.Equal(t, tt.wantErr, validateSendEnabled(tt.args.i) != nil)
})
}
}
func Test_sendParamEqual(t *testing.T) {
paramsA := NewSendEnabled(sdk.DefaultBondDenom, true)
paramsB := NewSendEnabled(sdk.DefaultBondDenom, true)
paramsC := NewSendEnabled("foodenom", false)
ok := paramsA.Equal(paramsB)
require.True(t, ok)
ok = paramsA.Equal(paramsC)
require.False(t, ok)
}
func Test_sendParamString(t *testing.T) {
paramString := "denom: foo\nenabled: false\n"
param := NewSendEnabled("foo", false)
require.Equal(t, paramString, param.String())
}
func Test_validateParams(t *testing.T) {
params := DefaultParams()
// default params have no error
require.NoError(t, params.Validate())
// default case is all denoms are enabled for sending
require.True(t, params.SendEnabledDenom(sdk.DefaultBondDenom))
require.True(t, params.SendEnabledDenom("foodenom"))
params.DefaultSendEnabled = false
params = params.SetSendEnabledParam("foodenom", true)
require.NoError(t, validateSendEnabledParams(params.SendEnabled))
require.True(t, params.SendEnabledDenom("foodenom"))
require.False(t, params.SendEnabledDenom(sdk.DefaultBondDenom))
params.DefaultSendEnabled = true
params = params.SetSendEnabledParam("foodenom", false)
require.NoError(t, validateSendEnabledParams(params.SendEnabled))
require.False(t, params.SendEnabledDenom("foodenom"))
require.True(t, params.SendEnabledDenom(sdk.DefaultBondDenom))
params = params.SetSendEnabledParam("foodenom", true)
require.True(t, params.SendEnabledDenom("foodenom"))
params = params.SetSendEnabledParam("foodenom", false)
require.False(t, params.SendEnabledDenom("foodenom"))
require.True(t, params.SendEnabledDenom("foodenom2"))
params = params.SetSendEnabledParam("foodenom2", false)
require.True(t, params.SendEnabledDenom(""))
require.True(t, params.SendEnabledDenom(sdk.DefaultBondDenom))
require.False(t, params.SendEnabledDenom("foodenom2"))
paramYaml := "default_send_enabled: true\nsend_enabled:\n- denom: foodenom\n- denom: foodenom2\n"
require.Equal(t, paramYaml, params.String())
// Ensure proper format of yaml output when false
params.DefaultSendEnabled = false
paramYaml = "send_enabled:\n- denom: foodenom\n- denom: foodenom2\n"
require.Equal(t, paramYaml, params.String())
params = NewParams(true, SendEnabledParams{
NewSendEnabled("foodenom", false),
NewSendEnabled("foodenom", true), // this is not allowed
})
// fails due to duplicate entries.
require.Error(t, params.Validate())
// fails due to invalid type
require.Error(t, validateSendEnabledParams(NewSendEnabled("foodenom", true)))
require.Error(t, validateSendEnabledParams(SendEnabledParams{NewSendEnabled("INVALIDDENOM", true)}))
}