Пример #1
0
        public async Task GetBestPlayers_DoesNotCountPlayersWithoutDeaths()
        {
            var time = DateTime.Now;
            var data = new ServerInfoEntry
            {
                Endpoint  = "GetBestPlayers_DoesNotCountPlayersWithoutDeaths",
                Name      = "Test",
                GameModes = new List <StringEntry> {
                    new StringEntry {
                        String = "DM"
                    }, new StringEntry {
                        String = "TDM"
                    }
                }
            };
            var match = new MatchInfoEntry
            {
                Map         = "1",
                GameMode    = "2",
                FragLimit   = 20,
                TimeLimit   = 300,
                TimeElapsed = 25,
                Scoreboard  = new List <ScoreEntry>
                {
                    new ScoreEntry
                    {
                        Name   = "GetBestPlayers_DoesNotCountPlayersWithoutDeaths1",
                        Deaths = 0,
                        Frags  = 2,
                        Kills  = 20
                    },
                    new ScoreEntry
                    {
                        Name   = "GetBestPlayers_DoesNotCountPlayersWithoutDeaths2",
                        Deaths = 0,
                        Frags  = 20,
                        Kills  = 2
                    }
                }
            };


            await statistics.PutServerInfo(data.Endpoint,
                                           new ServerInfoEntry { Name = data.Name, GameModes = data.GameModes });

            await statistics.PutMatchInfo(data.Endpoint, time, match);

            new GameStatistics().GetBestPlayers(50).Result.Should().BeEmpty();
        }
        public async Task PutServerInfo(string endpoint, ServerInfoEntry infoEntry)
        {
            await Task.Run(() =>
            {
                infoEntry.Endpoint = endpoint;
                var entry          = databaseContext.Servers.Find(endpoint);

                lock (databaseContext)
                {
                    if (entry != null)
                    {
                        databaseContext.StringEntries.RemoveRange(entry.GameModes);
                        databaseContext.Servers.Remove(entry);
                    }
                    databaseContext.Servers.Add(infoEntry);
                    databaseContext.SaveChanges();
                }
            });
        }
Пример #3
0
        public async Task PutServerInfo_SavesInfo()
        {
            Console.WriteLine(Directory.GetCurrentDirectory());
            var endpoint = "PutServerInfo_SavesInfo";
            var data     = new ServerInfoEntry
            {
                Name      = "Test",
                GameModes = new List <StringEntry> {
                    new StringEntry {
                        String = "DM"
                    }
                }
            };
            await statistics.PutServerInfo(endpoint, data);

            using (var databaseContext = new DatabaseContext())
            {
                var result = databaseContext.Servers.Find(endpoint);
                result.ShouldBeEquivalentTo(data, o => o.Excluding(x => x.SelectedMemberPath.EndsWith("Id")));
            }
        }
Пример #4
0
        public async Task PutServerInfo_ResavesInfo()
        {
            var endpoint = "PutServerInfo_SavesInfo";
            var newData  = new ServerInfoEntry
            {
                Name      = "NewName",
                GameModes = new List <StringEntry> {
                    new StringEntry {
                        String = "TM"
                    }, new StringEntry {
                        String = "TDM"
                    }
                }
            };
            await statistics.PutServerInfo(endpoint, newData);

            using (var databaseContext = new DatabaseContext())
            {
                var result = databaseContext.Servers.Find(endpoint);
                result.ShouldBeEquivalentTo(newData, o => o.Excluding(x => x.SelectedMemberPath.EndsWith("Id")));
            }
        }
Пример #5
0
 public ServerInfo(ServerInfoEntry entry)
 {
     Name      = entry.Name;
     GameModes = entry.GameModes.Select(x => x.String).ToList();
 }
Пример #6
0
        public async Task GetPopularServers_ReturnsCorrectStatistics()
        {
            var date   = DateTime.Now.Date;
            var server = new ServerInfoEntry
            {
                Endpoint  = "GetPopularServers_ReturnsCorrectStatistics1",
                Name      = "Server1",
                GameModes =
                    new List <StringEntry> {
                    new StringEntry {
                        String = "DM"
                    }, new StringEntry {
                        String = "TDM"
                    }
                }
            };

            var expected = new List <PopularServerEntry>
            {
                new PopularServerEntry
                {
                    Endpoint             = "GetBestPlayers_ReturnsCorrectStatistics",
                    Name                 = "Test",
                    AverageMatchesPerDay = 20
                },
                new PopularServerEntry
                {
                    Endpoint             = "GetPopularServers_ReturnsCorrectStatistics1",
                    Name                 = "Server1",
                    AverageMatchesPerDay = 15
                }
            };


            await statistics.PutServerInfo(server.Endpoint,
                                           new ServerInfoEntry { Name = server.Name, GameModes = server.GameModes });

            for (var i = 0; i < 15; i++)
            {
                await statistics.PutMatchInfo(server.Endpoint, date + TimeSpan.FromHours(i), new MatchInfoEntry
                {
                    Map         = "1",
                    GameMode    = "2",
                    FragLimit   = 20,
                    TimeLimit   = 300,
                    TimeElapsed = 25,
                    Scoreboard  = new List <ScoreEntry>
                    {
                        new ScoreEntry
                        {
                            Name   = "GetPopularServers_ReturnsCorrectStatistics1",
                            Deaths = 1,
                            Frags  = 2,
                            Kills  = 20
                        },
                        new ScoreEntry
                        {
                            Name   = "GetPopularServers_ReturnsCorrectStatistics2",
                            Deaths = 1,
                            Frags  = 20,
                            Kills  = 2
                        }
                    }
                });
            }
            var result = statistics.GetPopularServers(2).Result.ToList();


            result.Count.ShouldBeEquivalentTo(expected.Count);
            for (var i = 0; i < expected.Count; i++)
            {
                result[i].ShouldBeEquivalentTo(expected[i]);
            }
        }
Пример #7
0
        public async Task GetBestPlayers_ReturnsCorrectStatistics()
        {
            var date = DateTime.Now.Date;
            var data = new ServerInfoEntry
            {
                Endpoint  = "GetBestPlayers_ReturnsCorrectStatistics",
                Name      = "Test",
                GameModes = new List <StringEntry> {
                    new StringEntry {
                        String = "DM"
                    }, new StringEntry {
                        String = "TDM"
                    }
                }
            };

            var expected = new List <BestPlayerEntry>
            {
                new BestPlayerEntry {
                    Name = "GetBestPlayers_ReturnsCorrectStatistics1", KillToDeathRatio = 20 / 4.0
                },
                new BestPlayerEntry {
                    Name = "GetBestPlayers_ReturnsCorrectStatistics2", KillToDeathRatio = 2 / 20.0
                }
            };


            await statistics.PutServerInfo(data.Endpoint,
                                           new ServerInfoEntry { Name = data.Name, GameModes = data.GameModes });

            for (var i = 0; i < 20; i++)
            {
                var timestamp = date + TimeSpan.FromHours(i);
                await statistics.PutMatchInfo(data.Endpoint, timestamp, new MatchInfoEntry
                {
                    Map         = "1",
                    GameMode    = "2",
                    FragLimit   = 20,
                    TimeLimit   = 300,
                    TimeElapsed = 25,
                    Scoreboard  = new List <ScoreEntry>
                    {
                        new ScoreEntry
                        {
                            Name   = "GetBestPlayers_ReturnsCorrectStatistics1",
                            Deaths = 4,
                            Frags  = 2,
                            Kills  = 20
                        },
                        new ScoreEntry
                        {
                            Name   = "GetBestPlayers_ReturnsCorrectStatistics2",
                            Deaths = 20,
                            Frags  = 20,
                            Kills  = 2
                        }
                    }
                });
            }

            var result = statistics.GetBestPlayers(2).Result.ToList();


            result.Count.ShouldBeEquivalentTo(expected.Count);
            for (var i = 0; i < expected.Count; i++)
            {
                result[i].ShouldBeEquivalentTo(expected[i]);
            }
        }
Пример #8
0
 public ServersInfo(ServerInfoEntry serverInfoEntry)
 {
     Endpoint = serverInfoEntry.Endpoint;
     Info     = new ServerInfo(serverInfoEntry);
 }