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  }