github.com/Finschia/finschia-sdk@v0.49.1/x/gov/keeper/deposit_test.go (about)

     1  package keeper_test
     2  
     3  import (
     4  	"testing"
     5  	"time"
     6  
     7  	"github.com/stretchr/testify/require"
     8  	tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
     9  
    10  	"github.com/Finschia/finschia-sdk/simapp"
    11  	sdk "github.com/Finschia/finschia-sdk/types"
    12  )
    13  
    14  func TestDeposits(t *testing.T) {
    15  	app := simapp.Setup(false)
    16  	ctx := app.BaseApp.NewContext(false, tmproto.Header{})
    17  
    18  	TestAddrs := simapp.AddTestAddrsIncremental(app, ctx, 2, sdk.NewInt(10000000))
    19  
    20  	tp := TestProposal
    21  	proposal, err := app.GovKeeper.SubmitProposal(ctx, tp)
    22  	require.NoError(t, err)
    23  	proposalID := proposal.ProposalId
    24  
    25  	fourStake := sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, app.StakingKeeper.TokensFromConsensusPower(ctx, 4)))
    26  	fiveStake := sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, app.StakingKeeper.TokensFromConsensusPower(ctx, 5)))
    27  
    28  	addr0Initial := app.BankKeeper.GetAllBalances(ctx, TestAddrs[0])
    29  	addr1Initial := app.BankKeeper.GetAllBalances(ctx, TestAddrs[1])
    30  
    31  	require.True(t, proposal.TotalDeposit.Equal(sdk.NewCoins()))
    32  
    33  	// Check no deposits at beginning
    34  	_, found := app.GovKeeper.GetDeposit(ctx, proposalID, TestAddrs[1])
    35  	require.False(t, found)
    36  	proposal, ok := app.GovKeeper.GetProposal(ctx, proposalID)
    37  	require.True(t, ok)
    38  	require.True(t, proposal.VotingStartTime.Equal(time.Time{}))
    39  
    40  	// Check first deposit
    41  	votingStarted, err := app.GovKeeper.AddDeposit(ctx, proposalID, TestAddrs[0], fourStake)
    42  	require.NoError(t, err)
    43  	require.False(t, votingStarted)
    44  	deposit, found := app.GovKeeper.GetDeposit(ctx, proposalID, TestAddrs[0])
    45  	require.True(t, found)
    46  	require.Equal(t, fourStake, deposit.Amount)
    47  	require.Equal(t, TestAddrs[0].String(), deposit.Depositor)
    48  	proposal, ok = app.GovKeeper.GetProposal(ctx, proposalID)
    49  	require.True(t, ok)
    50  	require.Equal(t, fourStake, proposal.TotalDeposit)
    51  	require.Equal(t, addr0Initial.Sub(fourStake), app.BankKeeper.GetAllBalances(ctx, TestAddrs[0]))
    52  
    53  	// Check a second deposit from same address
    54  	votingStarted, err = app.GovKeeper.AddDeposit(ctx, proposalID, TestAddrs[0], fiveStake)
    55  	require.NoError(t, err)
    56  	require.False(t, votingStarted)
    57  	deposit, found = app.GovKeeper.GetDeposit(ctx, proposalID, TestAddrs[0])
    58  	require.True(t, found)
    59  	require.Equal(t, fourStake.Add(fiveStake...), deposit.Amount)
    60  	require.Equal(t, TestAddrs[0].String(), deposit.Depositor)
    61  	proposal, ok = app.GovKeeper.GetProposal(ctx, proposalID)
    62  	require.True(t, ok)
    63  	require.Equal(t, fourStake.Add(fiveStake...), proposal.TotalDeposit)
    64  	require.Equal(t, addr0Initial.Sub(fourStake).Sub(fiveStake), app.BankKeeper.GetAllBalances(ctx, TestAddrs[0]))
    65  
    66  	// Check third deposit from a new address
    67  	votingStarted, err = app.GovKeeper.AddDeposit(ctx, proposalID, TestAddrs[1], fourStake)
    68  	require.NoError(t, err)
    69  	require.True(t, votingStarted)
    70  	deposit, found = app.GovKeeper.GetDeposit(ctx, proposalID, TestAddrs[1])
    71  	require.True(t, found)
    72  	require.Equal(t, TestAddrs[1].String(), deposit.Depositor)
    73  	require.Equal(t, fourStake, deposit.Amount)
    74  	proposal, ok = app.GovKeeper.GetProposal(ctx, proposalID)
    75  	require.True(t, ok)
    76  	require.Equal(t, fourStake.Add(fiveStake...).Add(fourStake...), proposal.TotalDeposit)
    77  	require.Equal(t, addr1Initial.Sub(fourStake), app.BankKeeper.GetAllBalances(ctx, TestAddrs[1]))
    78  
    79  	// Check that proposal moved to voting period
    80  	proposal, ok = app.GovKeeper.GetProposal(ctx, proposalID)
    81  	require.True(t, ok)
    82  	require.True(t, proposal.VotingStartTime.Equal(ctx.BlockHeader().Time))
    83  
    84  	// Test deposit iterator
    85  	// NOTE order of deposits is determined by the addresses
    86  	deposits := app.GovKeeper.GetAllDeposits(ctx)
    87  	require.Len(t, deposits, 2)
    88  	require.Equal(t, deposits, app.GovKeeper.GetDeposits(ctx, proposalID))
    89  	require.Equal(t, TestAddrs[0].String(), deposits[0].Depositor)
    90  	require.Equal(t, fourStake.Add(fiveStake...), deposits[0].Amount)
    91  	require.Equal(t, TestAddrs[1].String(), deposits[1].Depositor)
    92  	require.Equal(t, fourStake, deposits[1].Amount)
    93  
    94  	// Test Refund Deposits
    95  	deposit, found = app.GovKeeper.GetDeposit(ctx, proposalID, TestAddrs[1])
    96  	require.True(t, found)
    97  	require.Equal(t, fourStake, deposit.Amount)
    98  	app.GovKeeper.RefundDeposits(ctx, proposalID)
    99  	_, found = app.GovKeeper.GetDeposit(ctx, proposalID, TestAddrs[1])
   100  	require.False(t, found)
   101  	require.Equal(t, addr0Initial, app.BankKeeper.GetAllBalances(ctx, TestAddrs[0]))
   102  	require.Equal(t, addr1Initial, app.BankKeeper.GetAllBalances(ctx, TestAddrs[1]))
   103  
   104  	// Test delete deposits
   105  	_, err = app.GovKeeper.AddDeposit(ctx, proposalID, TestAddrs[0], fourStake)
   106  	require.NoError(t, err)
   107  	app.GovKeeper.DeleteDeposits(ctx, proposalID)
   108  	deposits = app.GovKeeper.GetDeposits(ctx, proposalID)
   109  	require.Len(t, deposits, 0)
   110  }