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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }
Beispiel #5
0
        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);
        }
Beispiel #6
0
        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);
        }
Beispiel #7
0
        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);
        }
Beispiel #8
0
        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);
        }
Beispiel #11
0
        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);
        }