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 }