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());
 }
Example #6
0
        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);
            }
        }
Example #7
0
        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);
        }
Example #8
0
 public void SetUp()
 {
     database = A.Fake <IDatabaseAdapter>();
     A.CallTo(() => database.GetMatches()).Returns(TestData.Matches);
     handler = new PlayerStatisticHandler(database);
 }