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 }