public void TestMatchesStatsInvalidHostname() { var request = new HttpRequest(HttpMethod.Get, Stream.Null); var urlArgs = new Dictionary <string, string> { { "endpoint", "test.com" } }; var response = StatsRoutes.GetServerStatsByEndpoint(urlArgs, request); Assert.AreEqual(HttpStatusCode.BadRequest, response.StatusCode); }
public void TestPlayerStatsEmpty() { var urlArgs = new Dictionary <string, string> { { "name", "two" } }; var request = new HttpRequest(HttpMethod.Get, Stream.Null); var response = StatsRoutes.GetPlayerStatsByName(urlArgs, request); var expected = new PlayerStats { LastMatchPlayed = DateTime.MinValue }; var actual = JsonConvert.DeserializeObject <PlayerStats>(response.Content); Assert.AreEqual(HttpStatusCode.OK, response.StatusCode); Assert.AreEqual(expected, actual); }
public void TestMatchesStatsEmpty() { var request = new HttpRequest(HttpMethod.Get, Stream.Null); var urlArgs = new Dictionary <string, string> { { "endpoint", "test.com-8080" } }; var response = StatsRoutes.GetServerStatsByEndpoint(urlArgs, request); var actual = JsonConvert.DeserializeObject <MatchesStats>(response.Content); var expected = new MatchesStats { Top5Maps = new List <string>(), Top5GameModes = new List <string>() }; Assert.AreEqual(HttpStatusCode.OK, response.StatusCode); Assert.AreEqual(actual, expected); }
public void TestMatchesStatsNormal() { var server = new GameServer { Endpoint = "test.com-8080", GameModes = new List <GameMode>(), Name = "test" }; var expected = new MatchesStats(); var modes = new[] { "DM", "TDM", "DE", "DB", "KL", "MN" }; var modesFrequency = new Dictionary <string, int>(); var maps = new[] { "Dust", "Mirage", "Nuke", "Assault", "Mansion" }; var mapsFrequency = new Dictionary <string, int>(); var daysFrequency = new Dictionary <DateTime, int>(); var timestamp = DateTime.Now; var rand = new Random(); using (var db = new ServerDatabase()) { db.GameServers.Add(server); db.SaveChanges(); var count = rand.Next(99, 170); for (var j = 0; j < count; j++) { var timespan = new TimeSpan(rand.Next(0, 17), 0, 0, 0); var day = timestamp.Add(timespan); var mode = modes[rand.Next(0, modes.Length - 1)]; var map = maps[rand.Next(0, maps.Length - 1)]; var population = rand.Next(1, 50); var match = new GameMatch { Timestamp = day, Server = server, GameMode = mode, Map = map, TotalPlayers = population }; db.GameMatches.Add(match); if (modesFrequency.ContainsKey(mode)) { modesFrequency[mode]++; } else { modesFrequency[mode] = 1; } if (mapsFrequency.ContainsKey(map)) { mapsFrequency[map]++; } else { mapsFrequency[map] = 1; } if (daysFrequency.ContainsKey(day)) { daysFrequency[day]++; } else { daysFrequency[day] = 1; } if (population > expected.MaximumPopulation) { expected.MaximumPopulation = population; } expected.AveragePopulation += population; } expected.AveragePopulation /= count; expected.TotalMatchesPlayed = count; db.SaveChanges(); } expected.AverageMatchesPerDay = (double)daysFrequency.Sum(x => x.Value) / daysFrequency.Count; expected.MaximumMatchesPerDay = daysFrequency.Max(x => x.Value); expected.Top5GameModes = modesFrequency .OrderByDescending(x => x.Value) .Select(x => x.Key); expected.Top5Maps = mapsFrequency .OrderByDescending(x => x.Value) .Select(x => x.Key); var request = new HttpRequest(HttpMethod.Get, Stream.Null); var urlArgs = new Dictionary <string, string> { { "endpoint", "test.com-8080" } }; var response = StatsRoutes.GetServerStatsByEndpoint(urlArgs, request); var actual = JsonConvert.DeserializeObject <MatchesStats>(response.Content); Assert.AreEqual(HttpStatusCode.OK, response.StatusCode); Assert.AreEqual(actual, expected); }
public void TestPlayerStatsNormal() { var server1 = new GameServer { Endpoint = "test1.com", GameModes = new List <GameMode>(), Name = "test1" }; var server2 = new GameServer { Endpoint = "test2.com", GameModes = new List <GameMode>(), Name = "test2" }; var date = DateTime.MinValue; var matches = new List <GameMatch> { new GameMatch { GameMode = "DM", Map = "Dust", Timestamp = date, Server = server1, TotalPlayers = 3 }, new GameMatch { GameMode = "DM", Map = "Dust", Timestamp = date.AddDays(1), Server = server2, TotalPlayers = 3 }, new GameMatch { GameMode = "TDM", Map = "Mirage", Timestamp = date, Server = server2, TotalPlayers = 3 }, }; matches[0].Scoreboard = new List <PlayerScore> { new PlayerScore { Deaths = 4, Kills = 5, Match = matches[0], Name = "one", Place = 1 }, new PlayerScore { Deaths = 5, Kills = 4, Match = matches[0], Name = "two", Place = 2 }, new PlayerScore { Deaths = 6, Kills = 3, Match = matches[0], Name = "three", Place = 3 } }; matches[1].Scoreboard = new List <PlayerScore> { new PlayerScore { Deaths = 40, Kills = 5, Match = matches[1], Name = "two", Place = 1 }, new PlayerScore { Deaths = 5, Kills = 52, Match = matches[1], Name = "one", Place = 2 }, new PlayerScore { Deaths = 4, Kills = 12, Match = matches[1], Name = "three", Place = 3 } }; matches[2].Scoreboard = new List <PlayerScore> { new PlayerScore { Deaths = 1, Kills = 0, Match = matches[2], Name = "three", Place = 1 }, new PlayerScore { Deaths = 10, Kills = 22, Match = matches[2], Name = "two", Place = 2 }, new PlayerScore { Deaths = 47, Kills = 14, Match = matches[2], Name = "one", Place = 3 } }; using (var db = new ServerDatabase()) { db.GameServers.Add(server1); db.GameServers.Add(server2); db.GameMatches.AddRange(matches); db.SaveChanges(); } var urlArgs = new Dictionary <string, string> { { "name", "two" } }; var request = new HttpRequest(HttpMethod.Get, Stream.Null); var response = StatsRoutes.GetPlayerStatsByName(urlArgs, request); var expected = new PlayerStats { AverageMatchesPerDay = 1.5, AverageScoreboardPercent = (double)200 / 3, FavoriteGameMode = "DM", FavoriteServer = "test2.com", KillToDeathRatio = (double)(22 + 5 + 4) / (10 + 40 + 5), LastMatchPlayed = date.AddDays(1), MaximumMatchesPerDay = 2, TotalMatchesPlayed = 3, TotalMatchesWon = 1, UniqueServers = 2 }; var actual = JsonConvert.DeserializeObject <PlayerStats>(response.Content); Assert.AreEqual(HttpStatusCode.OK, response.StatusCode); Assert.AreEqual(expected, actual); }