github.com/Finschia/finschia-sdk@v0.48.1/x/foundation/keeper/internal/invariants_test.go (about) 1 package internal_test 2 3 import ( 4 sdk "github.com/Finschia/finschia-sdk/types" 5 "github.com/Finschia/finschia-sdk/x/foundation" 6 "github.com/Finschia/finschia-sdk/x/foundation/keeper/internal" 7 ) 8 9 func (s *KeeperTestSuite) TestModuleAccountInvariant() { 10 testCases := map[string]struct { 11 malleate func(ctx sdk.Context) 12 valid bool 13 }{ 14 "invariant not broken": { 15 valid: true, 16 }, 17 "treasury differs from the balance": { 18 malleate: func(ctx sdk.Context) { 19 balance := sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, s.balance.Add(sdk.OneInt()))) 20 s.impl.SetPool(ctx, foundation.Pool{ 21 Treasury: sdk.NewDecCoinsFromCoins(balance...), 22 }) 23 }, 24 }, 25 } 26 27 for name, tc := range testCases { 28 s.Run(name, func() { 29 ctx, _ := s.ctx.CacheContext() 30 if tc.malleate != nil { 31 tc.malleate(ctx) 32 } 33 34 invariant := internal.ModuleAccountInvariant(s.impl) 35 _, broken := invariant(ctx) 36 s.Require().Equal(!tc.valid, broken) 37 }) 38 } 39 } 40 41 func (s *KeeperTestSuite) TestTotalWeightInvariant() { 42 testCases := map[string]struct { 43 malleate func(ctx sdk.Context) 44 valid bool 45 }{ 46 "invariant not broken": { 47 valid: true, 48 }, 49 "total weight differs from the number of foundation members": { 50 malleate: func(ctx sdk.Context) { 51 info := s.impl.GetFoundationInfo(ctx) 52 numMembers := len(s.impl.GetMembers(ctx)) 53 info.TotalWeight = sdk.NewDec(int64(numMembers)).Add(sdk.OneDec()) 54 s.impl.SetFoundationInfo(ctx, info) 55 }, 56 }, 57 } 58 59 for name, tc := range testCases { 60 s.Run(name, func() { 61 ctx, _ := s.ctx.CacheContext() 62 if tc.malleate != nil { 63 tc.malleate(ctx) 64 } 65 66 invariant := internal.TotalWeightInvariant(s.impl) 67 _, broken := invariant(ctx) 68 s.Require().Equal(!tc.valid, broken) 69 }) 70 } 71 } 72 73 func (s *KeeperTestSuite) TestProposalInvariant() { 74 testCases := map[string]struct { 75 malleate func(ctx sdk.Context) 76 valid bool 77 }{ 78 "invariant not broken": { 79 valid: true, 80 }, 81 "active old proposal exists": { 82 malleate: func(ctx sdk.Context) { 83 info := s.impl.GetFoundationInfo(ctx) 84 info.Version-- 85 s.impl.SetFoundationInfo(ctx, info) 86 }, 87 }, 88 } 89 90 for name, tc := range testCases { 91 s.Run(name, func() { 92 ctx, _ := s.ctx.CacheContext() 93 if tc.malleate != nil { 94 tc.malleate(ctx) 95 } 96 97 invariant := internal.ProposalInvariant(s.impl) 98 _, broken := invariant(ctx) 99 s.Require().Equal(!tc.valid, broken) 100 }) 101 } 102 }