github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/cosmos-sdk/x/gov/keeper/deposit_test.go (about)

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