public VoteScannerTests()
        {
            var players = new Player[]
            {
                new Player { Name = "John0", Participating = true, Aliases = new string[] { "John" } },
                new Player { Name = "Xevious", Participating = true, Aliases = new string[0] },
                new Player { Name = "snowbind", Participating = true, Aliases = new string[0] },
                new Player { Name = "GMass", Participating = true, Aliases = new string[0] },
                new Player { Name = "Liamness", Participating = true, Aliases = new string[0] },
                new Player { Name = "spork", Participating = true, Aliases = new string[0] },
                new Player { Name = "Alask", Participating = true, Aliases = new string[0] },
                new Player { Name = "PaulM", Participating = true, Aliases = new string[0] },
                new Player { Name = "Danster", Participating = true, Aliases = new string[0] },
                new Player { Name = "gospvg", Participating = true, Aliases = new string[0] },
                new Player { Name = "Strategos", Participating = true, Aliases = new string[0] },
                new Player { Name = "bennette98", Participating = true, Aliases = new string[0] },
                new Player { Name = "Don Wiskerando", Participating = true, Aliases = new string[0] },
                new Player { Name = "The Grand Pursuivant", Participating = true, Aliases = new string[0] },
                new Player { Name = "Mr. Blonde", Participating = true, Aliases = new string[0] },
                new Player { Name = "Mr. Violet", Participating = true, Aliases =  new string[] { "Mr Violet", "Violet", "Mr.Violet", "MrViolet" } },
                new Player { Name = "Mr. Viridian", Participating = true, Aliases = new string[] { "Mr.Viridian", "Mr Viridian", "Viridian", "MrViridian" } },
                new Player { Name = "Moderator", Participating = false, Aliases = new string[0] },
                new Player { Name = "Player With Aliases", Participating = true, Aliases = new string[] { "PlayerWithAliases", "PWA" } },
            };

            var mockRepo = new Mock<IRepository>();
            mockRepo.Setup(m => m.FindAllPlayers())
                .Returns(players);

            _voteScanner = new VoteScanner(mockRepo.Object);
        }
        public void UpsertPlayer(Player player)
        {
            BsonArray recruitments = new BsonArray();

            foreach (var recruitment in player.Recruitments)
            {
                recruitments.Add(new BsonDocument
                    {
                        { "FactionName", recruitment.FactionName },
                        { "Allegiance", recruitment.Allegiance.ToString() },
                        { "ForumPostNumber", recruitment.ForumPostNumber },
                    });
            }

            BsonArray aliases = new BsonArray();

            foreach (var alias in aliases)
            {
                aliases.Add(alias.ToString());
            }

            var newDoc = new BsonDocument
            {
                { "Name", player.Name },
                { "Recruitments", recruitments },
                { "Participating", player.Participating },
                { "Fatality", player.Fatality },
                { "Character", player.Character },
                { "Notes", player.Notes },
                { "Aliases", aliases }
            };

            var filter = Builders<BsonDocument>.Filter.Eq("Name", player.Name);

            Upsert(_players, newDoc, filter);
        }
        private static Recruitment DetermineRecruitment(Player player, string forumPostNumber)
        {
            foreach (var recruitment in player.Recruitments)
            {
                if (string.Compare(forumPostNumber, recruitment.ForumPostNumber) >= 0)
                {
                    return recruitment;
                }
            }

            string msg = string.Format(
                "Something went wrong with recruitments and stuff. Player name: {0}. Forum Post Number: {1}.",
                player.Name,
                forumPostNumber);

            throw new InvalidOperationException(msg);
        }