Skip to content

Commit 0f54e92

Browse files
authored
[W3C-93] New race win icons (#178)
* [W3C-93] New race win icons * use test db
1 parent 6f1cdab commit 0f54e92

File tree

7 files changed

+143
-52
lines changed

7 files changed

+143
-52
lines changed

W3C.Domain/CommonValueObjects/AvatarCategory.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ public enum AvatarCategory
88
NE = 4,
99
UD = 8,
1010
Total = 16,
11-
Special = 32
11+
Special = 32,
12+
Starter = 64,
13+
Tournament = 128,
1214
}
1315
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
using W3C.Domain.CommonValueObjects;
2+
3+
namespace W3ChampionsStatisticService.PersonalSettings
4+
{
5+
public class AvatarCategoryToMaxPictureId
6+
{
7+
public AvatarCategory AvatarType { get; }
8+
public long Max { get; }
9+
10+
public AvatarCategoryToMaxPictureId(AvatarCategory avatarType, long max)
11+
{
12+
AvatarType = avatarType;
13+
Max = max;
14+
}
15+
}
16+
}

W3ChampionsStatisticService/PersonalSettings/PersonalSetting.cs

Lines changed: 109 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -59,14 +59,25 @@ public bool SetProfilePicture(SetPictureCommand cmd)
5959
{
6060
bool isValid = false;
6161

62-
if (cmd.avatarCategory == AvatarCategory.Special)
62+
switch (cmd.avatarCategory)
6363
{
64-
isValid = SpecialPictures == null ? false : SpecialPictures.Any(x => x.PictureId == cmd.pictureId);
65-
}
66-
else
67-
{
68-
var winsPerRace = RaceWins?.GetWinsPerRace((Race)cmd.avatarCategory);
69-
isValid = winsPerRace >= PictureRange.FirstOrDefault(p => p.PictureId == cmd.pictureId)?.NeededWins;
64+
case AvatarCategory.Starter:
65+
isValid = true;
66+
break;
67+
68+
case AvatarCategory.Special:
69+
isValid = SpecialPictures == null ? false : SpecialPictures.Any(x => x.PictureId == cmd.pictureId);
70+
break;
71+
72+
case AvatarCategory.Total:
73+
var totalWins = RaceWins?.GetTotalWins();
74+
isValid = totalWins >= TotalPicturerange.FirstOrDefault(p => p.PictureId == cmd.pictureId)?.NeededWins;
75+
break;
76+
77+
default:
78+
var winsPerRace = RaceWins?.GetWinsPerRace((Race)cmd.avatarCategory);
79+
isValid = winsPerRace >= RacePictureRange.FirstOrDefault(p => p.PictureId == cmd.pictureId)?.NeededWins;
80+
break;
7081
}
7182

7283
if (isValid)
@@ -87,35 +98,34 @@ public void UpdateSpecialPictures(SpecialPicture[] specialPictures)
8798
SpecialPictures = specialPictures;
8899
}
89100

90-
public List<RaceToMaxPicture> PickablePictures => new List<RaceToMaxPicture>
101+
public List<AvatarCategoryToMaxPictureId> PickablePictures => new List<AvatarCategoryToMaxPictureId>
91102
{
92-
new RaceToMaxPicture(Race.HU, GetMaxOf(RaceWins.GetWinsPerRace(Race.HU)) ),
93-
new RaceToMaxPicture(Race.OC, GetMaxOf(RaceWins.GetWinsPerRace(Race.OC)) ),
94-
new RaceToMaxPicture(Race.NE, GetMaxOf(RaceWins.GetWinsPerRace(Race.NE)) ),
95-
new RaceToMaxPicture(Race.UD, GetMaxOf(RaceWins.GetWinsPerRace(Race.UD)) ),
96-
new RaceToMaxPicture(Race.RnD, GetMaxOf(RaceWins.GetWinsPerRace(Race.RnD)) )
103+
new AvatarCategoryToMaxPictureId(AvatarCategory.HU, GetMaxPictureIdForRace(Race.HU)),
104+
new AvatarCategoryToMaxPictureId(AvatarCategory.OC, GetMaxPictureIdForRace(Race.OC)),
105+
new AvatarCategoryToMaxPictureId(AvatarCategory.NE, GetMaxPictureIdForRace(Race.NE)),
106+
new AvatarCategoryToMaxPictureId(AvatarCategory.UD, GetMaxPictureIdForRace(Race.UD)),
107+
new AvatarCategoryToMaxPictureId(AvatarCategory.RnD, GetMaxPictureIdForRace(Race.RnD)),
108+
new AvatarCategoryToMaxPictureId(AvatarCategory.Total, GetMaxPictureIdForAllWins()),
97109
};
98110

99-
private long GetMaxOf(long getWinsPerRace)
111+
private long GetMaxPictureIdForRace(Race race)
100112
{
101-
return PictureRange.Where(r => r.NeededWins <= getWinsPerRace).Max(r => r.PictureId);
113+
var minimumWinsNeededForRaceIcon = RacePictureRange.First().NeededWins;
114+
var raceWinsForRace = RaceWins.GetWinsPerRace(race);
115+
116+
if (raceWinsForRace < minimumWinsNeededForRaceIcon) return 0;
117+
118+
return RacePictureRange
119+
.Where(r => r.NeededWins <= raceWinsForRace)
120+
.Max(r => r.PictureId);
102121
}
103122

104-
[BsonIgnore]
105-
public List<WinsToPictureId> PictureRange => new List<WinsToPictureId>
123+
private long GetMaxPictureIdForAllWins()
106124
{
107-
new WinsToPictureId(0, 0),
108-
new WinsToPictureId(1, 5),
109-
new WinsToPictureId(2, 20),
110-
new WinsToPictureId(3, 70),
111-
new WinsToPictureId(4, 150),
112-
new WinsToPictureId(5, 250),
113-
new WinsToPictureId(6, 400),
114-
new WinsToPictureId(7, 600),
115-
new WinsToPictureId(8, 900),
116-
new WinsToPictureId(9, 1200),
117-
new WinsToPictureId(10, 1500)
118-
};
125+
return TotalPicturerange
126+
.Where(r => r.NeededWins <= RaceWins.GetTotalWins())
127+
.Max(r => r.PictureId);
128+
}
119129

120130
public void Update(PersonalSettingsDTO dto)
121131
{
@@ -132,5 +142,75 @@ public void Update(PersonalSettingsDTO dto)
132142
}
133143

134144
public DateTimeOffset LastUpdated { get; set; }
145+
146+
[BsonIgnore]
147+
public List<WinsToPictureId> RacePictureRange => new List<WinsToPictureId>
148+
{
149+
new WinsToPictureId(1, 5),
150+
new WinsToPictureId(2, 10),
151+
new WinsToPictureId(3, 25),
152+
new WinsToPictureId(4, 50),
153+
new WinsToPictureId(5, 100),
154+
new WinsToPictureId(6, 150),
155+
new WinsToPictureId(7, 250),
156+
new WinsToPictureId(8, 350),
157+
new WinsToPictureId(9, 500),
158+
new WinsToPictureId(10, 750),
159+
new WinsToPictureId(11, 1000),
160+
new WinsToPictureId(12, 1250),
161+
new WinsToPictureId(13, 1500),
162+
new WinsToPictureId(14, 1750),
163+
new WinsToPictureId(15, 2000),
164+
new WinsToPictureId(16, 2500),
165+
new WinsToPictureId(17, 3500),
166+
new WinsToPictureId(18, 5000)
167+
};
168+
169+
[BsonIgnore]
170+
public List<WinsToPictureId> TotalPicturerange => new List<WinsToPictureId>
171+
{
172+
new WinsToPictureId(1, 15),
173+
new WinsToPictureId(2, 30),
174+
new WinsToPictureId(3, 75),
175+
new WinsToPictureId(4, 150),
176+
new WinsToPictureId(5, 300),
177+
new WinsToPictureId(6, 450),
178+
new WinsToPictureId(7, 750),
179+
new WinsToPictureId(8, 1000),
180+
new WinsToPictureId(9, 1500),
181+
new WinsToPictureId(10, 2250),
182+
new WinsToPictureId(11, 3000),
183+
new WinsToPictureId(12, 3750),
184+
new WinsToPictureId(13, 4500),
185+
new WinsToPictureId(14, 5250),
186+
new WinsToPictureId(15, 6000),
187+
new WinsToPictureId(16, 7500),
188+
new WinsToPictureId(17, 10000),
189+
new WinsToPictureId(18, 15000)
190+
};
191+
192+
[BsonIgnore]
193+
public List<WinsToPictureId> TournamentPicturerange => new List<WinsToPictureId>
194+
// for future use with autotours
195+
{
196+
new WinsToPictureId(1, 1),
197+
new WinsToPictureId(2, 5),
198+
new WinsToPictureId(3, 10),
199+
new WinsToPictureId(4, 20),
200+
new WinsToPictureId(5, 30),
201+
new WinsToPictureId(6, 50),
202+
new WinsToPictureId(7, 75),
203+
new WinsToPictureId(8, 100),
204+
new WinsToPictureId(9, 125),
205+
new WinsToPictureId(10, 150),
206+
new WinsToPictureId(11, 200),
207+
new WinsToPictureId(12, 300),
208+
new WinsToPictureId(13, 400),
209+
new WinsToPictureId(14, 500),
210+
new WinsToPictureId(15, 750),
211+
new WinsToPictureId(16, 1000),
212+
new WinsToPictureId(17, 1250),
213+
new WinsToPictureId(18, 1500)
214+
};
135215
}
136216
}

W3ChampionsStatisticService/PersonalSettings/ProfilePicture.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
1-
using W3C.Domain.CommonValueObjects;
1+
using System;
2+
using W3C.Domain.CommonValueObjects;
23

34
namespace W3ChampionsStatisticService.PersonalSettings
45
{
56
public class ProfilePicture
67
{
78
public static ProfilePicture Default()
89
{
10+
var random = new Random();
911
return new ProfilePicture()
1012
{
11-
Race = AvatarCategory.Total,
12-
PictureId = 0
13+
Race = AvatarCategory.Starter,
14+
PictureId = random.Next(1,5),
1315
};
1416
}
1517

W3ChampionsStatisticService/PersonalSettings/RaceToMaxPicture.cs

Lines changed: 0 additions & 16 deletions
This file was deleted.

W3ChampionsStatisticService/PlayerProfiles/PlayerOverallStats.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,5 +50,10 @@ public int GetWinsPerRace(Race race)
5050
{
5151
return WinLosses.Single(w => w.Race == race).Wins;
5252
}
53+
54+
public int GetTotalWins()
55+
{
56+
return WinLosses.Sum(w => w.Wins);
57+
}
5358
}
5459
}

WC3ChampionsStatisticService.UnitTests/PersonalSettings/PersonalSettingsTests.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ public void SetProfilePicture_TooFewWins()
5959
SetPictureCommand cmd2 = new SetPictureCommand()
6060
{
6161
avatarCategory = AvatarCategory.HU,
62-
pictureId = 2
62+
pictureId = 3
6363
};
6464
var profilePicture = personalSetting.SetProfilePicture(cmd2);
6565

@@ -80,7 +80,7 @@ public void SetProfilePicture_AllowedPictures()
8080
}
8181

8282
personalSetting.Players = new List<PlayerOverallStats> { player };
83-
Assert.AreEqual(2, personalSetting.PickablePictures.Single(r => r.Race == Race.HU).Max);
83+
Assert.AreEqual(2, personalSetting.PickablePictures.Single(r => r.AvatarType == AvatarCategory.HU).Max);
8484
}
8585

8686
[Test]
@@ -98,7 +98,9 @@ public void SetProfilePicture_SpecialAvatar_ButSpecialPicturesNull_DoesNotThrow(
9898
};
9999
Assert.DoesNotThrow(() => personalSetting.SetProfilePicture(cmd));
100100

101-
Assert.AreEqual(expectedProfilePic.PictureId, personalSetting.ProfilePicture.PictureId);
101+
Assert.IsTrue(
102+
personalSetting.ProfilePicture.PictureId >= 1 &&
103+
personalSetting.ProfilePicture.PictureId <= 5);
102104
Assert.AreEqual(expectedProfilePic.Race, personalSetting.ProfilePicture.Race);
103105
}
104106

0 commit comments

Comments
 (0)