github.com/KiraCore/sekai@v0.3.43/x/tokens/client/cli/cli_test.go (about) 1 package cli_test 2 3 import ( 4 "fmt" 5 "testing" 6 7 customgovcli "github.com/KiraCore/sekai/x/gov/client/cli" 8 govtypes "github.com/KiraCore/sekai/x/gov/types" 9 sdk "github.com/cosmos/cosmos-sdk/types" 10 11 dbm "github.com/cometbft/cometbft-db" 12 "github.com/stretchr/testify/suite" 13 14 "github.com/cosmos/cosmos-sdk/baseapp" 15 servertypes "github.com/cosmos/cosmos-sdk/server/types" 16 17 "github.com/KiraCore/sekai/app" 18 simapp "github.com/KiraCore/sekai/app" 19 appparams "github.com/KiraCore/sekai/app/params" 20 "github.com/KiraCore/sekai/testutil/network" 21 "github.com/KiraCore/sekai/x/tokens/client/cli" 22 tokenstypes "github.com/KiraCore/sekai/x/tokens/types" 23 "github.com/cosmos/cosmos-sdk/client/flags" 24 pruningtypes "github.com/cosmos/cosmos-sdk/store/pruning/types" 25 clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli" 26 ) 27 28 type IntegrationTestSuite struct { 29 suite.Suite 30 31 cfg network.Config 32 network *network.Network 33 } 34 35 func (s *IntegrationTestSuite) SetupSuite() { 36 appparams.SetConfig() 37 s.T().Log("setting up integration test suite") 38 39 cfg := network.DefaultConfig() 40 encodingConfig := simapp.MakeEncodingConfig() 41 cfg.Codec = encodingConfig.Marshaler 42 cfg.TxConfig = encodingConfig.TxConfig 43 44 cfg.NumValidators = 1 45 46 cfg.AppConstructor = func(val network.Validator, chainId string) servertypes.Application { 47 return app.NewInitApp( 48 val.Ctx.Logger, dbm.NewMemDB(), nil, true, make(map[int64]bool), val.Ctx.Config.RootDir, 0, 49 simapp.MakeEncodingConfig(), 50 simapp.EmptyAppOptions{}, 51 baseapp.SetPruning(pruningtypes.NewPruningOptionsFromString(val.AppConfig.Pruning)), 52 baseapp.SetMinGasPrices(val.AppConfig.MinGasPrices), 53 baseapp.SetChainID(chainId), 54 ) 55 } 56 57 s.cfg = cfg 58 s.network = network.New(s.T(), cfg) 59 60 _, err := s.network.WaitForHeight(1) 61 s.Require().NoError(err) 62 } 63 64 func (s *IntegrationTestSuite) TearDownSuite() { 65 s.T().Log("tearing down integration test suite") 66 s.network.Cleanup() 67 } 68 69 func (s *IntegrationTestSuite) TestUpsertTokenAliasAndQuery() { 70 val := s.network.Validators[0] 71 clientCtx := val.ClientCtx 72 73 s.WhitelistPermissions(val.Address, govtypes.PermUpsertTokenAlias) 74 75 cmd := cli.GetTxUpsertTokenAliasCmd() 76 _, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, []string{ 77 fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()), 78 fmt.Sprintf("--%s=%s", cli.FlagSymbol, "ETH"), 79 fmt.Sprintf("--%s=%s", cli.FlagName, "Ethereum"), 80 fmt.Sprintf("--%s=%s", cli.FlagIcon, "myiconurl"), 81 fmt.Sprintf("--%s=%d", cli.FlagDecimals, 6), 82 fmt.Sprintf("--%s=%s", cli.FlagDenoms, "finney"), 83 fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), 84 fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), 85 fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.DefaultDenom, sdk.NewInt(100))).String()), 86 }) 87 s.Require().NoError(err) 88 89 height, err := s.network.LatestHeight() 90 s.Require().NoError(err) 91 92 _, err = s.network.WaitForHeight(height + 2) 93 s.Require().NoError(err) 94 95 cmd = cli.GetCmdQueryTokenAlias() 96 out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, []string{"ETH"}) 97 s.Require().NoError(err) 98 99 var tokenAlias tokenstypes.TokenAlias 100 clientCtx.Codec.MustUnmarshalJSON(out.Bytes(), &tokenAlias) 101 102 s.Require().Equal(tokenAlias.Symbol, "ETH") 103 s.Require().Equal(tokenAlias.Name, "Ethereum") 104 s.Require().Equal(tokenAlias.Icon, "myiconurl") 105 s.Require().Equal(tokenAlias.Decimals, uint32(6)) 106 s.Require().Equal(tokenAlias.Denoms, []string{"finney"}) 107 } 108 109 func (s *IntegrationTestSuite) TestUpsertTokenRateAndQuery() { 110 val := s.network.Validators[0] 111 clientCtx := val.ClientCtx 112 113 s.WhitelistPermissions(val.Address, govtypes.PermUpsertTokenRate) 114 115 cmd := cli.GetTxUpsertTokenRateCmd() 116 _, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, []string{ 117 fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()), 118 fmt.Sprintf("--%s=%s", cli.FlagDenom, "ubtc"), 119 fmt.Sprintf("--%s=%f", cli.FlagRate, 0.00001), 120 fmt.Sprintf("--%s=%s", cli.FlagFeePayments, "true"), 121 fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), 122 fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), 123 fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.DefaultDenom, sdk.NewInt(100))).String()), 124 }) 125 s.Require().NoError(err) 126 127 height, err := s.network.LatestHeight() 128 s.Require().NoError(err) 129 130 _, err = s.network.WaitForHeight(height + 2) 131 s.Require().NoError(err) 132 133 cmd = cli.GetCmdQueryTokenRate() 134 _, err = clitestutil.ExecTestCLICmd(clientCtx, cmd, []string{"ubtc"}) 135 s.Require().NoError(err) 136 137 } 138 139 func (s *IntegrationTestSuite) TestGetCmdQueryTokenBlackWhites() { 140 val := s.network.Validators[0] 141 clientCtx := val.ClientCtx 142 143 cmd := cli.GetCmdQueryTokenBlackWhites() 144 out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, []string{}) 145 s.Require().NoError(err) 146 147 var blackWhites tokenstypes.TokenBlackWhitesResponse 148 clientCtx.Codec.MustUnmarshalJSON(out.Bytes(), &blackWhites) 149 150 s.Require().Equal(blackWhites.Data.Blacklisted, []string{"frozen"}) 151 s.Require().Equal(blackWhites.Data.Whitelisted, []string{"ukex"}) 152 } 153 154 func (s IntegrationTestSuite) TestCreateProposalUpsertTokenRates() { 155 // Query permissions for role Validator 156 val := s.network.Validators[0] 157 clientCtx := val.ClientCtx 158 159 cmd := cli.GetTxProposalUpsertTokenRatesCmd() 160 out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, []string{ 161 fmt.Sprintf("--%s=%s", cli.FlagDenom, "ubtc"), 162 fmt.Sprintf("--%s=%f", cli.FlagRate, 0.00001), 163 fmt.Sprintf("--%s=%s", cli.FlagTitle, "title"), 164 fmt.Sprintf("--%s=%s", cli.FlagDescription, "some desc"), 165 fmt.Sprintf("--%s=%s", cli.FlagFeePayments, "true"), 166 fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()), 167 fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), 168 fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), 169 fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.DefaultDenom, sdk.NewInt(100))).String()), 170 }) 171 s.Require().NoError(err) 172 fmt.Printf("%s", out.String()) 173 174 // Vote Proposal 175 cmd = customgovcli.GetTxVoteProposal() 176 out, err = clitestutil.ExecTestCLICmd(clientCtx, cmd, []string{ 177 fmt.Sprintf("%d", 1), // Proposal ID 178 fmt.Sprintf("%d", govtypes.OptionYes), 179 fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()), 180 fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), 181 fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), 182 fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.DefaultDenom, sdk.NewInt(100))).String()), 183 }) 184 s.Require().NoError(err) 185 fmt.Printf("%s", out.String()) 186 } 187 188 func (s IntegrationTestSuite) TestCreateProposalUpsertTokenAlias() { 189 // Query permissions for role Validator 190 val := s.network.Validators[0] 191 clientCtx := val.ClientCtx 192 193 cmd := cli.GetTxProposalUpsertTokenAliasCmd() 194 out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, []string{ 195 fmt.Sprintf("--%s=%s", cli.FlagSymbol, "ETH"), 196 fmt.Sprintf("--%s=%s", cli.FlagName, "Ethereum"), 197 fmt.Sprintf("--%s=%s", cli.FlagTitle, "title"), 198 fmt.Sprintf("--%s=%s", cli.FlagDescription, "some desc"), 199 fmt.Sprintf("--%s=%s", cli.FlagIcon, "myiconurl"), 200 fmt.Sprintf("--%s=%d", cli.FlagDecimals, 6), 201 fmt.Sprintf("--%s=%s", cli.FlagDenoms, "finney"), 202 fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()), 203 fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), 204 fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), 205 fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.DefaultDenom, sdk.NewInt(100))).String()), 206 }) 207 s.Require().NoError(err) 208 fmt.Printf("%s", out.String()) 209 210 // Vote Proposal 211 out.Reset() 212 cmd = customgovcli.GetTxVoteProposal() 213 out, err = clitestutil.ExecTestCLICmd(clientCtx, cmd, []string{ 214 fmt.Sprintf("%d", 1), // Proposal ID 215 fmt.Sprintf("%d", govtypes.OptionYes), 216 fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()), 217 fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), 218 fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), 219 fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.DefaultDenom, sdk.NewInt(100))).String()), 220 }) 221 s.Require().NoError(err) 222 fmt.Printf("%s", out.String()) 223 } 224 225 func (s IntegrationTestSuite) TestTxProposalTokensBlackWhiteChangeCmd() { 226 // Query permissions for role Validator 227 val := s.network.Validators[0] 228 clientCtx := val.ClientCtx 229 230 cmd := cli.GetTxProposalTokensBlackWhiteChangeCmd() 231 out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, []string{ 232 fmt.Sprintf("--%s=true", cli.FlagIsBlacklist), 233 fmt.Sprintf("--%s=true", cli.FlagIsAdd), 234 fmt.Sprintf("--%s=%s", cli.FlagTitle, "title"), 235 fmt.Sprintf("--%s=%s", cli.FlagDescription, "some desc"), 236 fmt.Sprintf("--%s=frozen1", cli.FlagTokens), 237 fmt.Sprintf("--%s=frozen2", cli.FlagTokens), 238 fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()), 239 fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), 240 fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), 241 fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.DefaultDenom, sdk.NewInt(100))).String()), 242 }) 243 244 s.Require().NoError(err) 245 fmt.Printf("%s", out.String()) 246 247 // Vote Proposal 248 out.Reset() 249 cmd = customgovcli.GetTxVoteProposal() 250 out, err = clitestutil.ExecTestCLICmd(clientCtx, cmd, []string{ 251 fmt.Sprintf("%d", 1), // Proposal ID 252 fmt.Sprintf("%d", govtypes.OptionYes), 253 fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()), 254 fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), 255 fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), 256 fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.DefaultDenom, sdk.NewInt(100))).String()), 257 }) 258 s.Require().NoError(err) 259 fmt.Printf("%s", out.String()) 260 } 261 262 func (s *IntegrationTestSuite) TestGetCmdQueryAllTokenAliases() { 263 val := s.network.Validators[0] 264 clientCtx := val.ClientCtx 265 266 cmd := cli.GetCmdQueryAllTokenAliases() 267 out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, []string{}) 268 s.Require().NoError(err) 269 270 var resp tokenstypes.AllTokenAliasesResponse 271 clientCtx.Codec.MustUnmarshalJSON(out.Bytes(), &resp) 272 273 s.Require().Greater(len(resp.Data), 0) 274 } 275 276 func (s *IntegrationTestSuite) TestGetCmdQueryTokenAliasesByDenom() { 277 val := s.network.Validators[0] 278 clientCtx := val.ClientCtx 279 280 cmd := cli.GetCmdQueryTokenAliasesByDenom() 281 out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, []string{"ukex", "mkex"}) 282 s.Require().NoError(err) 283 284 var resp tokenstypes.TokenAliasesByDenomResponse 285 clientCtx.Codec.MustUnmarshalJSON(out.Bytes(), &resp) 286 287 s.Require().Greater(len(resp.Data), 0) 288 } 289 290 func (s *IntegrationTestSuite) TestGetCmdQueryAllTokenRates() { 291 val := s.network.Validators[0] 292 clientCtx := val.ClientCtx 293 294 cmd := cli.GetCmdQueryAllTokenRates() 295 out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, []string{}) 296 s.Require().NoError(err) 297 298 var resp tokenstypes.AllTokenRatesResponse 299 clientCtx.Codec.MustUnmarshalJSON(out.Bytes(), &resp) 300 301 s.Require().Greater(len(resp.Data), 0) 302 } 303 304 func (s *IntegrationTestSuite) TestGetCmdQueryTokenRatesByDenom() { 305 val := s.network.Validators[0] 306 clientCtx := val.ClientCtx 307 308 cmd := cli.GetCmdQueryTokenRatesByDenom() 309 out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, []string{"ukex"}) 310 s.Require().NoError(err) 311 312 var resp tokenstypes.TokenRatesByDenomResponse 313 clientCtx.Codec.MustUnmarshalJSON(out.Bytes(), &resp) 314 315 s.Require().Greater(len(resp.Data), 0) 316 } 317 318 func TestIntegrationTestSuite(t *testing.T) { 319 suite.Run(t, new(IntegrationTestSuite)) 320 }