github.com/Finschia/finschia-sdk@v0.48.1/x/gov/keeper/vote_test.go (about) 1 package keeper_test 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/require" 7 tmproto "github.com/tendermint/tendermint/proto/tendermint/types" 8 9 "github.com/Finschia/finschia-sdk/simapp" 10 sdk "github.com/Finschia/finschia-sdk/types" 11 "github.com/Finschia/finschia-sdk/x/gov/types" 12 ) 13 14 func TestVotes(t *testing.T) { 15 app := simapp.Setup(false) 16 ctx := app.BaseApp.NewContext(false, tmproto.Header{}) 17 18 addrs := simapp.AddTestAddrsIncremental(app, ctx, 5, sdk.NewInt(30000000)) 19 20 tp := TestProposal 21 proposal, err := app.GovKeeper.SubmitProposal(ctx, tp) 22 require.NoError(t, err) 23 proposalID := proposal.ProposalId 24 25 var invalidOption types.VoteOption = 0x10 26 27 require.Error(t, app.GovKeeper.AddVote(ctx, proposalID, addrs[0], types.NewNonSplitVoteOption(types.OptionYes)), "proposal not on voting period") 28 require.Error(t, app.GovKeeper.AddVote(ctx, 10, addrs[0], types.NewNonSplitVoteOption(types.OptionYes)), "invalid proposal ID") 29 30 proposal.Status = types.StatusVotingPeriod 31 app.GovKeeper.SetProposal(ctx, proposal) 32 33 require.Error(t, app.GovKeeper.AddVote(ctx, proposalID, addrs[0], types.NewNonSplitVoteOption(invalidOption)), "invalid option") 34 35 // Test first vote 36 require.NoError(t, app.GovKeeper.AddVote(ctx, proposalID, addrs[0], types.NewNonSplitVoteOption(types.OptionAbstain))) 37 vote, found := app.GovKeeper.GetVote(ctx, proposalID, addrs[0]) 38 require.True(t, found) 39 require.Equal(t, addrs[0].String(), vote.Voter) 40 require.Equal(t, proposalID, vote.ProposalId) 41 require.True(t, len(vote.Options) == 1) 42 require.Equal(t, types.OptionAbstain, vote.Options[0].Option) 43 require.Equal(t, types.OptionAbstain, vote.Option) 44 45 // Test change of vote 46 require.NoError(t, app.GovKeeper.AddVote(ctx, proposalID, addrs[0], types.NewNonSplitVoteOption(types.OptionYes))) 47 vote, found = app.GovKeeper.GetVote(ctx, proposalID, addrs[0]) 48 require.True(t, found) 49 require.Equal(t, addrs[0].String(), vote.Voter) 50 require.Equal(t, proposalID, vote.ProposalId) 51 require.True(t, len(vote.Options) == 1) 52 require.Equal(t, types.OptionYes, vote.Options[0].Option) 53 require.Equal(t, types.OptionYes, vote.Option) 54 55 // Test second vote 56 require.NoError(t, app.GovKeeper.AddVote(ctx, proposalID, addrs[1], types.WeightedVoteOptions{ 57 types.WeightedVoteOption{Option: types.OptionYes, Weight: sdk.NewDecWithPrec(60, 2)}, 58 types.WeightedVoteOption{Option: types.OptionNo, Weight: sdk.NewDecWithPrec(30, 2)}, 59 types.WeightedVoteOption{Option: types.OptionAbstain, Weight: sdk.NewDecWithPrec(5, 2)}, 60 types.WeightedVoteOption{Option: types.OptionNoWithVeto, Weight: sdk.NewDecWithPrec(5, 2)}, 61 })) 62 vote, found = app.GovKeeper.GetVote(ctx, proposalID, addrs[1]) 63 require.True(t, found) 64 require.Equal(t, addrs[1].String(), vote.Voter) 65 require.Equal(t, proposalID, vote.ProposalId) 66 require.True(t, len(vote.Options) == 4) 67 require.Equal(t, types.OptionYes, vote.Options[0].Option) 68 require.Equal(t, types.OptionNo, vote.Options[1].Option) 69 require.Equal(t, types.OptionAbstain, vote.Options[2].Option) 70 require.Equal(t, types.OptionNoWithVeto, vote.Options[3].Option) 71 require.True(t, vote.Options[0].Weight.Equal(sdk.NewDecWithPrec(60, 2))) 72 require.True(t, vote.Options[1].Weight.Equal(sdk.NewDecWithPrec(30, 2))) 73 require.True(t, vote.Options[2].Weight.Equal(sdk.NewDecWithPrec(5, 2))) 74 require.True(t, vote.Options[3].Weight.Equal(sdk.NewDecWithPrec(5, 2))) 75 require.Equal(t, types.OptionEmpty, vote.Option) 76 77 // Test vote iterator 78 // NOTE order of deposits is determined by the addresses 79 votes := app.GovKeeper.GetAllVotes(ctx) 80 require.Len(t, votes, 2) 81 require.Equal(t, votes, app.GovKeeper.GetVotes(ctx, proposalID)) 82 require.Equal(t, addrs[0].String(), votes[0].Voter) 83 require.Equal(t, proposalID, votes[0].ProposalId) 84 require.True(t, len(votes[0].Options) == 1) 85 require.Equal(t, types.OptionYes, votes[0].Options[0].Option) 86 require.Equal(t, addrs[1].String(), votes[1].Voter) 87 require.Equal(t, proposalID, votes[1].ProposalId) 88 require.True(t, len(votes[1].Options) == 4) 89 require.True(t, votes[1].Options[0].Weight.Equal(sdk.NewDecWithPrec(60, 2))) 90 require.True(t, votes[1].Options[1].Weight.Equal(sdk.NewDecWithPrec(30, 2))) 91 require.True(t, votes[1].Options[2].Weight.Equal(sdk.NewDecWithPrec(5, 2))) 92 require.True(t, votes[1].Options[3].Weight.Equal(sdk.NewDecWithPrec(5, 2))) 93 require.Equal(t, types.OptionEmpty, vote.Option) 94 }