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

     1  package keeper
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/require"
     7  
     8  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/gov/types"
     9  )
    10  
    11  func TestVotes(t *testing.T) {
    12  	ctx, _, keeper, _, _ := createTestInput(t, false, 100)
    13  
    14  	tp := TestProposal
    15  	proposal, err := keeper.SubmitProposal(ctx, tp)
    16  	require.NoError(t, err)
    17  	proposalID := proposal.ProposalID
    18  
    19  	var invalidOption types.VoteOption = 0x10
    20  
    21  	require.Error(t, keeper.AddVote(ctx, proposalID, TestAddrs[0], types.OptionYes), "proposal not on voting period")
    22  	require.Error(t, keeper.AddVote(ctx, 10, TestAddrs[0], types.OptionYes), "invalid proposal ID")
    23  
    24  	proposal.Status = types.StatusVotingPeriod
    25  	keeper.SetProposal(ctx, proposal)
    26  
    27  	require.Error(t, keeper.AddVote(ctx, proposalID, TestAddrs[0], invalidOption), "invalid option")
    28  
    29  	// Test first vote
    30  	require.NoError(t, keeper.AddVote(ctx, proposalID, TestAddrs[0], types.OptionAbstain))
    31  	vote, found := keeper.GetVote(ctx, proposalID, TestAddrs[0])
    32  	require.True(t, found)
    33  	require.Equal(t, TestAddrs[0], vote.Voter)
    34  	require.Equal(t, proposalID, vote.ProposalID)
    35  	require.Equal(t, types.OptionAbstain, vote.Option)
    36  
    37  	// Test change of vote
    38  	require.NoError(t, keeper.AddVote(ctx, proposalID, TestAddrs[0], types.OptionYes))
    39  	vote, found = keeper.GetVote(ctx, proposalID, TestAddrs[0])
    40  	require.True(t, found)
    41  	require.Equal(t, TestAddrs[0], vote.Voter)
    42  	require.Equal(t, proposalID, vote.ProposalID)
    43  	require.Equal(t, types.OptionYes, vote.Option)
    44  
    45  	// Test second vote
    46  	require.NoError(t, keeper.AddVote(ctx, proposalID, TestAddrs[1], types.OptionNoWithVeto))
    47  	vote, found = keeper.GetVote(ctx, proposalID, TestAddrs[1])
    48  	require.True(t, found)
    49  	require.Equal(t, TestAddrs[1], vote.Voter)
    50  	require.Equal(t, proposalID, vote.ProposalID)
    51  	require.Equal(t, types.OptionNoWithVeto, vote.Option)
    52  
    53  	// Test vote iterator
    54  	// NOTE order of deposits is determined by the addresses
    55  	votes := keeper.GetAllVotes(ctx)
    56  	require.Len(t, votes, 2)
    57  	require.Equal(t, votes, keeper.GetVotes(ctx, proposalID))
    58  	require.Equal(t, TestAddrs[0], votes[0].Voter)
    59  	require.Equal(t, proposalID, votes[0].ProposalID)
    60  	require.Equal(t, types.OptionYes, votes[0].Option)
    61  	require.Equal(t, TestAddrs[1], votes[1].Voter)
    62  	require.Equal(t, proposalID, votes[1].ProposalID)
    63  	require.Equal(t, types.OptionNoWithVeto, votes[1].Option)
    64  }