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  }