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  }