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 }