public IEnumerable <PlayerReportInfo> GetBestPlayers(int count) { if (count < 0 || count > Constants.MaxCount) { throw new ArgumentOutOfRangeException(nameof(count)); } return(database.GetMatches() .SelectMany(x => x.result.scoreboard) .GroupBy(x => x.name.ToLower()) .Where(x => x.Count() >= Constants.MinMatchPlayed) .Select(x => { var killToDeathRatio = x.GetKillsToDeathRatio(); return killToDeathRatio == null ? null : new PlayerReportInfo { name = x.Key, killToDeathRatio = killToDeathRatio.Value }; }) .SkipNulls() .Take(count)); }
public void SetUp() { var allMatches = TestData.Matches; var serverMatches = allMatches.Where(x => x.endpoint == endpoint).ToArray(); database = A.Fake <IDatabaseAdapter>(); A.CallTo(() => database.GetMatches(endpoint)).Returns(serverMatches); A.CallTo(() => database.GetMatches()).Returns(allMatches); handler = new ServerStatisticHandler(database); }
public void NotSaveMatchResultFromUnknownServer() { var result = handler.TryPutMatch(match); result.Should().BeFalse(); db.GetMatches(match.endpoint).Count().Should().Be(0); }
public static IList <MatchInfo> GetMatchesWithPlayer(this IDatabaseAdapter database, string name) { return(database.GetMatches() .Where(x => x.result.scoreboard.Any(player => player.EqualByNameIgnoreCase(name))) .ToArray()); }
public static IList <MatchInfo> GetRecentMatches(this IDatabaseAdapter database, int count) { return(database.GetMatches() .OrderByDescending(x => x.timestamp) .Take(count) .ToArray()); }
public void ReturnBestPlayersInCorrectOrder() { var scoreboard = TestData.Scoreboard; var matchInfo = new MatchInfo { result = new MatchResult { scoreboard = scoreboard } }; const int matchCount = 10; A.CallTo(() => database.GetMatches()).Returns(Enumerable.Repeat(matchInfo, matchCount).ToArray()); handler = new ReportsHandler(database); var bestPlayers = handler.GetBestPlayers(3).ToArray(); bestPlayers.Should().BeInDescendingOrder(x => x.killToDeathRatio); foreach (var player in bestPlayers) { var expectedPlayer = scoreboard.First(x => x.name == player.name); var expectedRatio = (double)expectedPlayer.kills / expectedPlayer.deaths; player.killToDeathRatio.Should().Be(expectedRatio); } }
public Dictionary <string, dynamic> GetStatistic(string endpoint) { var matches = database.GetMatches(endpoint).ToArray(); var lastMatchData = database.GetLastMatchDateTime(); var statistic = new Dictionary <string, dynamic> { { "totalMatchesPlayed", GetTotalMatchesPlayed(matches) }, { "maximumMatchesPerDay", GetMaximumMatchesPerDay(matches) }, { "averageMatchesPerDay", GetAverageMatchesPerDay(matches, lastMatchData) }, { "maximumPopulation", GetMaximumPopulation(matches) }, { "averagePopulation", GetAveragePopulation(matches) }, { "top5GameModes", GetTop5GameModes(matches) }, { "top5Maps", GetTop5Maps(matches) } }; return(statistic); }
public void SetUp() { database = A.Fake <IDatabaseAdapter>(); A.CallTo(() => database.GetMatches()).Returns(TestData.Matches); handler = new PlayerStatisticHandler(database); }