github.com/Finschia/finschia-sdk@v0.49.1/x/foundation/keeper/internal/censorship_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  )
     7  
     8  func (s *KeeperTestSuite) TestUpdateCensorship() {
     9  	ctx, _ := s.ctx.CacheContext()
    10  
    11  	// add a dummy url to censorship
    12  	msgTypeURL := sdk.MsgTypeURL((*foundation.MsgWithdrawFromTreasury)(nil))
    13  	dummyURL := sdk.MsgTypeURL((*foundation.MsgFundTreasury)(nil))
    14  	for _, url := range []string{
    15  		msgTypeURL,
    16  		dummyURL,
    17  	} {
    18  		s.impl.SetCensorship(ctx, foundation.Censorship{
    19  			MsgTypeUrl: url,
    20  			Authority:  foundation.CensorshipAuthorityFoundation,
    21  		})
    22  	}
    23  
    24  	// check preconditions
    25  	s.Require().True(s.impl.IsCensoredMessage(ctx, msgTypeURL))
    26  	_, err := s.impl.GetAuthorization(ctx, s.stranger, msgTypeURL)
    27  	s.Require().NoError(err)
    28  
    29  	// test update censorship
    30  	removingCensorship := foundation.Censorship{
    31  		MsgTypeUrl: msgTypeURL,
    32  		Authority:  foundation.CensorshipAuthorityUnspecified,
    33  	}
    34  	s.Require().NoError(removingCensorship.ValidateBasic())
    35  	err = s.impl.UpdateCensorship(ctx, removingCensorship)
    36  	s.Require().NoError(err)
    37  
    38  	// check censorship
    39  	_, err = s.impl.GetCensorship(ctx, msgTypeURL)
    40  	s.Require().Error(err)
    41  	s.Require().False(s.impl.IsCensoredMessage(ctx, msgTypeURL))
    42  
    43  	// check authorizations
    44  	_, err = s.impl.GetAuthorization(ctx, s.stranger, msgTypeURL)
    45  	s.Require().Error(err)
    46  
    47  	// 2. re-enable the removed censorship, which must fail
    48  	newCensorship := foundation.Censorship{
    49  		MsgTypeUrl: msgTypeURL,
    50  		Authority:  foundation.CensorshipAuthorityGovernance,
    51  	}
    52  	s.Require().NoError(newCensorship.ValidateBasic())
    53  	err = s.impl.UpdateCensorship(ctx, newCensorship)
    54  	s.Require().Error(err)
    55  }
    56  
    57  func (s *KeeperTestSuite) TestGrant() {
    58  	testCases := map[string]struct {
    59  		malleate func(ctx sdk.Context)
    60  		grantee  sdk.AccAddress
    61  		auth     foundation.Authorization
    62  		valid    bool
    63  	}{
    64  		"valid authz": {
    65  			grantee: s.members[0],
    66  			auth:    &foundation.ReceiveFromTreasuryAuthorization{},
    67  			valid:   true,
    68  		},
    69  		"not being censored": {
    70  			malleate: func(ctx sdk.Context) {
    71  				err := s.impl.UpdateCensorship(ctx, foundation.Censorship{
    72  					MsgTypeUrl: sdk.MsgTypeURL((*foundation.MsgWithdrawFromTreasury)(nil)),
    73  					Authority:  foundation.CensorshipAuthorityUnspecified,
    74  				})
    75  				s.Require().NoError(err)
    76  			},
    77  			grantee: s.members[0],
    78  			auth:    &foundation.ReceiveFromTreasuryAuthorization{},
    79  		},
    80  		"override attempt": {
    81  			grantee: s.stranger,
    82  			auth:    &foundation.ReceiveFromTreasuryAuthorization{},
    83  		},
    84  	}
    85  
    86  	for name, tc := range testCases {
    87  		s.Run(name, func() {
    88  			ctx, _ := s.ctx.CacheContext()
    89  			if tc.malleate != nil {
    90  				tc.malleate(ctx)
    91  			}
    92  
    93  			err := s.impl.Grant(ctx, tc.grantee, tc.auth)
    94  			if tc.valid {
    95  				s.Require().NoError(err)
    96  			} else {
    97  				s.Require().Error(err)
    98  			}
    99  		})
   100  	}
   101  }
   102  
   103  func (s *KeeperTestSuite) TestRevoke() {
   104  	testCases := map[string]struct {
   105  		grantee sdk.AccAddress
   106  		url     string
   107  		valid   bool
   108  	}{
   109  		"valid url": {
   110  			grantee: s.stranger,
   111  			url:     foundation.ReceiveFromTreasuryAuthorization{}.MsgTypeURL(),
   112  			valid:   true,
   113  		},
   114  		"grant not found": {
   115  			grantee: s.members[0],
   116  			url:     foundation.ReceiveFromTreasuryAuthorization{}.MsgTypeURL(),
   117  		},
   118  	}
   119  
   120  	for name, tc := range testCases {
   121  		s.Run(name, func() {
   122  			ctx, _ := s.ctx.CacheContext()
   123  
   124  			err := s.impl.Revoke(ctx, tc.grantee, tc.url)
   125  			if tc.valid {
   126  				s.Require().NoError(err)
   127  			} else {
   128  				s.Require().Error(err)
   129  			}
   130  		})
   131  	}
   132  }
   133  
   134  func (s *KeeperTestSuite) TestAccept() {
   135  	testCases := map[string]struct {
   136  		malleate func(ctx sdk.Context)
   137  		grantee  sdk.AccAddress
   138  		msg      sdk.Msg
   139  		valid    bool
   140  	}{
   141  		"valid request": {
   142  			grantee: s.stranger,
   143  			msg: &foundation.MsgWithdrawFromTreasury{
   144  				Authority: s.authority.String(),
   145  				To:        s.stranger.String(),
   146  				Amount:    sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, sdk.OneInt())),
   147  			},
   148  			valid: true,
   149  		},
   150  		"not being censored": {
   151  			malleate: func(ctx sdk.Context) {
   152  				err := s.impl.UpdateCensorship(ctx, foundation.Censorship{
   153  					MsgTypeUrl: sdk.MsgTypeURL((*foundation.MsgWithdrawFromTreasury)(nil)),
   154  					Authority:  foundation.CensorshipAuthorityUnspecified,
   155  				})
   156  				s.Require().NoError(err)
   157  			},
   158  			grantee: s.members[0],
   159  			msg: &foundation.MsgWithdrawFromTreasury{
   160  				Authority: s.authority.String(),
   161  				To:        s.members[0].String(),
   162  				Amount:    sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, sdk.OneInt())),
   163  			},
   164  			valid: true,
   165  		},
   166  		"no authorization": {
   167  			grantee: s.members[0],
   168  			msg: &foundation.MsgWithdrawFromTreasury{
   169  				Authority: s.authority.String(),
   170  				To:        s.members[0].String(),
   171  				Amount:    sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, sdk.OneInt())),
   172  			},
   173  		},
   174  	}
   175  
   176  	for name, tc := range testCases {
   177  		s.Run(name, func() {
   178  			ctx, _ := s.ctx.CacheContext()
   179  			if tc.malleate != nil {
   180  				tc.malleate(ctx)
   181  			}
   182  
   183  			err := s.impl.Accept(ctx, tc.grantee, tc.msg)
   184  			if tc.valid {
   185  				s.Require().NoError(err)
   186  			} else {
   187  				s.Require().Error(err)
   188  			}
   189  		})
   190  	}
   191  }