github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/distribution/proposal_handler_test.go (about)

     1  package distribution
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/require"
     7  
     8  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
     9  	"github.com/fibonacci-chain/fbc/libs/tendermint/crypto/ed25519"
    10  	govtypes "github.com/fibonacci-chain/fbc/x/gov/types"
    11  
    12  	"github.com/fibonacci-chain/fbc/x/distribution/keeper"
    13  	"github.com/fibonacci-chain/fbc/x/distribution/types"
    14  )
    15  
    16  var (
    17  	delPk1   = ed25519.GenPrivKey().PubKey()
    18  	delAddr1 = sdk.AccAddress(delPk1.Address())
    19  
    20  	amount = sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(1)))
    21  )
    22  
    23  func testProposal(recipient sdk.AccAddress, amount sdk.Coins) govtypes.Proposal {
    24  	return govtypes.Proposal{Content: types.NewCommunityPoolSpendProposal(
    25  		"Test",
    26  		"description",
    27  		recipient,
    28  		amount,
    29  	)}
    30  }
    31  
    32  func TestProposalHandlerPassed(t *testing.T) {
    33  	ctx, accountKeeper, k, _, supplyKeeper := keeper.CreateTestInputDefault(t, false, 10)
    34  	recipient := delAddr1
    35  
    36  	// add coins to the module account
    37  	macc := k.GetDistributionAccount(ctx)
    38  	err := macc.SetCoins(macc.GetCoins().Add(amount...))
    39  	require.NoError(t, err)
    40  
    41  	supplyKeeper.SetModuleAccount(ctx, macc)
    42  
    43  	account := accountKeeper.NewAccountWithAddress(ctx, recipient)
    44  	require.True(t, account.GetCoins().IsZero())
    45  	accountKeeper.SetAccount(ctx, account)
    46  
    47  	feePool := k.GetFeePool(ctx)
    48  	feePool.CommunityPool = sdk.NewCoins(amount...)
    49  	k.SetFeePool(ctx, feePool)
    50  
    51  	tp := testProposal(recipient, amount)
    52  	hdlr := NewDistributionProposalHandler(k)
    53  	require.NoError(t, hdlr(ctx, &tp))
    54  	require.Equal(t, accountKeeper.GetAccount(ctx, recipient).GetCoins(), amount)
    55  }
    56  
    57  func TestProposalHandlerFailed(t *testing.T) {
    58  	ctx, accountKeeper, k, _, _ := keeper.CreateTestInputDefault(t, false, 10)
    59  	recipient := delAddr1
    60  
    61  	account := accountKeeper.NewAccountWithAddress(ctx, recipient)
    62  	require.True(t, account.GetCoins().IsZero())
    63  	accountKeeper.SetAccount(ctx, account)
    64  
    65  	tp := testProposal(recipient, amount)
    66  	hdlr := NewDistributionProposalHandler(k)
    67  	require.Error(t, hdlr(ctx, &tp))
    68  	require.True(t, accountKeeper.GetAccount(ctx, recipient).GetCoins().IsZero())
    69  }