public async Task HappyPath_MoreGames_DtoHasCorrectSums() { var w3StatsRepo = new W3StatsRepo(MongoClient); var handler = new OverallHeroWinRatePerHeroModelHandler(w3StatsRepo); var matchFinishedEvent1 = CreatFakeEvent(new [] { "deathknight", "lich" }, new [] { "archmage" }); var matchFinishedEvent2 = CreatFakeEvent(new [] { "lich", }, new [] { "archmage" }); var matchFinishedEvent3 = CreatFakeEvent(new [] { "deathknight", "lich" }, new [] { "archmage", "moutainking" }); var matchFinishedEvent4 = CreatFakeEvent(new [] { "archmage", "bloodmage" }, new [] { "deathknight", "lich" }); var matchFinishedEvent5 = CreatFakeEvent(new [] { "bloodmage" }, new [] { "deathknight", "lich" }); await handler.Update(matchFinishedEvent1); await handler.Update(matchFinishedEvent2); await handler.Update(matchFinishedEvent3); await handler.Update(matchFinishedEvent4); await handler.Update(matchFinishedEvent5); var heroStatsQueryHandler = new HeroStatsQueryHandler(new W3StatsRepo(MongoClient)); var heroWinrateDto = await heroStatsQueryHandler.GetStats("deathknight", "lich", "all", "archmage", "all", "all"); Assert.AreEqual(2, heroWinrateDto.Wins); Assert.AreEqual(1, heroWinrateDto.Losses); }
public async Task LoadAndSave_DifferentMode() { var fakeEvent1 = TestDtoHelper.CreateFakeEvent(); var fakeEvent2 = TestDtoHelper.CreateFakeEvent(); fakeEvent1.match.endTime = 1585701559200; fakeEvent2.match.endTime = 1585701559200; fakeEvent1.match.gameMode = GameMode.GM_1v1; fakeEvent2.match.gameMode = GameMode.GM_2v2; var w3StatsRepo = new W3StatsRepo(MongoClient); var gamesPerDayHandler = new GamesPerDayHandler(w3StatsRepo); await gamesPerDayHandler.Update(fakeEvent1); await gamesPerDayHandler.Update(fakeEvent1); await gamesPerDayHandler.Update(fakeEvent2); var gamesReloaded1 = await w3StatsRepo.LoadGamesPerDay(new DateTime(2020, 4, 1), GameMode.Undefined, GateWay.Europe); var gamesReloaded2 = await w3StatsRepo.LoadGamesPerDay(new DateTime(2020, 4, 1), GameMode.GM_1v1, GateWay.Europe); var gamesReloaded3 = await w3StatsRepo.LoadGamesPerDay(new DateTime(2020, 4, 1), GameMode.GM_2v2, GateWay.Europe); Assert.AreEqual(3, gamesReloaded1.GamesPlayed); Assert.AreEqual(GameMode.Undefined, gamesReloaded1.GameMode); Assert.AreEqual(2, gamesReloaded2.GamesPlayed); Assert.AreEqual(GameMode.GM_1v1, gamesReloaded2.GameMode); Assert.AreEqual(1, gamesReloaded3.GamesPlayed); Assert.AreEqual(GameMode.GM_2v2, gamesReloaded3.GameMode); }
public async Task DistincPlayerPerDay() { var time1 = new DateTime(2020, 10, 17); var gamesPerDay1 = DistinctPlayersPerDay.Create(new DateTimeOffset(time1)); var time2 = new DateTime(2020, 10, 16); var gamesPerDay2 = DistinctPlayersPerDay.Create(new DateTimeOffset(time2)); gamesPerDay1.AddPlayer("peter"); gamesPerDay1.AddPlayer("wolf"); gamesPerDay2.AddPlayer("peter"); var w3StatsRepo = new W3StatsRepo(MongoClient); await w3StatsRepo.Save(gamesPerDay1); await w3StatsRepo.Save(gamesPerDay2); var gamesReloaded1 = await w3StatsRepo.LoadPlayersPerDay(time1); var gamesReloaded2 = await w3StatsRepo.LoadPlayersPerDay(time2); Assert.AreEqual(2, gamesReloaded1.DistinctPlayers); Assert.AreEqual(2, gamesReloaded1.DistinctPlayers); Assert.AreEqual(1, gamesReloaded2.DistinctPlayers); Assert.AreEqual("peter", gamesReloaded1.Players[0]); Assert.AreEqual("wolf", gamesReloaded1.Players[1]); Assert.AreEqual("peter", gamesReloaded2.Players[0]); }
public async Task HappyPath_MoreGames() { var w3StatsRepo = new W3StatsRepo(MongoClient); var handler = new OverallHeroWinRatePerHeroModelHandler(w3StatsRepo); var matchFinishedEvent1 = CreatFakeEvent(new [] { "deathknight", "lich" }, new [] { "archmage" }); var matchFinishedEvent2 = CreatFakeEvent(new [] { "lich", }, new [] { "archmage" }); var matchFinishedEvent3 = CreatFakeEvent(new [] { "deathknight", "lich" }, new [] { "moutainking" }); var matchFinishedEvent4 = CreatFakeEvent(new [] { "moutainking" }, new [] { "deathknight", "lich" }); await handler.Update(matchFinishedEvent1); await handler.Update(matchFinishedEvent2); await handler.Update(matchFinishedEvent3); await handler.Update(matchFinishedEvent4); var dkStats = await w3StatsRepo.LoadHeroWinrate("deathknight_lich"); var lichStats = await w3StatsRepo.LoadHeroWinrate("lich"); Assert.AreEqual(0, dkStats.WinRates[0].WinLoss.Losses); Assert.AreEqual(1, dkStats.WinRates[0].WinLoss.Wins); Assert.AreEqual("archmage", dkStats.WinRates[0].HeroCombo); Assert.AreEqual(1, dkStats.WinRates[1].WinLoss.Losses); Assert.AreEqual(1, dkStats.WinRates[1].WinLoss.Wins); Assert.AreEqual("moutainking", dkStats.WinRates[1].HeroCombo); Assert.AreEqual(0, lichStats.WinRates[0].WinLoss.Losses); Assert.AreEqual(1, lichStats.WinRates[0].WinLoss.Wins); Assert.AreEqual("archmage", lichStats.WinRates[0].HeroCombo); }
public async Task RaceVsRaceOnMapStatsTest_GroupByMMR() { var fakeEvent1 = TestDtoHelper.CreateFakeEvent(); var fakeEvent2 = TestDtoHelper.CreateFakeEvent(); fakeEvent1.match.players[0].mmr.rating = 1300; fakeEvent1.match.players[1].mmr.rating = 1300; fakeEvent1.match.startTime = 1591374182684; fakeEvent2.match.players[0].mmr.rating = 1800; fakeEvent2.match.players[1].mmr.rating = 1900; fakeEvent2.match.startTime = 1591370203764; await InsertMatchEvents(new List <MatchFinishedEvent> { fakeEvent1, fakeEvent2 }); var w3StatsRepo = new W3StatsRepo(MongoClient); var patchRepo = new PatchRepository(MongoClient); var patch1 = new Patch { Version = "1.32.5", StartDate = DateTime.SpecifyKind(new DateTime(2020, 4, 27, 0, 0, 0), DateTimeKind.Utc) }; var patch2 = new Patch { Version = "1.32.6", StartDate = DateTime.SpecifyKind(new DateTime(2020, 6, 3, 19, 0, 0), DateTimeKind.Utc) }; await patchRepo.InsertPatches(new List <Patch>() { patch1, patch2 }); var overallRaceAndWinStatsHandler = new OverallRaceAndWinStatHandler(w3StatsRepo, patchRepo); await overallRaceAndWinStatsHandler.Update(fakeEvent1); await overallRaceAndWinStatsHandler.Update(fakeEvent2); var result = await w3StatsRepo.LoadRaceVsRaceStats(); Assert.AreEqual(3, result.Count); Assert.AreEqual(0, result[0].MmrRange); Assert.AreEqual(1200, result[1].MmrRange); Assert.AreEqual(1800, result[2].MmrRange); }
public async Task LoadAndSavePersistsDateTimeInfo() { var fakeEvent = TestDtoHelper.CreateFakeEvent(); fakeEvent.match.endTime = 1585701559200; var w3StatsRepo = new W3StatsRepo(MongoClient); var gamesPerDay = new GamesPerDayHandler(w3StatsRepo); await gamesPerDay.Update(fakeEvent); await gamesPerDay.Update(fakeEvent); var gamesReloaded = await w3StatsRepo.LoadGamesPerDay(new DateTime(2020, 4, 1), GameMode.Undefined, GateWay.Europe); Assert.AreEqual(2, gamesReloaded.GamesPlayed); }
public async Task PlayTimesPerDay_Average_TimeIsSetCorrectly_afterLoad() { var dateTime = new DateTimeOffset(new DateTime(2020, 10, 16)); var hourOfPlayStats = HourOfPlayStat.Create(dateTime); var w3StatsRepo = new W3StatsRepo(MongoClient); await w3StatsRepo.Save(hourOfPlayStats); var hourOfPlayStatsLoaded = await w3StatsRepo.LoadHourOfPlay(); Assert.AreEqual(0, hourOfPlayStatsLoaded.PlayTimesPerMode[0].PlayTimePerHour[0].Minutes); Assert.AreEqual(0, hourOfPlayStatsLoaded.PlayTimesPerMode[0].PlayTimePerHour[0].Hours); Assert.AreEqual(15, hourOfPlayStatsLoaded.PlayTimesPerMode[0].PlayTimePerHour[1].Minutes); Assert.AreEqual(0, hourOfPlayStatsLoaded.PlayTimesPerMode[0].PlayTimePerHour[1].Hours); Assert.AreEqual(0, hourOfPlayStatsLoaded.PlayTimesPerMode[0].PlayTimePerHour[4].Minutes); Assert.AreEqual(1, hourOfPlayStatsLoaded.PlayTimesPerMode[0].PlayTimePerHour[4].Hours); }
public async Task MatchesOnMap() { var w3StatsRepo = new W3StatsRepo(MongoClient); var mapsPerSeasonHandler = new MapsPerSeasonHandler(w3StatsRepo); var fakeEvent1 = TestDtoHelper.CreateFakeEvent(); var fakeEvent2 = TestDtoHelper.CreateFakeEvent(); var fakeEvent3 = TestDtoHelper.CreateFakeEvent(); fakeEvent1.match.gameMode = GameMode.GM_1v1; fakeEvent2.match.gameMode = GameMode.GM_1v1; fakeEvent3.match.gameMode = GameMode.GM_1v1; fakeEvent1.match.map = "(2)Map1.w3x"; fakeEvent2.match.map = "(2)Map1.w3x"; fakeEvent3.match.map = "(2)Map2.w3x"; fakeEvent1.match.season = 0; fakeEvent2.match.season = 1; fakeEvent3.match.season = 1; await mapsPerSeasonHandler.Update(fakeEvent1); await mapsPerSeasonHandler.Update(fakeEvent2); await mapsPerSeasonHandler.Update(fakeEvent3); var loadMapsPerSeasonOverall = await w3StatsRepo.LoadMapsPerSeason(-1); var loadMapsPerSeason1 = await w3StatsRepo.LoadMapsPerSeason(0); var loadMapsPerSeason2 = await w3StatsRepo.LoadMapsPerSeason(1); var loadMapsPerSeason3 = await w3StatsRepo.LoadMapsPerSeason(2); Assert.AreEqual(2, loadMapsPerSeasonOverall.MatchesOnMapPerModes[0].Maps.Single(m => m.Map == "Map1").Count); Assert.AreEqual(1, loadMapsPerSeason1.MatchesOnMapPerModes[0].Maps.Single(m => m.Map == "Map1").Count); Assert.AreEqual(1, loadMapsPerSeason2.MatchesOnMapPerModes[0].Maps.Single(m => m.Map == "Map1").Count); Assert.AreEqual(1, loadMapsPerSeason2.MatchesOnMapPerModes[0].Maps.Single(m => m.Map == "Map2").Count); Assert.IsNull(loadMapsPerSeason3); }
public async Task MoreGames_MirrorBug() { var w3StatsRepo = new W3StatsRepo(MongoClient); var handler = new OverallHeroWinRatePerHeroModelHandler(w3StatsRepo); await handler.Update(CreatFakeEvent(new [] { "archmage", "mountainking", "paladin" }, new [] { "archmage", "mountainking", "paladin" })); await handler.Update(CreatFakeEvent(new [] { "archmage", "mountainking", "paladin" }, new [] { "archmage", "mountainking", "paladin" })); await handler.Update(CreatFakeEvent(new [] { "archmage", "mountainking", "paladin" }, new [] { "archmage", "mountainking", "paladin" })); await handler.Update(CreatFakeEvent(new [] { "archmage", "mountainking", "paladin" }, new [] { "archmage", "mountainking", "paladin" })); await handler.Update(CreatFakeEvent(new [] { "archmage", "mountainking", "paladin" }, new [] { "archmage", "mountainking", "paladin" })); var heroStatsQueryHandler = new HeroStatsQueryHandler(new W3StatsRepo(MongoClient)); var heroWinrateDto = await heroStatsQueryHandler.GetStats("archmage", "all", "all", "archmage", "all", "all"); Assert.AreEqual(5, heroWinrateDto.Losses); Assert.AreEqual(5, heroWinrateDto.Wins); }
public async Task HappyPath() { var w3StatsRepo = new W3StatsRepo(MongoClient); var handler = new OverallHeroWinRatePerHeroModelHandler(w3StatsRepo); var matchFinishedEvent = CreatFakeEvent(new [] { "deathknight", "lich" }, new [] { "archmage" }); await handler.Update(matchFinishedEvent); var amStats = await w3StatsRepo.LoadHeroWinrate("archmage"); var dkStats = await w3StatsRepo.LoadHeroWinrate("deathknight_lich"); Assert.AreEqual(1, amStats.WinRates[0].WinLoss.Losses); Assert.AreEqual(0, amStats.WinRates[0].WinLoss.Wins); Assert.AreEqual("deathknight_lich", amStats.WinRates[0].HeroCombo); Assert.AreEqual(0, dkStats.WinRates[0].WinLoss.Losses); Assert.AreEqual(1, dkStats.WinRates[0].WinLoss.Wins); Assert.AreEqual("archmage", dkStats.WinRates[0].HeroCombo); }
public async Task HappyPath() { var w3StatsRepo = new W3StatsRepo(MongoClient); var heroPlayedModelHandler = new HeroPlayedStatHandler(w3StatsRepo); var matchFinishedEvent = TestDtoHelper.CreateFakeEvent(); matchFinishedEvent.result.players[0].heroes = new List <Hero> { new Hero { icon = "archmage" }, new Hero { icon = "mountainking" } }; matchFinishedEvent.result.players[1].heroes = new List <Hero> { new Hero { icon = "mountainking" } }; await heroPlayedModelHandler.Update(matchFinishedEvent); var loadHeroPlayedStat = await w3StatsRepo.LoadHeroPlayedStat(); // Overall Picks Assert.AreEqual(1, loadHeroPlayedStat.Stats[0].OrderedPicks[0].Stats.Single(h => h.Icon == "archmage").Count); Assert.AreEqual(2, loadHeroPlayedStat.Stats[0].OrderedPicks[0].Stats.Single(h => h.Icon == "mountainking").Count); Assert.AreEqual(1, loadHeroPlayedStat.Stats[0].OrderedPicks[0].Stats[0].Count); // First Picks Assert.AreEqual(1, loadHeroPlayedStat.Stats[0].OrderedPicks[1].Stats.Single(h => h.Icon == "archmage").Count); Assert.AreEqual(1, loadHeroPlayedStat.Stats[0].OrderedPicks[1].Stats.Single(h => h.Icon == "mountainking").Count); // Second Picks Assert.AreEqual(1, loadHeroPlayedStat.Stats[0].OrderedPicks[2].Stats.Single(h => h.Icon == "mountainking").Count); }