public async Task GetPlayerStatistics_ReturnsCorrectStatistics() { var servers = new[] { new ServerInfoEntry { Endpoint = "Server1", Name = "Test", GameModes = new List <StringEntry> { new StringEntry { String = "DM" }, new StringEntry { String = "TDM" } } }, new ServerInfoEntry { Endpoint = "Server2", Name = "Test", GameModes = new List <StringEntry> { new StringEntry { String = "DM" }, new StringEntry { String = "TDM" } } } }; var matches = new[] { new MatchInfoEntry { Endpoint = "Server1", Timestamp = DateTime.Today, Map = "NewMap", GameMode = "DM", FragLimit = 200, TimeLimit = 200, TimeElapsed = 152.9, Scoreboard = new List <ScoreEntry> { new ScoreEntry { Name = "Player1", Frags = 15, Kills = 6, Deaths = 3 }, new ScoreEntry { Name = "Player2", Frags = 2, Kills = 2, Deaths = 21 } } }, new MatchInfoEntry { Endpoint = "Server2", Timestamp = DateTime.UtcNow.Date + TimeSpan.FromDays(3), Map = "NewMap", GameMode = "TDM", FragLimit = 200, TimeLimit = 200, TimeElapsed = 152.9, Scoreboard = new List <ScoreEntry> { new ScoreEntry { Name = "Player3", Frags = 33, Kills = 2, Deaths = 3 }, new ScoreEntry { Name = "Player1", Frags = 12, Kills = 6, Deaths = 21 }, new ScoreEntry { Name = "Player5", Frags = 1, Kills = 3, Deaths = 21 } } }, new MatchInfoEntry { Endpoint = "PutServerInfo_SavesInfo", Timestamp = DateTime.UtcNow.Date + TimeSpan.FromDays(3), Map = "NewMap", GameMode = "TDM", FragLimit = 200, TimeLimit = 200, TimeElapsed = 152.9, Scoreboard = new List <ScoreEntry> { new ScoreEntry { Name = "Player3", Frags = 33, Kills = 2, Deaths = 3 }, new ScoreEntry { Name = "Player4", Frags = 12, Kills = 6, Deaths = 21 }, new ScoreEntry { Name = "Player6", Frags = 12, Kills = 6, Deaths = 24 }, new ScoreEntry { Name = "Player5", Frags = 1, Kills = 3, Deaths = 21 } } } }; var expected = new PlayerStatisticsEntry { TotalMatchesPlayed = 3, TotalMatchesWon = 2, FavoriteServer = "PutServerInfo_SavesInfo", UniqueServers = 3, FavoriteGameMode = "TM", AverageScoreboardPercent = (100 + 100 + 50) / 3.0, MaximumMatchesPerDay = 1, AverageMatchesPerDay = 3 / 6.0, KillToDeathRatio = 33.0 / 27 }; foreach (var server in servers) { await statistics.PutServerInfo(server.Endpoint, new ServerInfoEntry { Name = server.Name, GameModes = server.GameModes }); } foreach (var match in matches) { await statistics.PutMatchInfo(match.Endpoint, match.Timestamp, match); } var result = statistics.GetPlayerStatistics("Player1").Result; result.ShouldBeEquivalentTo(expected, o => { o.Excluding(x => x.LastMatchPlayed); return(o); }); }
public async Task <PlayerStatistics> GetPlayerStatisctics(string name) { return(await statistics.GetPlayerStatistics(name)); }