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

     1  package keeper
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
     8  	"github.com/stretchr/testify/require"
     9  
    10  	"github.com/fibonacci-chain/fbc/x/gov/types"
    11  )
    12  
    13  func TestKeeper_AddVote(t *testing.T) {
    14  	ctx, _, keeper, _, _ := CreateTestInput(t, false, 1000)
    15  
    16  	// vote on proposal which is not exist
    17  	err, votefee := keeper.AddVote(ctx, 0, Addrs[0], types.OptionYes)
    18  	require.NotNil(t, err)
    19  	require.Equal(t, "", votefee)
    20  
    21  	content := types.NewTextProposal("Test", "description")
    22  	proposal, err := keeper.SubmitProposal(ctx, content)
    23  	require.Nil(t, err)
    24  	proposalID := proposal.ProposalID
    25  
    26  	// nil address deposit
    27  	err, votefee = keeper.AddVote(ctx, 0, sdk.AccAddress{}, types.OptionYes)
    28  	require.NotNil(t, err)
    29  	require.Equal(t, "", votefee)
    30  
    31  	// vote on proposal whose status is not VotingPeriod
    32  	proposal.Status = types.StatusPassed
    33  	keeper.SetProposal(ctx, proposal)
    34  	err, votefee = keeper.AddVote(ctx, proposalID, Addrs[0], types.OptionYes)
    35  	require.NotNil(t, err)
    36  	require.Equal(t, "", votefee)
    37  
    38  	proposal.Status = types.StatusVotingPeriod
    39  	keeper.SetProposal(ctx, proposal)
    40  
    41  	// vote invalid vote option
    42  	err, votefee = keeper.AddVote(ctx, proposalID, Addrs[0], types.OptionEmpty)
    43  	require.NotNil(t, err)
    44  	require.Equal(t, "", votefee)
    45  
    46  	// change old vote and activate proposal
    47  	err, votefee = keeper.AddVote(ctx, proposalID, Addrs[0], types.OptionYes)
    48  	require.Nil(t, err)
    49  	require.Equal(t, "", votefee)
    50  	vote, ok := keeper.GetVote(ctx, proposalID, Addrs[0])
    51  	expectedVote := types.Vote{ProposalID: proposalID, Voter: Addrs[0], Option: types.OptionYes}
    52  	require.True(t, ok)
    53  	require.Equal(t, expectedVote, vote)
    54  
    55  	err, votefee = keeper.AddVote(ctx, proposalID, Addrs[0], types.OptionNo)
    56  	require.Nil(t, err)
    57  	require.Equal(t, "", votefee)
    58  	vote, ok = keeper.GetVote(ctx, proposalID, Addrs[0])
    59  	expectedVote = types.Vote{ProposalID: proposalID, Voter: Addrs[0], Option: types.OptionNo}
    60  	require.True(t, ok)
    61  	require.Equal(t, expectedVote, vote)
    62  }
    63  
    64  func TestKeeper_GetVote(t *testing.T) {
    65  	ctx, _, keeper, _, _ := CreateTestInput(t, false, 1000)
    66  
    67  	content := types.NewTextProposal("Test", "description")
    68  	proposal, err := keeper.SubmitProposal(ctx, content)
    69  	require.Nil(t, err)
    70  	proposalID := proposal.ProposalID
    71  
    72  	err = keeper.AddDeposit(ctx, proposalID, Addrs[0],
    73  		sdk.SysCoins{sdk.NewInt64DecCoin(sdk.DefaultBondDenom, 150)}, "")
    74  	require.Nil(t, err)
    75  
    76  	err, voteFee := keeper.AddVote(ctx, proposalID, Addrs[0], types.OptionYes)
    77  	fmt.Println(err)
    78  	require.Nil(t, err)
    79  	require.Equal(t, "", voteFee)
    80  
    81  	expectedVote := types.Vote{
    82  		ProposalID: proposalID, Voter: Addrs[0],
    83  		Option: types.OptionYes,
    84  	}
    85  	vote, found := keeper.GetVote(ctx, proposalID, Addrs[0])
    86  	require.True(t, found)
    87  	require.True(t, vote.Equals(expectedVote))
    88  
    89  	// get vote from db
    90  	vote, found = keeper.GetVote(ctx, proposalID, Addrs[0])
    91  	require.True(t, found)
    92  	require.True(t, vote.Equals(expectedVote))
    93  }
    94  
    95  func TestKeeper_GetVotes(t *testing.T) {
    96  	ctx, _, keeper, _, _ := CreateTestInput(t, false, 1000)
    97  
    98  	content := types.NewTextProposal("Test", "description")
    99  	proposal, err := keeper.SubmitProposal(ctx, content)
   100  	require.Nil(t, err)
   101  	proposalID := proposal.ProposalID
   102  
   103  	err = keeper.AddDeposit(ctx, proposalID, Addrs[0],
   104  		sdk.SysCoins{sdk.NewInt64DecCoin(sdk.DefaultBondDenom, 150)}, "")
   105  	require.Nil(t, err)
   106  
   107  	err, voteFee := keeper.AddVote(ctx, proposalID, Addrs[1], types.OptionYes)
   108  	require.Nil(t, err)
   109  	require.Equal(t, "", voteFee)
   110  
   111  	err, voteFee = keeper.AddVote(ctx, proposalID, Addrs[2], types.OptionNo)
   112  	require.Nil(t, err)
   113  	require.Equal(t, "", voteFee)
   114  
   115  	expectedVotes := types.Votes{
   116  		{
   117  			ProposalID: proposalID,
   118  			Voter:      Addrs[1],
   119  			Option:     types.OptionYes,
   120  		},
   121  		{
   122  			ProposalID: proposalID,
   123  			Voter:      Addrs[2],
   124  			Option:     types.OptionNo,
   125  		},
   126  	}
   127  	votes := keeper.GetVotes(ctx, proposalID)
   128  	require.Equal(t, expectedVotes, votes)
   129  
   130  	// get votes from db
   131  	votes = keeper.GetVotes(ctx, proposalID)
   132  	require.Equal(t, expectedVotes, votes)
   133  }
   134  
   135  func TestKeeper_DeleteVotes(t *testing.T) {
   136  	ctx, _, keeper, _, _ := CreateTestInput(t, false, 1000)
   137  
   138  	content := types.NewTextProposal("Test", "description")
   139  	proposal, err := keeper.SubmitProposal(ctx, content)
   140  	require.Nil(t, err)
   141  	proposalID := proposal.ProposalID
   142  
   143  	err = keeper.AddDeposit(ctx, proposalID, Addrs[0],
   144  		sdk.SysCoins{sdk.NewInt64DecCoin(sdk.DefaultBondDenom, 150)}, "")
   145  	require.Nil(t, err)
   146  
   147  	err, voteFee := keeper.AddVote(ctx, proposalID, Addrs[1], types.OptionYes)
   148  	require.Nil(t, err)
   149  	require.Equal(t, "", voteFee)
   150  
   151  	err, voteFee = keeper.AddVote(ctx, proposalID, Addrs[2], types.OptionNo)
   152  	require.Nil(t, err)
   153  	require.Equal(t, "", voteFee)
   154  
   155  	votes := keeper.GetVotes(ctx, proposalID)
   156  	require.Equal(t, 2, len(votes))
   157  	keeper.DeleteVotes(ctx, proposalID)
   158  	votes = keeper.GetVotes(ctx, proposalID)
   159  	require.Equal(t, 0, len(votes))
   160  
   161  	votes = keeper.GetVotes(ctx, proposalID)
   162  	require.Equal(t, 0, len(votes))
   163  }