package types import ( "testing" "github.com/stretchr/testify/require" sdk "github.com/cosmos/cosmos-sdk/types" ) func TestGenesisStateValidate(t *testing.T) { testCases := []struct { name string genesisState GenesisState expErr bool }{ { "valid genesisState", GenesisState{ Params: DefaultParams(), Balances: []Balance{ { Address: "cosmos1yq8lgssgxlx9smjhes6ryjasmqmd3ts2559g0t", Coins: sdk.Coins{sdk.NewInt64Coin("uatom", 1)}, }, }, Supply: sdk.Coins{sdk.NewInt64Coin("uatom", 1)}, DenomMetadata: []Metadata{ { Name: "Cosmos Hub Atom", Symbol: "ATOM", Description: "The native staking token of the Cosmos Hub.", DenomUnits: []*DenomUnit{ {"uatom", uint32(0), []string{"microatom"}}, {"matom", uint32(3), []string{"milliatom"}}, {"atom", uint32(6), nil}, }, Base: "uatom", Display: "atom", }, }, }, false, }, {"empty genesisState", GenesisState{}, false}, { "invalid params ", GenesisState{ Params: Params{ SendEnabled: []*SendEnabled{ {"", true}, }, }, }, true, }, { "dup balances", GenesisState{ Balances: []Balance{ { Address: "cosmos1yq8lgssgxlx9smjhes6ryjasmqmd3ts2559g0t", Coins: sdk.Coins{sdk.NewInt64Coin("uatom", 1)}, }, { Address: "cosmos1yq8lgssgxlx9smjhes6ryjasmqmd3ts2559g0t", Coins: sdk.Coins{sdk.NewInt64Coin("uatom", 1)}, }, }, }, true, }, { "0 balance", GenesisState{ Balances: []Balance{ { Address: "cosmos1yq8lgssgxlx9smjhes6ryjasmqmd3ts2559g0t", }, }, }, false, }, { "dup Metadata", GenesisState{ DenomMetadata: []Metadata{ { Name: "Cosmos Hub Atom", Symbol: "ATOM", Description: "The native staking token of the Cosmos Hub.", DenomUnits: []*DenomUnit{ {"uatom", uint32(0), []string{"microatom"}}, {"matom", uint32(3), []string{"milliatom"}}, {"atom", uint32(6), nil}, }, Base: "uatom", Display: "atom", }, { Name: "Cosmos Hub Atom", Symbol: "ATOM", Description: "The native staking token of the Cosmos Hub.", DenomUnits: []*DenomUnit{ {"uatom", uint32(0), []string{"microatom"}}, {"matom", uint32(3), []string{"milliatom"}}, {"atom", uint32(6), nil}, }, Base: "uatom", Display: "atom", }, }, }, true, }, { "invalid Metadata", GenesisState{ DenomMetadata: []Metadata{ { Name: "Cosmos Hub Atom", Symbol: "ATOM", Description: "The native staking token of the Cosmos Hub.", DenomUnits: []*DenomUnit{ {"uatom", uint32(0), []string{"microatom"}}, {"matom", uint32(3), []string{"milliatom"}}, {"atom", uint32(6), nil}, }, Base: "", Display: "", }, }, }, true, }, { "invalid supply", GenesisState{ Supply: sdk.Coins{sdk.Coin{Denom: "", Amount: sdk.OneInt()}}, }, true, }, } for _, tc := range testCases { tc := tc t.Run(tc.name, func(t *testing.T) { err := tc.genesisState.Validate() if tc.expErr { require.Error(t, err) } else { require.NoError(t, err) } }) } }