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"

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 
)
43{
44 ArenaTeamStats stats;
45 stats.Rating = rating;
46 stats.SeasonGames = gamesPlayed;
47 ArenaTeam team;
48 team.SetArenaTeamStats(stats);
49 return team;
50}
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   
)
106{
108 std::vector<ArenaSeasonRewardGroup> rewardGroups;
109
110 const int numTeams = 1000;
111 ArenaTeam teams[numTeams + 1]; // used just to prevent teams deletion
112 for (int i = 1; i <= numTeams; i++)
113 {
114 teams[i] = ArenaTeamWithRating(i, 50);
115 arenaTeams[i] = &teams[i];
116 }
117
118 ArenaSeasonRewardGroup rewardGroup1;
120 rewardGroup1.minCriteria = 0.0; // 0%
121 rewardGroup1.maxCriteria = 0.5; // 0.5% of total teams
122 rewardGroups.push_back(rewardGroup1);
123
124 ArenaSeasonRewardGroup rewardGroup2;
126 rewardGroup2.minCriteria = 0.5; // 0.5% (the top 0.5% of the teams)
127 rewardGroup2.maxCriteria = 3.0; // 3% of total teams
128 rewardGroups.push_back(rewardGroup2);
129
130 ArenaSeasonRewardGroup rewardGroup3;
132 rewardGroup3.minCriteria = 3;
133 rewardGroup3.maxCriteria = 10;
134 rewardGroups.push_back(rewardGroup3);
135
136 ArenaSeasonRewardGroup rewardGroup4;
138 rewardGroup4.minCriteria = 10;
139 rewardGroup4.maxCriteria = 35;
140 rewardGroups.push_back(rewardGroup4);
141
142 // Top 1
143 ArenaSeasonRewardGroup rewardGroup5;
145 rewardGroup5.minCriteria = 1;
146 rewardGroup5.maxCriteria = 1;
147 rewardGroups.push_back(rewardGroup5);
148
149 // Calculate expected reward distributions
150 int expectedTeamsInGroup1 = static_cast<int>(0.005 * numTeams); // 0.5% of 1000 = 5
151 int expectedTeamsInGroup2 = static_cast<int>(0.03 * numTeams); // 3% of 1000 = 30
152 int expectedTeamsInGroup3 = static_cast<int>(0.10 * numTeams); // 10% of 1000 = 100
153 int expectedTeamsInGroup4 = static_cast<int>(0.35 * numTeams); // 35% of 1000 = 350
154
155 int teamsIndexCounter = numTeams;
156
157 // Expectation for rewardGroup1 (top 0.5% of teams)
158 for (; teamsIndexCounter > numTeams - expectedTeamsInGroup1; --teamsIndexCounter)
159 EXPECT_CALL(*_mockRewarder, RewardTeamWithRewardGroup(&teams[teamsIndexCounter], rewardGroup1)).Times(1);
160
161 // Expectation for rewardGroup2 (next 3% - 0.5% teams)
162 for (; teamsIndexCounter > numTeams - expectedTeamsInGroup2; --teamsIndexCounter)
163 EXPECT_CALL(*_mockRewarder, RewardTeamWithRewardGroup(&teams[teamsIndexCounter], rewardGroup2)).Times(1);
164
165 for (; teamsIndexCounter > numTeams - expectedTeamsInGroup3; --teamsIndexCounter)
166 EXPECT_CALL(*_mockRewarder, RewardTeamWithRewardGroup(&teams[teamsIndexCounter], rewardGroup3)).Times(1);
167
168 for (; teamsIndexCounter > numTeams - expectedTeamsInGroup4; --teamsIndexCounter)
169 EXPECT_CALL(*_mockRewarder, RewardTeamWithRewardGroup(&teams[teamsIndexCounter], rewardGroup4)).Times(1);
170
171 // Top 1
172 EXPECT_CALL(*_mockRewarder, RewardTeamWithRewardGroup(&teams[numTeams], rewardGroup5)).Times(1);
173
174 _distributor->DistributeRewards(arenaTeams, rewardGroups);
175}
@ 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:42
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   
)
180{
182 std::vector<ArenaSeasonRewardGroup> rewardGroups;
183
184 // Creating three teams: one below and two above the minRequiredGames threshold (30 games)
185 ArenaTeam team1 = ArenaTeamWithRating(1500, 50); // Eligible, as it has 50 games
186 ArenaTeam team2 = ArenaTeamWithRating(1100, 20); // Not eligible, as it has only 20 games
187 ArenaTeam team3 = ArenaTeamWithRating(1300, 40); // Eligible, as it has 40 games
188
189 // Adding teams to the container
190 arenaTeams[1] = &team1;
191 arenaTeams[2] = &team2;
192 arenaTeams[3] = &team3;
193
194 // Creating a single reward group covering all teams
195 ArenaSeasonRewardGroup rewardGroup;
197 rewardGroup.minCriteria = 0.0;
198 rewardGroup.maxCriteria = 100;
199 rewardGroups.push_back(rewardGroup);
200
201 // We expect the rewarder to be called for team1 and team3, but not for team2.
202 EXPECT_CALL(*_mockRewarder, RewardTeamWithRewardGroup(&team1, rewardGroup)).Times(1);
203 EXPECT_CALL(*_mockRewarder, RewardTeamWithRewardGroup(&team3, rewardGroup)).Times(1);
204 EXPECT_CALL(*_mockRewarder, RewardTeamWithRewardGroup(&team2, rewardGroup)).Times(0);
205
206 _distributor->DistributeRewards(arenaTeams, rewardGroups);
207}

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

◆ TEST_F() [3/4]

TEST_F ( ArenaSeasonRewardDistributorTest  ,
SingleTeamMultipleAbsRewardDistribution   
)
79{
81 std::vector<ArenaSeasonRewardGroup> rewardGroups;
82
83 ArenaTeam team = ArenaTeamWithRating(1500, 50);
84 arenaTeams[1] = &team;
85
86 ArenaSeasonRewardGroup rewardGroup;
88 rewardGroup.minCriteria = 1;
89 rewardGroup.maxCriteria = 1;
90 rewardGroups.push_back(rewardGroup);
91 ArenaSeasonRewardGroup rewardGroup2;
93 rewardGroup2.minCriteria = 2;
94 rewardGroup2.maxCriteria = 10;
95 rewardGroups.push_back(rewardGroup2);
96
97 EXPECT_CALL(*_mockRewarder, RewardTeamWithRewardGroup(&team, rewardGroup)).Times(1);
98
99 _distributor->DistributeRewards(arenaTeams, rewardGroups);
100}

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

◆ TEST_F() [4/4]

TEST_F ( ArenaSeasonRewardDistributorTest  ,
SingleTeamMultiplePctRewardDistribution   
)
54{
56 std::vector<ArenaSeasonRewardGroup> rewardGroups;
57
58 ArenaTeam team = ArenaTeamWithRating(1500, 50);
59 arenaTeams[1] = &team;
60
61 ArenaSeasonRewardGroup rewardGroup;
63 rewardGroup.minCriteria = 0;
64 rewardGroup.maxCriteria = 0.5;
65 rewardGroups.push_back(rewardGroup);
66 ArenaSeasonRewardGroup rewardGroup2;
68 rewardGroup2.minCriteria = 0.5;
69 rewardGroup2.maxCriteria = 100;
70 rewardGroups.push_back(rewardGroup2);
71
72 EXPECT_CALL(*_mockRewarder, RewardTeamWithRewardGroup(&team, rewardGroup2)).Times(1);
73
74 _distributor->DistributeRewards(arenaTeams, rewardGroups);
75}

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