mukan-sdk/x/protocolpool/keeper/grpc_query_test.go
Mukan Erkin Törük abb1ff956e
Some checks are pending
Build SimApp / build (amd64) (push) Waiting to run
Build SimApp / build (arm64) (push) Waiting to run
CodeQL / Analyze (push) Waiting to run
Build & Push / build (push) Waiting to run
Run Gosec / Gosec (push) Waiting to run
Lint / golangci-lint (push) Waiting to run
Checks dependencies and mocks generation / Check go mod tidy (push) Waiting to run
Checks dependencies and mocks generation / Check up to date mocks (push) Waiting to run
System Tests / setup (push) Waiting to run
System Tests / test-system (push) Blocked by required conditions
System Tests / test-system-legacy (push) Blocked by required conditions
Tests / Code Coverage / split-test-files (push) Waiting to run
Tests / Code Coverage / tests (00) (push) Blocked by required conditions
Tests / Code Coverage / tests (01) (push) Blocked by required conditions
Tests / Code Coverage / tests (02) (push) Blocked by required conditions
Tests / Code Coverage / tests (03) (push) Blocked by required conditions
Tests / Code Coverage / test-integration (push) Waiting to run
Tests / Code Coverage / test-e2e (push) Waiting to run
Tests / Code Coverage / repo-analysis (push) Blocked by required conditions
Tests / Code Coverage / test-sim-nondeterminism (push) Waiting to run
Tests / Code Coverage / test-clientv2 (push) Waiting to run
Tests / Code Coverage / test-core (push) Waiting to run
Tests / Code Coverage / test-depinject (push) Waiting to run
Tests / Code Coverage / test-errors (push) Waiting to run
Tests / Code Coverage / test-math (push) Waiting to run
Tests / Code Coverage / test-schema (push) Waiting to run
Tests / Code Coverage / test-collections (push) Waiting to run
Tests / Code Coverage / test-cosmovisor (push) Waiting to run
Tests / Code Coverage / test-confix (push) Waiting to run
Tests / Code Coverage / test-store (push) Waiting to run
Tests / Code Coverage / test-log (push) Waiting to run
Tests / Code Coverage / test-x-tx (push) Waiting to run
Tests / Code Coverage / test-x-nft (push) Waiting to run
Tests / Code Coverage / test-x-circuit (push) Waiting to run
Tests / Code Coverage / test-x-feegrant (push) Waiting to run
Tests / Code Coverage / test-x-evidence (push) Waiting to run
Tests / Code Coverage / test-x-upgrade (push) Waiting to run
Tests / Code Coverage / test-tools-benchmark (push) Waiting to run
refactor: complete sovereign stack cleanup — all github.com upstream refs purged
2026-05-11 03:46:06 +03:00

271 lines
7.2 KiB
Go

package keeper_test
import (
"go.uber.org/mock/gomock"
"cosmossdk.io/math"
"git.cw.tr/mukan-network/mukan-sdk/codec/address"
sdk "git.cw.tr/mukan-network/mukan-sdk/types"
"git.cw.tr/mukan-network/mukan-sdk/x/protocolpool/types"
)
func (suite *KeeperTestSuite) TestParams() {
expectedParams := types.DefaultGenesisState().Params
err := suite.poolKeeper.Params.Set(suite.ctx, expectedParams)
suite.Require().NoError(err)
testCases := []struct {
name string
preRun func()
req *types.QueryParamsRequest
expErr bool
expErrMsg string
resp *types.QueryParamsResponse
}{
{
name: "nil request - error",
req: nil,
expErr: true,
expErrMsg: "rpc error: code = InvalidArgument desc = empty request",
},
{
name: "valid",
req: &types.QueryParamsRequest{},
expErr: false,
expErrMsg: "empty address string is not allowed",
resp: &types.QueryParamsResponse{
Params: expectedParams,
},
},
}
for _, tc := range testCases {
suite.Run(tc.name, func() {
if tc.preRun != nil {
tc.preRun()
}
resp, err := suite.queryServer.Params(suite.ctx, tc.req)
if tc.expErr {
suite.Require().Error(err)
suite.Require().Contains(err.Error(), tc.expErrMsg)
} else {
suite.Require().NoError(err)
suite.Require().Equal(tc.resp, resp)
}
})
}
}
func (suite *KeeperTestSuite) TestCommunityPool() {
testCases := []struct {
name string
preRun func()
req *types.QueryCommunityPoolRequest
expErr bool
expErrMsg string
resp *types.QueryCommunityPoolResponse
}{
{
name: "nil request - error",
req: nil,
expErr: true,
expErrMsg: "rpc error: code = InvalidArgument desc = empty request",
},
{
name: "valid",
preRun: func() {
suite.authKeeper.EXPECT().GetModuleAccount(gomock.Any(), types.ModuleName).Return(poolAcc).Times(1)
suite.bankKeeper.EXPECT().GetAllBalances(gomock.Any(), poolAcc.GetAddress()).Return(sdk.NewCoins(fooCoin)).Times(1)
},
req: &types.QueryCommunityPoolRequest{},
resp: &types.QueryCommunityPoolResponse{
Pool: sdk.NewCoins(fooCoin),
},
expErr: false,
expErrMsg: "",
},
}
for _, tc := range testCases {
suite.Run(tc.name, func() {
if tc.preRun != nil {
tc.preRun()
}
resp, err := suite.queryServer.CommunityPool(suite.ctx, tc.req)
if tc.expErr {
suite.Require().Error(err)
suite.Require().Contains(err.Error(), tc.expErrMsg)
} else {
suite.Require().NoError(err)
suite.Require().Equal(tc.resp, resp)
}
})
}
}
func (suite *KeeperTestSuite) TestContinuousFund() {
testCases := []struct {
name string
preRun func()
req *types.QueryContinuousFundRequest
expErr bool
expErrMsg string
resp *types.QueryContinuousFundResponse
}{
{
name: "nil request - error",
req: nil,
expErr: true,
expErrMsg: "empty request",
},
{
name: "invalid address",
req: &types.QueryContinuousFundRequest{
Recipient: "invalid", // not a valid Bech32 address
},
preRun: func() {
// Return a real codec; its StringToBytes will fail for an invalid address.
suite.authKeeper.EXPECT().AddressCodec().
Return(address.NewBech32Codec("cosmos")).AnyTimes()
},
expErr: true,
expErrMsg: "invalid address:",
},
{
name: "fund not found",
req: &types.QueryContinuousFundRequest{
Recipient: recipientAddr.String(), // valid format but not set in store
},
preRun: func() {
suite.authKeeper.EXPECT().AddressCodec().
Return(address.NewBech32Codec("cosmos")).AnyTimes()
},
expErr: true,
expErrMsg: "not found",
},
{
name: "valid continuous fund",
req: &types.QueryContinuousFundRequest{
Recipient: recipientAddr.String(),
},
preRun: func() {
// Use the real codec to convert the address.
suite.authKeeper.EXPECT().AddressCodec().
Return(address.NewBech32Codec("cosmos")).AnyTimes()
// Insert a continuous fund directly into the pool keeper.
fund := types.ContinuousFund{
Recipient: recipientAddr.String(),
Percentage: math.LegacyMustNewDecFromStr("0.5"),
Expiry: nil,
}
err := suite.poolKeeper.ContinuousFunds.Set(suite.ctx, recipientAddr, fund)
suite.Require().NoError(err)
},
expErr: false,
resp: &types.QueryContinuousFundResponse{
ContinuousFund: types.ContinuousFund{
Recipient: recipientAddr.String(),
Percentage: math.LegacyMustNewDecFromStr("0.5"),
Expiry: nil,
},
},
},
}
for _, tc := range testCases {
suite.Run(tc.name, func() {
if tc.preRun != nil {
tc.preRun()
}
resp, err := suite.queryServer.ContinuousFund(suite.ctx, tc.req)
if tc.expErr {
suite.Require().Error(err)
suite.Require().Contains(err.Error(), tc.expErrMsg)
} else {
suite.Require().NoError(err)
suite.Require().Equal(tc.resp.ContinuousFund.Recipient, resp.ContinuousFund.Recipient)
suite.Require().Equal(tc.resp.ContinuousFund.Percentage, resp.ContinuousFund.Percentage)
suite.Require().Equal(tc.resp.ContinuousFund.Expiry, resp.ContinuousFund.Expiry)
}
})
}
}
func (suite *KeeperTestSuite) TestContinuousFunds() {
testCases := []struct {
name string
preRun func()
req *types.QueryContinuousFundsRequest
expErr bool
expErrMsg string
resp *types.QueryContinuousFundsResponse
}{
{
name: "nil request - error",
req: nil,
expErr: true,
expErrMsg: "empty request",
},
{
name: "no continuous funds",
req: &types.QueryContinuousFundsRequest{},
preRun: nil,
expErr: false,
resp: &types.QueryContinuousFundsResponse{
ContinuousFunds: []types.ContinuousFund{},
},
},
{
name: "valid continuous funds",
req: &types.QueryContinuousFundsRequest{},
preRun: func() {
// Insert two continuous funds directly into the keeper.
fund1 := types.ContinuousFund{
Recipient: recipientAddr.String(),
Percentage: math.LegacyMustNewDecFromStr("0.3"),
Expiry: nil,
}
err := suite.poolKeeper.ContinuousFunds.Set(suite.ctx, recipientAddr, fund1)
suite.Require().NoError(err)
fund2 := types.ContinuousFund{
Recipient: recipientAddr2.String(),
Percentage: math.LegacyMustNewDecFromStr("0.7"),
Expiry: nil,
}
err = suite.poolKeeper.ContinuousFunds.Set(suite.ctx, recipientAddr2, fund2)
suite.Require().NoError(err)
},
expErr: false,
resp: &types.QueryContinuousFundsResponse{
ContinuousFunds: []types.ContinuousFund{
{
Recipient: recipientAddr.String(),
Percentage: math.LegacyMustNewDecFromStr("0.3"),
Expiry: nil,
},
{
Recipient: recipientAddr2.String(),
Percentage: math.LegacyMustNewDecFromStr("0.7"),
Expiry: nil,
},
},
},
},
}
for _, tc := range testCases {
suite.Run(tc.name, func() {
if tc.preRun != nil {
tc.preRun()
}
resp, err := suite.queryServer.ContinuousFunds(suite.ctx, tc.req)
if tc.expErr {
suite.Require().Error(err)
suite.Require().Contains(err.Error(), tc.expErrMsg)
} else {
suite.Require().NoError(err)
suite.Require().ElementsMatch(tc.resp.ContinuousFunds, resp.ContinuousFunds)
}
})
}
}