github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/cosmos-sdk/x/mint/proposal_handler_test.go (about) 1 package mint_test 2 3 import ( 4 "testing" 5 "time" 6 7 "github.com/fibonacci-chain/fbc/app" 8 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/codec" 9 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 10 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/mint" 11 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/mint/internal/types" 12 abci "github.com/fibonacci-chain/fbc/libs/tendermint/abci/types" 13 tmtypes "github.com/fibonacci-chain/fbc/libs/tendermint/types" 14 govtypes "github.com/fibonacci-chain/fbc/x/gov/types" 15 "github.com/stretchr/testify/suite" 16 ) 17 18 var ( 19 treasure1 = types.NewTreasure(sdk.AccAddress([]byte{0x01}), sdk.NewDecWithPrec(4, 2)) 20 treasure2 = types.NewTreasure(sdk.AccAddress([]byte{0x02}), sdk.NewDecWithPrec(3, 2)) 21 treasure3 = types.NewTreasure(sdk.AccAddress([]byte{0x03}), sdk.NewDecWithPrec(2, 2)) 22 treasure4 = types.NewTreasure(sdk.AccAddress([]byte{0x04}), sdk.NewDecWithPrec(1, 2)) 23 treasure5 = types.NewTreasure(sdk.AccAddress([]byte{0x05}), sdk.NewDecWithPrec(0, 2)) 24 treasures = []types.Treasure{*treasure1, *treasure2, *treasure3, *treasure4, *treasure5} 25 ) 26 27 type MintTestSuite struct { 28 suite.Suite 29 30 ctx sdk.Context 31 govHandler govtypes.Handler 32 querier sdk.Querier 33 app *app.FBChainApp 34 codec *codec.Codec 35 } 36 37 func (suite *MintTestSuite) SetupTest() { 38 checkTx := false 39 40 suite.app = app.Setup(checkTx) 41 suite.ctx = suite.app.BaseApp.NewContext(checkTx, abci.Header{Height: 1, ChainID: "ethermint-3", Time: time.Now().UTC()}) 42 43 suite.govHandler = mint.NewManageTreasuresProposalHandler(&suite.app.MintKeeper) 44 suite.querier = mint.NewQuerier(suite.app.MintKeeper) 45 suite.codec = codec.New() 46 } 47 48 func TestMintTestSuite(t *testing.T) { 49 suite.Run(t, new(MintTestSuite)) 50 } 51 52 func (suite *MintTestSuite) TestTreasuresProposal() { 53 proposal := types.NewManageTreasuresProposal( 54 "default title", 55 "default description", 56 treasures, 57 true, 58 ) 59 govProposal := govtypes.Proposal{ 60 Content: proposal, 61 } 62 passfunc := func(err error, trs []types.Treasure, msg string) { 63 suite.Require().NoError(err, msg) 64 } 65 treasuresError := func(err error, trs []types.Treasure, msg string) { 66 suite.Require().Error(err) 67 suite.Require().Contains(err.Error(), "treasure proportion should non-negative and less than one", msg) 68 } 69 sumProportionError := func(err error, trs []types.Treasure, msg string) { 70 suite.Require().Error(err) 71 suite.Require().Contains(err.Error(), "the sum of treasure proportion should non-negative and less than one", msg) 72 } 73 unexistError := func(err error, trs []types.Treasure, msg string) { 74 suite.Require().Error(err) 75 suite.Require().Contains(err.Error(), "because it's not exist from treasures", msg) 76 } 77 testCases := []struct { 78 msg string 79 expectfunc func(err error, trs []types.Treasure, msg string) 80 prepare func() 81 targetTreasures []types.Treasure 82 }{ 83 { 84 "add one into empty", 85 passfunc, 86 func() { 87 proposal.IsAdded = true 88 proposal.Treasures = []types.Treasure{treasures[0]} 89 }, 90 []types.Treasure{treasures[0]}, 91 }, 92 { 93 "add one into one", 94 passfunc, 95 func() { 96 proposal.IsAdded = true 97 proposal.Treasures = []types.Treasure{treasures[1]} 98 suite.app.MintKeeper.SetTreasures(suite.ctx, []types.Treasure{treasures[0]}) 99 100 }, 101 []types.Treasure{treasures[1], treasures[0]}, 102 }, 103 { 104 "add one into multi", 105 passfunc, 106 func() { 107 proposal.IsAdded = true 108 proposal.Treasures = []types.Treasure{treasures[1]} 109 suite.app.MintKeeper.SetTreasures(suite.ctx, []types.Treasure{treasures[0], treasures[2]}) 110 111 }, 112 []types.Treasure{treasures[2], treasures[1], treasures[0]}, 113 }, 114 { 115 "add multi into multi", 116 passfunc, 117 func() { 118 proposal.IsAdded = true 119 proposal.Treasures = []types.Treasure{treasures[1], treasures[3]} 120 suite.app.MintKeeper.SetTreasures(suite.ctx, []types.Treasure{treasures[0], treasures[2]}) 121 122 }, 123 []types.Treasure{treasures[3], treasures[2], treasures[1], treasures[0]}, 124 }, 125 { 126 "add multi into one", 127 passfunc, 128 func() { 129 proposal.IsAdded = true 130 proposal.Treasures = []types.Treasure{treasures[1], treasures[3]} 131 suite.app.MintKeeper.SetTreasures(suite.ctx, []types.Treasure{treasures[0]}) 132 133 }, 134 []types.Treasure{treasures[3], treasures[1], treasures[0]}, 135 }, 136 { 137 "update one into one", 138 passfunc, 139 func() { 140 proposal.IsAdded = true 141 proposal.Treasures = []types.Treasure{{Address: treasures[0].Address, Proportion: sdk.NewDecWithPrec(8, 2)}} 142 suite.app.MintKeeper.SetTreasures(suite.ctx, []types.Treasure{treasures[0]}) 143 }, 144 []types.Treasure{{Address: treasures[0].Address, Proportion: sdk.NewDecWithPrec(8, 2)}}, 145 }, 146 { 147 "update one into multi", 148 passfunc, 149 func() { 150 proposal.IsAdded = true 151 proposal.Treasures = []types.Treasure{{Address: treasures[0].Address, Proportion: sdk.NewDecWithPrec(8, 2)}} 152 suite.app.MintKeeper.SetTreasures(suite.ctx, []types.Treasure{treasures[0], treasures[2]}) 153 }, 154 []types.Treasure{treasures[2], {Address: treasures[0].Address, Proportion: sdk.NewDecWithPrec(8, 2)}}, 155 }, 156 { 157 "update multi into multi", 158 passfunc, 159 func() { 160 proposal.IsAdded = true 161 proposal.Treasures = []types.Treasure{{Address: treasures[0].Address, Proportion: sdk.NewDecWithPrec(8, 2)}, {Address: treasures[2].Address, Proportion: sdk.NewDecWithPrec(16, 2)}} 162 suite.app.MintKeeper.SetTreasures(suite.ctx, []types.Treasure{treasures[0], treasures[2]}) 163 }, 164 []types.Treasure{{Address: treasures[2].Address, Proportion: sdk.NewDecWithPrec(16, 2)}, {Address: treasures[0].Address, Proportion: sdk.NewDecWithPrec(8, 2)}}, 165 }, 166 { 167 "update/insert multi into multi", 168 passfunc, 169 func() { 170 proposal.IsAdded = true 171 proposal.Treasures = []types.Treasure{{Address: treasures[0].Address, Proportion: sdk.NewDecWithPrec(8, 2)}, {Address: treasures[2].Address, Proportion: sdk.NewDecWithPrec(16, 2)}, treasures[3]} 172 suite.app.MintKeeper.SetTreasures(suite.ctx, []types.Treasure{treasures[0], treasures[2]}) 173 }, 174 []types.Treasure{treasures[3], {Address: treasures[2].Address, Proportion: sdk.NewDecWithPrec(16, 2)}, {Address: treasures[0].Address, Proportion: sdk.NewDecWithPrec(8, 2)}}, 175 }, 176 { 177 "delete one from one", 178 passfunc, 179 func() { 180 proposal.IsAdded = false 181 proposal.Treasures = []types.Treasure{treasures[3]} 182 suite.app.MintKeeper.SetTreasures(suite.ctx, []types.Treasure{treasures[3]}) 183 }, 184 []types.Treasure{}, 185 }, 186 { 187 "delete one from multi", 188 passfunc, 189 func() { 190 proposal.IsAdded = false 191 proposal.Treasures = []types.Treasure{treasures[3]} 192 suite.app.MintKeeper.SetTreasures(suite.ctx, []types.Treasure{treasures[3], treasures[0]}) 193 }, 194 []types.Treasure{treasures[0]}, 195 }, 196 { 197 "delete multi from multi", 198 passfunc, 199 func() { 200 proposal.IsAdded = false 201 proposal.Treasures = []types.Treasure{treasures[3], treasures[0]} 202 suite.app.MintKeeper.SetTreasures(suite.ctx, []types.Treasure{treasures[3], treasures[0]}) 203 }, 204 []types.Treasure{}, 205 }, 206 { 207 "delete multi from multi more", 208 passfunc, 209 func() { 210 proposal.IsAdded = false 211 proposal.Treasures = []types.Treasure{treasures[3], treasures[0]} 212 suite.app.MintKeeper.SetTreasures(suite.ctx, []types.Treasure{treasures[3], treasures[0], treasures[1]}) 213 }, 214 []types.Treasure{treasures[1]}, 215 }, 216 { 217 "add multi(negative) into multi", 218 treasuresError, 219 func() { 220 proposal.IsAdded = true 221 proposal.Treasures = []types.Treasure{{Address: treasures[1].Address, Proportion: sdk.NewDecWithPrec(-1, 0)}, treasures[3]} 222 suite.app.MintKeeper.SetTreasures(suite.ctx, []types.Treasure{treasures[0], treasures[2]}) 223 224 }, 225 []types.Treasure{treasures[2], treasures[0]}, 226 }, 227 { 228 "add multi(more negative) into multi", 229 treasuresError, 230 func() { 231 proposal.IsAdded = true 232 proposal.Treasures = []types.Treasure{{Address: treasures[1].Address, Proportion: sdk.NewDecWithPrec(-1, 0)}, {Address: treasures[3].Address, Proportion: sdk.NewDecWithPrec(-1, 0)}, treasures[4]} 233 suite.app.MintKeeper.SetTreasures(suite.ctx, []types.Treasure{treasures[0], treasures[2]}) 234 235 }, 236 []types.Treasure{treasures[2], treasures[0]}, 237 }, 238 { 239 "add multi(all negative) into multi", 240 treasuresError, 241 func() { 242 proposal.IsAdded = true 243 proposal.Treasures = []types.Treasure{{Address: treasures[1].Address, Proportion: sdk.NewDecWithPrec(-1, 0)}, {Address: treasures[3].Address, Proportion: sdk.NewDecWithPrec(-1, 0)}, {Address: treasures[4].Address, Proportion: sdk.NewDecWithPrec(-1, 0)}} 244 suite.app.MintKeeper.SetTreasures(suite.ctx, []types.Treasure{treasures[0], treasures[2]}) 245 246 }, 247 []types.Treasure{treasures[2], treasures[0]}, 248 }, 249 { 250 "add multi(more than one) into multi", 251 treasuresError, 252 func() { 253 proposal.IsAdded = true 254 proposal.Treasures = []types.Treasure{{Address: treasures[1].Address, Proportion: sdk.NewDecWithPrec(8, 0)}, treasures[3]} 255 suite.app.MintKeeper.SetTreasures(suite.ctx, []types.Treasure{treasures[0], treasures[2]}) 256 257 }, 258 []types.Treasure{treasures[2], treasures[0]}, 259 }, 260 { 261 "add multi(more than one) into multi", 262 treasuresError, 263 func() { 264 proposal.IsAdded = true 265 proposal.Treasures = []types.Treasure{{Address: treasures[1].Address, Proportion: sdk.NewDecWithPrec(8, 0)}, {Address: treasures[3].Address, Proportion: sdk.NewDecWithPrec(8, 0)}, treasures[4]} 266 suite.app.MintKeeper.SetTreasures(suite.ctx, []types.Treasure{treasures[0], treasures[2]}) 267 268 }, 269 []types.Treasure{treasures[2], treasures[0]}, 270 }, 271 { 272 "add multi(more than one) into multi", 273 treasuresError, 274 func() { 275 proposal.IsAdded = true 276 proposal.Treasures = []types.Treasure{{Address: treasures[1].Address, Proportion: sdk.NewDecWithPrec(8, 0)}, {Address: treasures[3].Address, Proportion: sdk.NewDecWithPrec(8, 0)}, {Address: treasures[4].Address, Proportion: sdk.NewDecWithPrec(8, 0)}} 277 suite.app.MintKeeper.SetTreasures(suite.ctx, []types.Treasure{treasures[0], treasures[2]}) 278 279 }, 280 []types.Treasure{treasures[2], treasures[0]}, 281 }, 282 { 283 "add multi(input sum proportion more than one) into multi", 284 sumProportionError, 285 func() { 286 proposal.IsAdded = true 287 proposal.Treasures = []types.Treasure{{Address: treasures[1].Address, Proportion: sdk.NewDecWithPrec(8, 1)}, {Address: treasures[3].Address, Proportion: sdk.NewDecWithPrec(2, 1)}, {Address: treasures[4].Address, Proportion: sdk.NewDecWithPrec(1, 2)}} 288 suite.app.MintKeeper.SetTreasures(suite.ctx, []types.Treasure{treasures[0], treasures[2]}) 289 290 }, 291 []types.Treasure{treasures[2], treasures[0]}, 292 }, 293 { 294 "add multi(result sum proportion more than one) into multi", 295 sumProportionError, 296 func() { 297 proposal.IsAdded = true 298 proposal.Treasures = []types.Treasure{{Address: treasures[1].Address, Proportion: sdk.NewDecWithPrec(8, 1)}, {Address: treasures[3].Address, Proportion: sdk.NewDecWithPrec(2, 1)}} 299 suite.app.MintKeeper.SetTreasures(suite.ctx, []types.Treasure{treasures[0], treasures[2]}) 300 301 }, 302 []types.Treasure{treasures[2], treasures[0]}, 303 }, 304 { 305 "update multi(negative) into multi", 306 treasuresError, 307 func() { 308 proposal.IsAdded = true 309 proposal.Treasures = []types.Treasure{{Address: treasures[0].Address, Proportion: sdk.NewDecWithPrec(-8, 2)}, {Address: treasures[2].Address, Proportion: sdk.NewDecWithPrec(16, 2)}} 310 suite.app.MintKeeper.SetTreasures(suite.ctx, []types.Treasure{treasures[0], treasures[2]}) 311 }, 312 []types.Treasure{treasures[2], treasures[0]}, 313 }, 314 { 315 "update multi(more negative) into multi", 316 treasuresError, 317 func() { 318 proposal.IsAdded = true 319 proposal.Treasures = []types.Treasure{{Address: treasures[0].Address, Proportion: sdk.NewDecWithPrec(-8, 2)}, {Address: treasures[2].Address, Proportion: sdk.NewDecWithPrec(-16, 2)}, treasures[4]} 320 suite.app.MintKeeper.SetTreasures(suite.ctx, []types.Treasure{treasures[0], treasures[2]}) 321 }, 322 []types.Treasure{treasures[2], treasures[0]}, 323 }, 324 { 325 "update multi(all negative) into multi", 326 treasuresError, 327 func() { 328 proposal.IsAdded = true 329 proposal.Treasures = []types.Treasure{{Address: treasures[0].Address, Proportion: sdk.NewDecWithPrec(-8, 2)}, {Address: treasures[2].Address, Proportion: sdk.NewDecWithPrec(-16, 2)}} 330 suite.app.MintKeeper.SetTreasures(suite.ctx, []types.Treasure{treasures[0], treasures[2]}) 331 }, 332 []types.Treasure{treasures[2], treasures[0]}, 333 }, 334 { 335 "update multi(more than one) into multi", 336 treasuresError, 337 func() { 338 proposal.IsAdded = true 339 proposal.Treasures = []types.Treasure{{Address: treasures[0].Address, Proportion: sdk.NewDecWithPrec(8, 0)}, {Address: treasures[2].Address, Proportion: sdk.NewDecWithPrec(16, 0)}} 340 suite.app.MintKeeper.SetTreasures(suite.ctx, []types.Treasure{treasures[0], treasures[2]}) 341 }, 342 []types.Treasure{treasures[2], treasures[0]}, 343 }, 344 { 345 "update multi(more more than one) into multi", 346 treasuresError, 347 func() { 348 proposal.IsAdded = true 349 proposal.Treasures = []types.Treasure{{Address: treasures[0].Address, Proportion: sdk.NewDecWithPrec(8, 0)}, {Address: treasures[2].Address, Proportion: sdk.NewDecWithPrec(16, 0)}, treasures[4]} 350 suite.app.MintKeeper.SetTreasures(suite.ctx, []types.Treasure{treasures[0], treasures[2]}) 351 }, 352 []types.Treasure{treasures[2], treasures[0]}, 353 }, 354 { 355 "update multi(all more than one) into multi", 356 treasuresError, 357 func() { 358 proposal.IsAdded = true 359 proposal.Treasures = []types.Treasure{{Address: treasures[0].Address, Proportion: sdk.NewDecWithPrec(8, 0)}, {Address: treasures[2].Address, Proportion: sdk.NewDecWithPrec(16, 0)}} 360 suite.app.MintKeeper.SetTreasures(suite.ctx, []types.Treasure{treasures[0], treasures[2]}) 361 }, 362 []types.Treasure{treasures[2], treasures[0]}, 363 }, 364 { 365 "update multi(input the sum proportion all more than one) into multi", 366 sumProportionError, 367 func() { 368 proposal.IsAdded = true 369 proposal.Treasures = []types.Treasure{{Address: treasures[0].Address, Proportion: sdk.NewDecWithPrec(8, 1)}, {Address: treasures[2].Address, Proportion: sdk.NewDecWithPrec(21, 2)}} 370 suite.app.MintKeeper.SetTreasures(suite.ctx, []types.Treasure{treasures[0], treasures[2]}) 371 }, 372 []types.Treasure{treasures[2], treasures[0]}, 373 }, 374 { 375 "update multi(result the sum proportion all more than one) into multi", 376 sumProportionError, 377 func() { 378 proposal.IsAdded = true 379 proposal.Treasures = []types.Treasure{{Address: treasures[0].Address, Proportion: sdk.NewDecWithPrec(8, 1)}, {Address: treasures[2].Address, Proportion: sdk.NewDecWithPrec(20, 2)}} 380 suite.app.MintKeeper.SetTreasures(suite.ctx, []types.Treasure{treasures[0], treasures[1], treasures[2]}) 381 }, 382 []types.Treasure{treasures[2], treasures[1], treasures[0]}, 383 }, 384 { 385 "delete multi(unexist) from multi", 386 unexistError, 387 func() { 388 proposal.IsAdded = false 389 proposal.Treasures = []types.Treasure{treasures[4], treasures[0]} 390 suite.app.MintKeeper.SetTreasures(suite.ctx, []types.Treasure{treasures[3], treasures[0]}) 391 }, 392 []types.Treasure{treasures[3], treasures[0]}, 393 }, 394 { 395 "delete multi(part unexist) from multi", 396 unexistError, 397 func() { 398 proposal.IsAdded = false 399 proposal.Treasures = []types.Treasure{treasures[4], treasures[2], treasures[0]} 400 suite.app.MintKeeper.SetTreasures(suite.ctx, []types.Treasure{treasures[3], treasures[0]}) 401 }, 402 []types.Treasure{treasures[3], treasures[0]}, 403 }, 404 { 405 "delete multi(all unexist) from multi", 406 unexistError, 407 func() { 408 proposal.IsAdded = false 409 proposal.Treasures = []types.Treasure{treasures[4], treasures[2]} 410 suite.app.MintKeeper.SetTreasures(suite.ctx, []types.Treasure{treasures[3], treasures[0]}) 411 }, 412 []types.Treasure{treasures[3], treasures[0]}, 413 }, 414 { 415 "delete multi(negative) from multi", 416 passfunc, 417 func() { 418 proposal.IsAdded = false 419 proposal.Treasures = []types.Treasure{{Address: treasures[3].Address, Proportion: sdk.NewDecWithPrec(-2, 0)}, treasures[0]} 420 suite.app.MintKeeper.SetTreasures(suite.ctx, []types.Treasure{treasures[3], treasures[0]}) 421 }, 422 []types.Treasure{}, 423 }, 424 { 425 "delete multi(more negative) from multi", 426 passfunc, 427 func() { 428 proposal.IsAdded = false 429 proposal.Treasures = []types.Treasure{{Address: treasures[3].Address, Proportion: sdk.NewDecWithPrec(-2, 0)}, {Address: treasures[0].Address, Proportion: sdk.NewDecWithPrec(-2, 0)}} 430 suite.app.MintKeeper.SetTreasures(suite.ctx, []types.Treasure{treasures[3], treasures[0]}) 431 }, 432 []types.Treasure{}, 433 }, 434 { 435 "delete multi(more than one) from multi", 436 passfunc, 437 func() { 438 proposal.IsAdded = false 439 proposal.Treasures = []types.Treasure{{Address: treasures[3].Address, Proportion: sdk.NewDecWithPrec(2, 0)}, treasures[0]} 440 suite.app.MintKeeper.SetTreasures(suite.ctx, []types.Treasure{treasures[3], treasures[0]}) 441 }, 442 []types.Treasure{}, 443 }, 444 { 445 "delete multi(more more than one) from multi", 446 passfunc, 447 func() { 448 proposal.IsAdded = false 449 proposal.Treasures = []types.Treasure{{Address: treasures[3].Address, Proportion: sdk.NewDecWithPrec(2, 0)}, {Address: treasures[0].Address, Proportion: sdk.NewDecWithPrec(2, 0)}} 450 suite.app.MintKeeper.SetTreasures(suite.ctx, []types.Treasure{treasures[3], treasures[0]}) 451 }, 452 []types.Treasure{}, 453 }, 454 { 455 "delete multi(the sum proportion more than one) from multi", 456 passfunc, 457 func() { 458 proposal.IsAdded = false 459 proposal.Treasures = []types.Treasure{{Address: treasures[3].Address, Proportion: sdk.NewDecWithPrec(80, 2)}, {Address: treasures[0].Address, Proportion: sdk.NewDecWithPrec(22, 2)}} 460 suite.app.MintKeeper.SetTreasures(suite.ctx, []types.Treasure{treasures[3], treasures[0]}) 461 }, 462 []types.Treasure{}, 463 }, 464 } 465 466 for _, tc := range testCases { 467 suite.Run(tc.msg, func() { 468 tc.prepare() 469 govProposal.Content = proposal 470 471 err := suite.govHandler(suite.ctx, &govProposal) 472 tc.expectfunc(err, tc.targetTreasures, tc.msg) 473 474 // check the whitelist with target address list 475 actual := suite.app.MintKeeper.GetTreasures(suite.ctx) 476 suite.Require().Equal(len(tc.targetTreasures), len(actual), tc.msg) 477 478 for i, _ := range actual { 479 suite.Require().Equal(tc.targetTreasures[i], actual[i], tc.msg) 480 } 481 482 // reset data 483 suite.app.MintKeeper.SetTreasures(suite.ctx, make([]types.Treasure, 0)) 484 }) 485 } 486 } 487 488 func (suite *MintTestSuite) TestModifyNextBlockUpdateProposal() { 489 tmtypes.UnittestOnlySetMilestoneVenus5Height(-1) 490 suite.ctx.SetBlockHeight(1000) 491 proposal := types.NewModifyNextBlockUpdateProposal( 492 "default title", 493 "default description", 494 0, 495 ) 496 govProposal := govtypes.Proposal{ 497 Content: proposal, 498 } 499 500 testCases := []struct { 501 msg string 502 blockNum uint64 503 expectBlockNum uint64 504 expectError error 505 }{ 506 {"error block num 0", 0, 0, types.ErrNextBlockUpdateTooLate}, 507 {"error block num 1000", 1000, 0, types.ErrNextBlockUpdateTooLate}, 508 {"ok block num 1001", 1001, 1001, nil}, 509 {"ok block num 2000", 2000, 2000, nil}, 510 } 511 512 for _, tc := range testCases { 513 suite.Run(tc.msg, func() { 514 proposal.BlockNum = tc.blockNum 515 govProposal.Content = proposal 516 517 oldMinter := suite.app.MintKeeper.GetMinterCustom(suite.ctx) 518 519 err := suite.govHandler(suite.ctx, &govProposal) 520 suite.Require().Equal(err, tc.expectError) 521 newMinter := suite.app.MintKeeper.GetMinterCustom(suite.ctx) 522 suite.Require().Equal(tc.expectBlockNum, newMinter.NextBlockToUpdate) 523 524 suite.app.MintKeeper.SetMinterCustom(suite.ctx, oldMinter) 525 }) 526 } 527 }