github.com/Finschia/finschia-sdk@v0.48.1/x/foundation/keeper/internal/vote_test.go (about) 1 package internal_test 2 3 import ( 4 "time" 5 6 sdk "github.com/Finschia/finschia-sdk/types" 7 "github.com/Finschia/finschia-sdk/x/foundation" 8 ) 9 10 func (s *KeeperTestSuite) TestVote() { 11 // no such a vote 12 _, err := s.impl.GetVote(s.ctx, s.nextProposal, s.members[0]) 13 s.Require().Error(err) 14 15 testCases := map[string]struct { 16 proposalID uint64 17 voter sdk.AccAddress 18 option foundation.VoteOption 19 metadata string 20 after time.Duration 21 valid bool 22 }{ 23 "vote yes": { 24 proposalID: s.activeProposal, 25 voter: s.members[0], 26 option: foundation.VOTE_OPTION_YES, 27 valid: true, 28 }, 29 "vote no": { 30 proposalID: s.activeProposal, 31 voter: s.members[0], 32 option: foundation.VOTE_OPTION_NO, 33 valid: true, 34 }, 35 "already voted": { 36 proposalID: s.votedProposal, 37 voter: s.members[0], 38 option: foundation.VOTE_OPTION_YES, 39 }, 40 "no such a proposal": { 41 proposalID: s.nextProposal, 42 voter: s.members[0], 43 option: foundation.VOTE_OPTION_YES, 44 }, 45 "inactive proposal": { 46 proposalID: s.withdrawnProposal, 47 voter: s.members[0], 48 option: foundation.VOTE_OPTION_YES, 49 }, 50 "long metadata": { 51 proposalID: s.activeProposal, 52 voter: s.members[0], 53 option: foundation.VOTE_OPTION_YES, 54 metadata: string(make([]rune, 256)), 55 }, 56 "voting too late": { 57 proposalID: s.activeProposal, 58 voter: s.members[0], 59 option: foundation.VOTE_OPTION_YES, 60 after: s.impl.GetFoundationInfo(s.ctx).GetDecisionPolicy().GetVotingPeriod(), 61 }, 62 } 63 64 for name, tc := range testCases { 65 s.Run(name, func() { 66 ctx, _ := s.ctx.CacheContext() 67 ctx = ctx.WithBlockTime(ctx.BlockTime().Add(tc.after)) 68 69 vote := foundation.Vote{ 70 ProposalId: tc.proposalID, 71 Voter: tc.voter.String(), 72 Option: tc.option, 73 Metadata: tc.metadata, 74 } 75 err := s.impl.Vote(ctx, vote) 76 if !tc.valid { 77 s.Require().Error(err) 78 return 79 } 80 s.Require().NoError(err) 81 82 _, err = s.impl.GetVote(ctx, vote.ProposalId, sdk.MustAccAddressFromBech32(vote.Voter)) 83 s.Require().NoError(err) 84 }) 85 } 86 }