github.com/KiraCore/sekai@v0.3.43/x/gov/keeper/grpc_query_test.go (about) 1 package keeper_test 2 3 import ( 4 "testing" 5 "time" 6 7 stakingtypes "github.com/KiraCore/sekai/x/staking/types" 8 9 "github.com/stretchr/testify/require" 10 11 tmproto "github.com/cometbft/cometbft/proto/tendermint/types" 12 sdk "github.com/cosmos/cosmos-sdk/types" 13 14 simapp "github.com/KiraCore/sekai/app" 15 "github.com/KiraCore/sekai/x/gov/types" 16 ) 17 18 func TestQuerier_PermissionsByAddress(t *testing.T) { 19 app := simapp.Setup(false) 20 ctx := app.NewContext(false, tmproto.Header{}) 21 22 addrs := simapp.AddTestAddrsIncremental(app, ctx, 2, sdk.TokensFromConsensusPower(10, sdk.DefaultPowerReduction)) 23 addr1 := addrs[0] 24 addr2 := addrs[1] 25 26 permissions := types.NewPermissions( 27 []types.PermValue{ 28 types.PermClaimValidator, 29 }, 30 nil, 31 ) 32 33 networkActor := types.NewNetworkActor( 34 addr1, 35 []uint64{}, 36 1, 37 nil, 38 permissions, 39 123, 40 ) 41 42 app.CustomGovKeeper.SaveNetworkActor(ctx, networkActor) 43 44 querier := app.CustomGovKeeper 45 resp, err := querier.PermissionsByAddress(sdk.WrapSDKContext(ctx), &types.PermissionsByAddressRequest{Addr: addr1.String()}) 46 require.NoError(t, err) 47 48 require.Equal(t, permissions, resp.Permissions) 49 50 // Get permissions by address that is not saved. 51 _, err = querier.PermissionsByAddress(sdk.WrapSDKContext(ctx), &types.PermissionsByAddressRequest{Addr: addr2.String()}) 52 require.EqualError(t, err, stakingtypes.ErrNetworkActorNotFound.Error()) 53 } 54 55 func TestQuerier_RolesByAddress(t *testing.T) { 56 app := simapp.Setup(false) 57 ctx := app.NewContext(false, tmproto.Header{}) 58 59 addrs := simapp.AddTestAddrsIncremental(app, ctx, 2, sdk.TokensFromConsensusPower(10, sdk.DefaultPowerReduction)) 60 addr1 := addrs[0] 61 addr2 := addrs[1] 62 63 networkActor := types.NewNetworkActor( 64 addr1, 65 []uint64{ 66 1, 2, 3, 67 }, 68 1, 69 nil, 70 types.NewPermissions( 71 []types.PermValue{ 72 types.PermClaimValidator, 73 }, 74 nil, 75 ), 76 123, 77 ) 78 79 app.CustomGovKeeper.SaveNetworkActor(ctx, networkActor) 80 81 querier := app.CustomGovKeeper 82 83 resp, err := querier.RolesByAddress(sdk.WrapSDKContext(ctx), &types.RolesByAddressRequest{Addr: addr1.String()}) 84 require.NoError(t, err) 85 86 require.Equal(t, 87 []uint64{0x1, 0x2, 0x3}, 88 resp.RoleIds, 89 ) 90 91 // Get roles for actor that does not exist 92 _, err = querier.RolesByAddress(sdk.WrapSDKContext(ctx), &types.RolesByAddressRequest{Addr: addr2.String()}) 93 require.EqualError(t, err, "network actor not found") 94 } 95 96 func TestQuerier_Proposal(t *testing.T) { 97 app := simapp.Setup(false) 98 ctx := app.NewContext(false, tmproto.Header{}) 99 100 addrs := simapp.AddTestAddrsIncremental(app, ctx, 2, sdk.TokensFromConsensusPower(10, sdk.DefaultPowerReduction)) 101 102 proposalID := uint64(1234) 103 proposal, err := types.NewProposal( 104 proposalID, 105 "title", 106 "some desc", 107 types.NewWhitelistAccountPermissionProposal( 108 addrs[0], 109 types.PermSetPermissions, 110 ), 111 time.Now(), 112 time.Now().Add(10*time.Second), 113 time.Now().Add(20*time.Second), 114 ctx.BlockHeight()+2, 115 ctx.BlockHeight()+3, 116 ) 117 require.NoError(t, err) 118 119 app.CustomGovKeeper.SaveProposal(ctx, proposal) 120 121 app.CustomGovKeeper.SaveVote(ctx, types.Vote{ 122 ProposalId: proposalID, 123 Voter: addrs[0], 124 Option: types.OptionNo, 125 }) 126 127 querier := app.CustomGovKeeper 128 129 resp, err := querier.Proposal( 130 sdk.WrapSDKContext(ctx), 131 &types.QueryProposalRequest{ProposalId: proposalID}, 132 ) 133 require.NoError(t, err) 134 require.Equal(t, proposalID, resp.Proposal.ProposalId) 135 require.Len(t, resp.Votes, 1) 136 require.Equal(t, proposal.Description, resp.Proposal.Description) 137 } 138 139 func TestQuerier_CouncilorByAddress(t *testing.T) { 140 app := simapp.Setup(false) 141 ctx := app.NewContext(false, tmproto.Header{}) 142 143 addrs := simapp.AddTestAddrsIncremental(app, ctx, 2, sdk.TokensFromConsensusPower(10, sdk.DefaultPowerReduction)) 144 addr1 := addrs[0] 145 addr2 := addrs[1] 146 147 councilor := types.NewCouncilor( 148 addr1, 149 types.CouncilorActive, 150 ) 151 152 app.CustomGovKeeper.SaveCouncilor(ctx, councilor) 153 154 querier := app.CustomGovKeeper 155 156 resp, err := querier.CouncilorByAddress( 157 sdk.WrapSDKContext(ctx), 158 &types.CouncilorByAddressRequest{Addr: addr1.String()}, 159 ) 160 require.NoError(t, err) 161 require.Equal(t, councilor, resp.Councilor) 162 163 // Non existing Councilor 164 resp, err = querier.CouncilorByAddress( 165 sdk.WrapSDKContext(ctx), 166 &types.CouncilorByAddressRequest{Addr: addr2.String()}, 167 ) 168 require.Error(t, types.ErrCouncilorNotFound) 169 } 170 171 func TestQuerier_CouncilorQueries(t *testing.T) { 172 app := simapp.Setup(false) 173 ctx := app.NewContext(false, tmproto.Header{}) 174 175 addrs := simapp.AddTestAddrsIncremental(app, ctx, 2, sdk.TokensFromConsensusPower(10, sdk.DefaultPowerReduction)) 176 addr1 := addrs[0] 177 addr2 := addrs[1] 178 179 councilor := types.NewCouncilor( 180 addr1, 181 types.CouncilorActive, 182 ) 183 184 app.CustomGovKeeper.SaveCouncilor(ctx, councilor) 185 186 networkActor := types.NewNetworkActor( 187 addr2, 188 []uint64{types.RoleSudo}, 189 1, 190 nil, 191 types.NewPermissions( 192 []types.PermValue{ 193 types.PermClaimValidator, 194 }, 195 []types.PermValue{ 196 types.PermClaimCouncilor, 197 }, 198 ), 199 123, 200 ) 201 app.CustomGovKeeper.SaveNetworkActor(ctx, networkActor) 202 for _, perm := range networkActor.Permissions.Whitelist { 203 app.CustomGovKeeper.SetWhitelistAddressPermKey(ctx, networkActor, types.PermValue(perm)) 204 } 205 for _, role := range networkActor.Roles { 206 app.CustomGovKeeper.AssignRoleToActor(ctx, networkActor, role) 207 } 208 209 querier := app.CustomGovKeeper 210 211 // specific councilor 212 resp, err := querier.Councilors( 213 sdk.WrapSDKContext(ctx), 214 &types.QueryCouncilors{Address: addr1.String()}, 215 ) 216 require.NoError(t, err) 217 require.Len(t, resp.Councilors, 1) 218 require.Equal(t, councilor, resp.Councilors[0]) 219 220 // all councilors 221 resp, err = querier.Councilors( 222 sdk.WrapSDKContext(ctx), 223 &types.QueryCouncilors{}, 224 ) 225 require.NoError(t, err) 226 require.Len(t, resp.Councilors, 1) 227 require.Equal(t, councilor, resp.Councilors[0]) 228 229 // non-councilors 230 nresp, err := querier.NonCouncilors( 231 sdk.WrapSDKContext(ctx), 232 &types.QueryNonCouncilors{}, 233 ) 234 require.NoError(t, err) 235 require.Len(t, nresp.NonCouncilors, 1) 236 require.Equal(t, networkActor, nresp.NonCouncilors[0]) 237 238 wresp, err := querier.AddressesByWhitelistedPermission( 239 sdk.WrapSDKContext(ctx), 240 &types.QueryAddressesByWhitelistedPermission{Permission: uint32(types.PermClaimValidator)}, 241 ) 242 require.NoError(t, err) 243 require.Len(t, wresp.Addresses, 1) 244 require.Equal(t, addr2.String(), wresp.Addresses[0]) 245 246 bresp, err := querier.AddressesByBlacklistedPermission( 247 sdk.WrapSDKContext(ctx), 248 &types.QueryAddressesByBlacklistedPermission{Permission: uint32(types.PermClaimCouncilor)}, 249 ) 250 require.NoError(t, err) 251 require.Len(t, bresp.Addresses, 1) 252 require.Equal(t, addr2.String(), bresp.Addresses[0]) 253 254 rresp, err := querier.AddressesByWhitelistedRole( 255 sdk.WrapSDKContext(ctx), 256 &types.QueryAddressesByWhitelistedRole{Role: uint32(types.RoleSudo)}, 257 ) 258 require.NoError(t, err) 259 require.Len(t, rresp.Addresses, 1) 260 require.Equal(t, addr2.String(), rresp.Addresses[0]) 261 }