mirror of
https://github.com/0glabs/0g-chain.git
synced 2024-11-10 18:15:19 +00:00
112 lines
2.8 KiB
Go
112 lines
2.8 KiB
Go
|
package keeper_test
|
||
|
|
||
|
import (
|
||
|
"testing"
|
||
|
|
||
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||
|
"github.com/stretchr/testify/suite"
|
||
|
|
||
|
"github.com/kava-labs/kava/app"
|
||
|
"github.com/kava-labs/kava/x/community/keeper"
|
||
|
"github.com/kava-labs/kava/x/community/testutil"
|
||
|
"github.com/kava-labs/kava/x/community/types"
|
||
|
)
|
||
|
|
||
|
type msgServerTestSuite struct {
|
||
|
testutil.Suite
|
||
|
|
||
|
communityPool sdk.AccAddress
|
||
|
msgServer types.MsgServer
|
||
|
}
|
||
|
|
||
|
func (suite *msgServerTestSuite) SetupTest() {
|
||
|
suite.Suite.SetupTest()
|
||
|
|
||
|
suite.communityPool = suite.App.GetAccountKeeper().GetModuleAddress(types.ModuleAccountName)
|
||
|
suite.msgServer = keeper.NewMsgServerImpl(suite.Keeper)
|
||
|
}
|
||
|
|
||
|
func TestMsgServerTestSuite(t *testing.T) {
|
||
|
suite.Run(t, new(msgServerTestSuite))
|
||
|
}
|
||
|
|
||
|
func (suite *msgServerTestSuite) TestMsgFundCommunityPool() {
|
||
|
singleCoin := sdk.NewCoins(sdk.NewCoin("ukava", sdk.NewInt(2e6)))
|
||
|
multipleCoins := sdk.NewCoins(
|
||
|
sdk.NewCoin("ukava", sdk.NewInt(3e6)),
|
||
|
sdk.NewCoin("usdx", sdk.NewInt(1e7)),
|
||
|
)
|
||
|
testCases := []struct {
|
||
|
name string
|
||
|
setup func() *types.MsgFundCommunityPool
|
||
|
expectedBalance sdk.Coins
|
||
|
shouldPass bool
|
||
|
}{
|
||
|
{
|
||
|
name: "valid funding of single coin",
|
||
|
setup: func() *types.MsgFundCommunityPool {
|
||
|
sender := app.RandomAddress()
|
||
|
suite.App.FundAccount(suite.Ctx, sender, singleCoin)
|
||
|
return &types.MsgFundCommunityPool{
|
||
|
Amount: singleCoin,
|
||
|
Depositor: sender.String(),
|
||
|
}
|
||
|
},
|
||
|
expectedBalance: singleCoin,
|
||
|
shouldPass: true,
|
||
|
},
|
||
|
{
|
||
|
name: "valid funding of multiple coins",
|
||
|
setup: func() *types.MsgFundCommunityPool {
|
||
|
sender := app.RandomAddress()
|
||
|
suite.App.FundAccount(suite.Ctx, sender, multipleCoins)
|
||
|
return &types.MsgFundCommunityPool{
|
||
|
Amount: multipleCoins,
|
||
|
Depositor: sender.String(),
|
||
|
}
|
||
|
},
|
||
|
expectedBalance: multipleCoins,
|
||
|
shouldPass: true,
|
||
|
},
|
||
|
{
|
||
|
name: "invalid - failing message validation",
|
||
|
setup: func() *types.MsgFundCommunityPool {
|
||
|
return &types.MsgFundCommunityPool{
|
||
|
Amount: sdk.NewCoins(),
|
||
|
Depositor: app.RandomAddress().String(),
|
||
|
}
|
||
|
},
|
||
|
expectedBalance: sdk.NewCoins(),
|
||
|
shouldPass: false,
|
||
|
},
|
||
|
{
|
||
|
name: "invalid - failing tx, insufficient funds",
|
||
|
setup: func() *types.MsgFundCommunityPool {
|
||
|
return &types.MsgFundCommunityPool{
|
||
|
Amount: singleCoin,
|
||
|
Depositor: app.RandomAddress().String(),
|
||
|
}
|
||
|
},
|
||
|
expectedBalance: sdk.NewCoins(),
|
||
|
shouldPass: false,
|
||
|
},
|
||
|
}
|
||
|
|
||
|
for _, tc := range testCases {
|
||
|
suite.Run(tc.name, func() {
|
||
|
suite.SetupTest()
|
||
|
|
||
|
msg := tc.setup()
|
||
|
_, err := suite.msgServer.FundCommunityPool(sdk.WrapSDKContext(suite.Ctx), msg)
|
||
|
if tc.shouldPass {
|
||
|
suite.NoError(err)
|
||
|
} else {
|
||
|
suite.Error(err)
|
||
|
}
|
||
|
|
||
|
balance := suite.Keeper.GetModuleAccountBalance(suite.Ctx)
|
||
|
suite.App.CheckBalance(suite.T(), suite.Ctx, suite.communityPool, balance)
|
||
|
})
|
||
|
}
|
||
|
}
|