github.com/DapperCollectives/CAST/backend@v0.0.0-20230921221157-1350c8be7c96/tests/test_utils/leaderboard_utils.go (about)

     1  package test_utils
     2  
     3  import (
     4  	"strconv"
     5  )
     6  
     7  func (otu *OverflowTestUtils) GenerateVotes(communityId int, numProposals int, numUsers int) {
     8  	if numProposals == 0 {
     9  		panic("0 invalid value for numProposals")
    10  	}
    11  	if numUsers == 0 {
    12  		panic("0 invalid value for numUsers")
    13  	}
    14  
    15  	proposalIds := otu.AddActiveProposals(communityId, numProposals)
    16  	voteChoice := "a"
    17  
    18  	for _, id := range proposalIds {
    19  		for i := 1; i <= numUsers; i++ {
    20  			otu.CreateVoteAPI(id, otu.GenerateValidVotePayload("user"+strconv.Itoa(i), id, voteChoice))
    21  		}
    22  	}
    23  }
    24  
    25  func (otu *OverflowTestUtils) GenerateEarlyVoteAchievements(communityId int, numProposals int, numUsers int) []int {
    26  	if numProposals == 0 {
    27  		panic("0 invalid value for numProposals")
    28  	}
    29  	if numUsers == 0 {
    30  		panic("0 invalid value for numUsers")
    31  	}
    32  
    33  	proposalIds := otu.AddActiveProposalsWithStartTimeNow(communityId, numProposals)
    34  	voteChoice := "a"
    35  
    36  	for _, id := range proposalIds {
    37  		for i := 1; i <= numUsers; i++ {
    38  			otu.CreateVoteAPI(id, otu.GenerateValidVotePayload("user"+strconv.Itoa(i), id, voteChoice))
    39  		}
    40  	}
    41  
    42  	return proposalIds
    43  }
    44  
    45  func (otu *OverflowTestUtils) GenerateSingleStreakAchievements(communityId int, streakLengths []int) {
    46  	if len(streakLengths) == 0 {
    47  		panic("Must have at least one streak length")
    48  	}
    49  
    50  	proposalIds := otu.AddActiveProposals(communityId, max(streakLengths))
    51  	voteChoice := "a"
    52  
    53  	for i, l := range streakLengths {
    54  		for j := 0; j < l; j++ {
    55  			otu.CreateVoteAPI(proposalIds[j], otu.GenerateValidVotePayload("user"+strconv.Itoa(i+1), proposalIds[j], voteChoice))
    56  		}
    57  	}
    58  }
    59  
    60  func (otu *OverflowTestUtils) GenerateMultiStreakAchievements(communityId int, streakLengths []int) {
    61  	if len(streakLengths) < 2 {
    62  		panic("Must have at least two streak lengths")
    63  	}
    64  
    65  	// create enough proposals for streak lengths and gaps to create multiple separate streaks
    66  	numProposals := max(streakLengths)*len(streakLengths) + len(streakLengths)
    67  	proposalIds := otu.AddActiveProposals(communityId, numProposals)
    68  	voteChoice := "a"
    69  
    70  	i := 0
    71  	for _, l := range streakLengths {
    72  		for j := 0; j < l; j++ {
    73  			otu.CreateVoteAPI(proposalIds[i], otu.GenerateValidVotePayload("user1", proposalIds[i], voteChoice))
    74  			i++
    75  		}
    76  		i++ // skip a proposal to start next streak
    77  	}
    78  }
    79  
    80  func (otu *OverflowTestUtils) GenerateWinningVoteAchievement(communityId int, strategy string) int {
    81  	proposalIds, _ := otu.AddProposalsForStrategy(communityId, strategy, 1)
    82  	proposalId := proposalIds[0]
    83  	winningChoice := "a"
    84  	losingChoice := "b"
    85  
    86  	otu.CreateVoteAPI(proposalId, otu.GenerateValidVotePayload("user1", proposalId, losingChoice))
    87  	otu.CreateVoteAPI(proposalId, otu.GenerateValidVotePayload("user2", proposalId, winningChoice))
    88  	otu.CreateVoteAPI(proposalId, otu.GenerateValidVotePayload("user3", proposalId, winningChoice))
    89  	otu.CreateVoteAPI(proposalId, otu.GenerateValidVotePayload("user4", proposalId, winningChoice))
    90  
    91  	return proposalId
    92  }
    93  
    94  func max(s []int) int {
    95  	var m int
    96  	for i, v := range s {
    97  		if i == 0 || v > m {
    98  			m = v
    99  		}
   100  	}
   101  	return m
   102  }