github.com/Finschia/finschia-sdk@v0.48.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  				s.impl.UpdateCensorship(ctx, foundation.Censorship{
    72  					MsgTypeUrl: sdk.MsgTypeURL((*foundation.MsgWithdrawFromTreasury)(nil)),
    73  					Authority:  foundation.CensorshipAuthorityUnspecified,
    74  				})
    75  			},
    76  			grantee: s.members[0],
    77  			auth:    &foundation.ReceiveFromTreasuryAuthorization{},
    78  		},
    79  		"override attempt": {
    80  			grantee: s.stranger,
    81  			auth:    &foundation.ReceiveFromTreasuryAuthorization{},
    82  		},
    83  	}
    84  
    85  	for name, tc := range testCases {
    86  		s.Run(name, func() {
    87  			ctx, _ := s.ctx.CacheContext()
    88  			if tc.malleate != nil {
    89  				tc.malleate(ctx)
    90  			}
    91  
    92  			err := s.impl.Grant(ctx, tc.grantee, tc.auth)
    93  			if tc.valid {
    94  				s.Require().NoError(err)
    95  			} else {
    96  				s.Require().Error(err)
    97  			}
    98  		})
    99  	}
   100  }
   101  
   102  func (s *KeeperTestSuite) TestRevoke() {
   103  	testCases := map[string]struct {
   104  		grantee sdk.AccAddress
   105  		url     string
   106  		valid   bool
   107  	}{
   108  		"valid url": {
   109  			grantee: s.stranger,
   110  			url:     foundation.ReceiveFromTreasuryAuthorization{}.MsgTypeURL(),
   111  			valid:   true,
   112  		},
   113  		"grant not found": {
   114  			grantee: s.members[0],
   115  			url:     foundation.ReceiveFromTreasuryAuthorization{}.MsgTypeURL(),
   116  		},
   117  	}
   118  
   119  	for name, tc := range testCases {
   120  		s.Run(name, func() {
   121  			ctx, _ := s.ctx.CacheContext()
   122  
   123  			err := s.impl.Revoke(ctx, tc.grantee, tc.url)
   124  			if tc.valid {
   125  				s.Require().NoError(err)
   126  			} else {
   127  				s.Require().Error(err)
   128  			}
   129  		})
   130  	}
   131  }
   132  
   133  func (s *KeeperTestSuite) TestAccept() {
   134  	testCases := map[string]struct {
   135  		malleate func(ctx sdk.Context)
   136  		grantee  sdk.AccAddress
   137  		msg      sdk.Msg
   138  		valid    bool
   139  	}{
   140  		"valid request": {
   141  			grantee: s.stranger,
   142  			msg: &foundation.MsgWithdrawFromTreasury{
   143  				Authority: s.authority.String(),
   144  				To:        s.stranger.String(),
   145  				Amount:    sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, sdk.OneInt())),
   146  			},
   147  			valid: true,
   148  		},
   149  		"not being censored": {
   150  			malleate: func(ctx sdk.Context) {
   151  				s.impl.UpdateCensorship(ctx, foundation.Censorship{
   152  					MsgTypeUrl: sdk.MsgTypeURL((*foundation.MsgWithdrawFromTreasury)(nil)),
   153  					Authority:  foundation.CensorshipAuthorityUnspecified,
   154  				})
   155  			},
   156  			grantee: s.members[0],
   157  			msg: &foundation.MsgWithdrawFromTreasury{
   158  				Authority: s.authority.String(),
   159  				To:        s.members[0].String(),
   160  				Amount:    sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, sdk.OneInt())),
   161  			},
   162  			valid: true,
   163  		},
   164  		"no authorization": {
   165  			grantee: s.members[0],
   166  			msg: &foundation.MsgWithdrawFromTreasury{
   167  				Authority: s.authority.String(),
   168  				To:        s.members[0].String(),
   169  				Amount:    sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, sdk.OneInt())),
   170  			},
   171  		},
   172  	}
   173  
   174  	for name, tc := range testCases {
   175  		s.Run(name, func() {
   176  			ctx, _ := s.ctx.CacheContext()
   177  			if tc.malleate != nil {
   178  				tc.malleate(ctx)
   179  			}
   180  
   181  			err := s.impl.Accept(ctx, tc.grantee, tc.msg)
   182  			if tc.valid {
   183  				s.Require().NoError(err)
   184  			} else {
   185  				s.Require().Error(err)
   186  			}
   187  		})
   188  	}
   189  }