AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
ArenaSeasonRewardDistributorTest.cpp File Reference
#include "Define.h"
#include "gmock/gmock.h"
#include "gtest/gtest.h"
#include "ArenaSeasonRewardsDistributor.h"
#include "WorldMock.h"
#include <memory>

Go to the source code of this file.

Classes

class  MockArenaSeasonTeamRewarder
 
class  ArenaSeasonRewardDistributorTest
 

Functions

ArenaTeam ArenaTeamWithRating (int rating, int gamesPlayed)
 
 TEST_F (ArenaSeasonRewardDistributorTest, SingleTeamMultiplePctRewardDistribution)
 
 TEST_F (ArenaSeasonRewardDistributorTest, SingleTeamMultipleAbsRewardDistribution)
 
 TEST_F (ArenaSeasonRewardDistributorTest, ManyTeamsTwoRewardsDistribution)
 
 TEST_F (ArenaSeasonRewardDistributorTest, MinimumRequiredGamesFilter)
 

Function Documentation

◆ ArenaTeamWithRating()

ArenaTeam ArenaTeamWithRating ( int  rating,
int  gamesPlayed 
)
59{
60 ArenaTeamStats stats;
61 stats.Rating = rating;
62 stats.SeasonGames = gamesPlayed;
63 ArenaTeam team;
64 team.SetArenaTeamStats(stats);
65 return team;
66}
Definition ArenaTeam.h:137
void SetArenaTeamStats(ArenaTeamStats &stats)
Definition ArenaTeam.h:156
Definition ArenaTeam.h:125
uint16 SeasonGames
Definition ArenaTeam.h:129
uint16 Rating
Definition ArenaTeam.h:126

References ArenaTeamStats::Rating, ArenaTeamStats::SeasonGames, and ArenaTeam::SetArenaTeamStats().

Referenced by TEST_F(), TEST_F(), TEST_F(), and TEST_F().

◆ TEST_F() [1/4]

TEST_F ( ArenaSeasonRewardDistributorTest  ,
ManyTeamsTwoRewardsDistribution   
)
122{
124 std::vector<ArenaSeasonRewardGroup> rewardGroups;
125
126 const int numTeams = 1000;
127 ArenaTeam teams[numTeams + 1]; // used just to prevent teams deletion
128 for (int i = 1; i <= numTeams; i++)
129 {
130 teams[i] = ArenaTeamWithRating(i, 50);
131 arenaTeams[i] = &teams[i];
132 }
133
134 ArenaSeasonRewardGroup rewardGroup1;
136 rewardGroup1.minCriteria = 0.0; // 0%
137 rewardGroup1.maxCriteria = 0.5; // 0.5% of total teams
138 rewardGroups.push_back(rewardGroup1);
139
140 ArenaSeasonRewardGroup rewardGroup2;
142 rewardGroup2.minCriteria = 0.5; // 0.5% (the top 0.5% of the teams)
143 rewardGroup2.maxCriteria = 3.0; // 3% of total teams
144 rewardGroups.push_back(rewardGroup2);
145
146 ArenaSeasonRewardGroup rewardGroup3;
148 rewardGroup3.minCriteria = 3;
149 rewardGroup3.maxCriteria = 10;
150 rewardGroups.push_back(rewardGroup3);
151
152 ArenaSeasonRewardGroup rewardGroup4;
154 rewardGroup4.minCriteria = 10;
155 rewardGroup4.maxCriteria = 35;
156 rewardGroups.push_back(rewardGroup4);
157
158 // Top 1
159 ArenaSeasonRewardGroup rewardGroup5;
161 rewardGroup5.minCriteria = 1;
162 rewardGroup5.maxCriteria = 1;
163 rewardGroups.push_back(rewardGroup5);
164
165 // Calculate expected reward distributions
166 int expectedTeamsInGroup1 = static_cast<int>(0.005 * numTeams); // 0.5% of 1000 = 5
167 int expectedTeamsInGroup2 = static_cast<int>(0.03 * numTeams); // 3% of 1000 = 30
168 int expectedTeamsInGroup3 = static_cast<int>(0.10 * numTeams); // 10% of 1000 = 100
169 int expectedTeamsInGroup4 = static_cast<int>(0.35 * numTeams); // 35% of 1000 = 350
170
171 int teamsIndexCounter = numTeams;
172
173 // Expectation for rewardGroup1 (top 0.5% of teams)
174 for (; teamsIndexCounter > numTeams - expectedTeamsInGroup1; --teamsIndexCounter)
175 EXPECT_CALL(*_mockRewarder, RewardTeamWithRewardGroup(&teams[teamsIndexCounter], rewardGroup1)).Times(1);
176
177 // Expectation for rewardGroup2 (next 3% - 0.5% teams)
178 for (; teamsIndexCounter > numTeams - expectedTeamsInGroup2; --teamsIndexCounter)
179 EXPECT_CALL(*_mockRewarder, RewardTeamWithRewardGroup(&teams[teamsIndexCounter], rewardGroup2)).Times(1);
180
181 for (; teamsIndexCounter > numTeams - expectedTeamsInGroup3; --teamsIndexCounter)
182 EXPECT_CALL(*_mockRewarder, RewardTeamWithRewardGroup(&teams[teamsIndexCounter], rewardGroup3)).Times(1);
183
184 for (; teamsIndexCounter > numTeams - expectedTeamsInGroup4; --teamsIndexCounter)
185 EXPECT_CALL(*_mockRewarder, RewardTeamWithRewardGroup(&teams[teamsIndexCounter], rewardGroup4)).Times(1);
186
187 // Top 1
188 EXPECT_CALL(*_mockRewarder, RewardTeamWithRewardGroup(&teams[numTeams], rewardGroup5)).Times(1);
189
190 _distributor->DistributeRewards(arenaTeams, rewardGroups);
191}
@ ARENA_SEASON_REWARD_CRITERIA_TYPE_PERCENT_VALUE
Definition ArenaSeasonMgr.h:40
@ ARENA_SEASON_REWARD_CRITERIA_TYPE_ABSOLUTE_VALUE
Definition ArenaSeasonMgr.h:41
ArenaTeam ArenaTeamWithRating(int rating, int gamesPlayed)
Definition ArenaSeasonRewardDistributorTest.cpp:58
Times
Definition BattlegroundIC.h:194
std::unordered_map< uint32, ArenaTeam * > ArenaTeamContainer
Definition ArenaTeamMgr.h:34
Definition ArenaSeasonMgr.h:62
float minCriteria
Definition ArenaSeasonMgr.h:69
ArenaSeasonRewardGroupCriteriaType criteriaType
Definition ArenaSeasonMgr.h:67
float maxCriteria
Definition ArenaSeasonMgr.h:70

References ARENA_SEASON_REWARD_CRITERIA_TYPE_ABSOLUTE_VALUE, ARENA_SEASON_REWARD_CRITERIA_TYPE_PERCENT_VALUE, ArenaTeamWithRating(), ArenaSeasonRewardGroup::criteriaType, ArenaSeasonRewardGroup::maxCriteria, and ArenaSeasonRewardGroup::minCriteria.

◆ TEST_F() [2/4]

TEST_F ( ArenaSeasonRewardDistributorTest  ,
MinimumRequiredGamesFilter   
)
196{
198 std::vector<ArenaSeasonRewardGroup> rewardGroups;
199
200 // Creating three teams: one below and two above the minRequiredGames threshold (30 games)
201 ArenaTeam team1 = ArenaTeamWithRating(1500, 50); // Eligible, as it has 50 games
202 ArenaTeam team2 = ArenaTeamWithRating(1100, 20); // Not eligible, as it has only 20 games
203 ArenaTeam team3 = ArenaTeamWithRating(1300, 40); // Eligible, as it has 40 games
204
205 // Adding teams to the container
206 arenaTeams[1] = &team1;
207 arenaTeams[2] = &team2;
208 arenaTeams[3] = &team3;
209
210 // Creating a single reward group covering all teams
211 ArenaSeasonRewardGroup rewardGroup;
213 rewardGroup.minCriteria = 0.0;
214 rewardGroup.maxCriteria = 100;
215 rewardGroups.push_back(rewardGroup);
216
217 // We expect the rewarder to be called for team1 and team3, but not for team2.
218 EXPECT_CALL(*_mockRewarder, RewardTeamWithRewardGroup(&team1, rewardGroup)).Times(1);
219 EXPECT_CALL(*_mockRewarder, RewardTeamWithRewardGroup(&team3, rewardGroup)).Times(1);
220 EXPECT_CALL(*_mockRewarder, RewardTeamWithRewardGroup(&team2, rewardGroup)).Times(0);
221
222 _distributor->DistributeRewards(arenaTeams, rewardGroups);
223}

References ARENA_SEASON_REWARD_CRITERIA_TYPE_PERCENT_VALUE, ArenaTeamWithRating(), ArenaSeasonRewardGroup::criteriaType, ArenaSeasonRewardGroup::maxCriteria, and ArenaSeasonRewardGroup::minCriteria.

◆ TEST_F() [3/4]

TEST_F ( ArenaSeasonRewardDistributorTest  ,
SingleTeamMultipleAbsRewardDistribution   
)
95{
97 std::vector<ArenaSeasonRewardGroup> rewardGroups;
98
99 ArenaTeam team = ArenaTeamWithRating(1500, 50);
100 arenaTeams[1] = &team;
101
102 ArenaSeasonRewardGroup rewardGroup;
104 rewardGroup.minCriteria = 1;
105 rewardGroup.maxCriteria = 1;
106 rewardGroups.push_back(rewardGroup);
107 ArenaSeasonRewardGroup rewardGroup2;
109 rewardGroup2.minCriteria = 2;
110 rewardGroup2.maxCriteria = 10;
111 rewardGroups.push_back(rewardGroup2);
112
113 EXPECT_CALL(*_mockRewarder, RewardTeamWithRewardGroup(&team, rewardGroup)).Times(1);
114
115 _distributor->DistributeRewards(arenaTeams, rewardGroups);
116}

References ARENA_SEASON_REWARD_CRITERIA_TYPE_ABSOLUTE_VALUE, ArenaTeamWithRating(), ArenaSeasonRewardGroup::criteriaType, ArenaSeasonRewardGroup::maxCriteria, and ArenaSeasonRewardGroup::minCriteria.

◆ TEST_F() [4/4]

TEST_F ( ArenaSeasonRewardDistributorTest  ,
SingleTeamMultiplePctRewardDistribution   
)
70{
72 std::vector<ArenaSeasonRewardGroup> rewardGroups;
73
74 ArenaTeam team = ArenaTeamWithRating(1500, 50);
75 arenaTeams[1] = &team;
76
77 ArenaSeasonRewardGroup rewardGroup;
79 rewardGroup.minCriteria = 0;
80 rewardGroup.maxCriteria = 0.5;
81 rewardGroups.push_back(rewardGroup);
82 ArenaSeasonRewardGroup rewardGroup2;
84 rewardGroup2.minCriteria = 0.5;
85 rewardGroup2.maxCriteria = 100;
86 rewardGroups.push_back(rewardGroup2);
87
88 EXPECT_CALL(*_mockRewarder, RewardTeamWithRewardGroup(&team, rewardGroup2)).Times(1);
89
90 _distributor->DistributeRewards(arenaTeams, rewardGroups);
91}

References ARENA_SEASON_REWARD_CRITERIA_TYPE_PERCENT_VALUE, ArenaTeamWithRating(), ArenaSeasonRewardGroup::criteriaType, ArenaSeasonRewardGroup::maxCriteria, and ArenaSeasonRewardGroup::minCriteria.