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 }