Ejemplo n.º 1
0
        public async Task AddTwoTournamentDirectors()
        {
            const ulong              firstUserId   = 123;
            const ulong              secondUserId  = 1234;
            MessageStore             messageStore  = new MessageStore();
            ICommandContext          context       = this.CreateCommandContext(messageStore);
            GlobalTournamentsManager globalManager = new GlobalTournamentsManager();

            AddTournamentDirectorDirectly(globalManager, firstUserId);

            BotCommandHandler commandHandler = new BotCommandHandler(context, globalManager);

            IGuildUser guildUser = this.CreateGuildUser(secondUserId);
            await commandHandler.AddTournamentDirectorAsync(guildUser, DefaultTournamentName);

            string expectedMessage = BotStrings.AddTournamentDirectorSuccessful(
                DefaultTournamentName, DefaultGuildName);

            messageStore.VerifyChannelMessages(expectedMessage);

            TournamentsManager manager = globalManager.GetOrAdd(DefaultGuildId, id => new TournamentsManager());

            Assert.IsTrue(
                manager.TryGetTournament(DefaultTournamentName, out ITournamentState state),
                "Could not find tournament.");
            Assert.IsTrue(state.IsDirector(firstUserId), "First director was not added.");
            Assert.IsTrue(state.IsDirector(secondUserId), "Second director was not added.");
        }
Ejemplo n.º 2
0
        public async Task ScheduleRequiresMultipleEmbeds()
        {
            const int teamsCount   = 50;
            const int readersCount = teamsCount / 2;

            MessageStore             messageStore  = new MessageStore();
            ICommandContext          context       = this.CreateCommandContext(messageStore, guildId: DefaultGuildId);
            GlobalTournamentsManager globalManager = new GlobalTournamentsManager();
            TournamentsManager       manager       = globalManager.GetOrAdd(DefaultGuildId, id => new TournamentsManager());

            HashSet <Team> teams = new HashSet <Team>(
                Enumerable.Range(1, teamsCount).Select(id => new Team()
            {
                Name = $"#Team{id}"
            }));
            HashSet <Reader> readers = new HashSet <Reader>(
                Enumerable.Range(1, readersCount).Select(id => new Reader()
            {
                Id = (ulong)id, Name = $"#Reader{id}"
            }));

            RoundRobinScheduleFactory factory = new RoundRobinScheduleFactory(1, 0);
            Schedule schedule = factory.Generate(teams, readers);

            ITournamentState state = new TournamentState(DefaultGuildId, "T");

            state.Schedule = schedule;
            manager.AddOrUpdateTournament(state.Name, state, (name, oldState) => oldState);
            Assert.IsTrue(
                manager.TrySetCurrentTournament(state.Name, out string errorMessage),
                $"Failed to set the tournament: '{errorMessage}'");
            globalManager.GetOrAdd(DefaultGuildId, id => manager);

            BotCommandHandler commandHandler = new BotCommandHandler(context, globalManager);

            await commandHandler.GetScheduleAsync();

            Assert.IsTrue(
                messageStore.ChannelEmbeds.Count > 1,
                $"Expected more than 1 embed, got {messageStore.ChannelEmbeds.Count}");

            string allEmbeds = string.Join('\n', messageStore.ChannelEmbeds);

            for (int round = 0; round < schedule.Rounds.Count; round++)
            {
                Assert.IsTrue(
                    allEmbeds.Contains(BotStrings.RoundNumber(round + 1)),
                    $"Round {round + 1} not found in the embeds. Embeds: '{allEmbeds}'");
                foreach (Game game in schedule.Rounds[round].Games)
                {
                    string expectedGame = BotStrings.ScheduleLine(
                        game.Reader.Name, game.Teams.Select(team => team.Name).ToArray());
                    Assert.IsTrue(
                        allEmbeds.Contains(expectedGame),
                        $"Game '{expectedGame}' not foudn in embed. Embed: '{allEmbeds}'");
                }
            }
        }
Ejemplo n.º 3
0
        public void GetStringNotExist()
        {
            //ARRANGE
            string     testJsonPath  = $"{_testDir}/_testfiles/BotStringsFiles/test.json";
            BotStrings sutBotStrings = new BotStrings(testJsonPath);
            //ACT** Delegated action
            TestDelegate delegatedAct = new TestDelegate(() => { sutBotStrings.getString("test4"); });
            //ASSERT
            BotGeneraicException except = Assert.Throws <BotGeneraicException>(delegatedAct);

            Assert.That(except.Message, Is.EqualTo("test4 botstring not found"));
        }
Ejemplo n.º 4
0
        public async Task NoCurrentTournament()
        {
            MessageStore             messageStore  = new MessageStore();
            ICommandContext          context       = this.CreateCommandContext(messageStore);
            GlobalTournamentsManager globalManager = new GlobalTournamentsManager();

            BotCommandHandler commandHandler = new BotCommandHandler(context, globalManager);
            await commandHandler.GetCurrentTournamentAsync();

            string expectedMessage = BotStrings.UnableToPerformCommand(TournamentStrings.NoCurrentTournamentRunning);

            messageStore.VerifyDirectMessages(expectedMessage);
        }
Ejemplo n.º 5
0
        public void LoadJsonFileExist()
        {
            //ARRANGE
            string     testJsonPath  = $"{_testDir}/_testfiles/BotStringsFiles/test.json";
            BotStrings sutBotStrings = new BotStrings(testJsonPath);
            //ACT
            Dictionary <string, string> containers = sutBotStrings.Container;

            //ASSERT
            Assert.That(containers["test1"], Is.EqualTo("Test 1"));
            Assert.That(containers["test2"], Is.EqualTo("Test 2"));
            Assert.That(containers["test3"], Is.EqualTo("Test 3"));
        }
Ejemplo n.º 6
0
        public async Task GetCurrentTournament()
        {
            MessageStore             messageStore  = new MessageStore();
            ICommandContext          context       = this.CreateCommandContext(messageStore);
            GlobalTournamentsManager globalManager = new GlobalTournamentsManager();

            this.AddCurrentTournament(globalManager);

            BotCommandHandler commandHandler = new BotCommandHandler(context, globalManager);
            await commandHandler.GetCurrentTournamentAsync();

            string expectedMessage = BotStrings.CurrentTournamentInGuild(DefaultGuildName, DefaultTournamentName);

            messageStore.VerifyDirectMessages(expectedMessage);
        }
Ejemplo n.º 7
0
        public void GetStringExist()
        {
            //ARRANGE
            string     testJsonPath  = $"{_testDir}/_testfiles/BotStringsFiles/test.json";
            BotStrings sutBotStrings = new BotStrings(testJsonPath);
            //ACT
            string test1String = sutBotStrings.getString("test1");
            string test2String = sutBotStrings.getString("test2");
            string test3String = sutBotStrings.getString("test3");

            //ASSERT
            Assert.That(test1String, Is.EqualTo("Test 1"));
            Assert.That(test2String, Is.EqualTo("Test 2"));
            Assert.That(test3String, Is.EqualTo("Test 3"));
        }
Ejemplo n.º 8
0
        public async Task RemoveFromNonexistentTournament()
        {
            const ulong              otherId        = DefaultUserId + 1;
            MessageStore             messageStore   = new MessageStore();
            ICommandContext          context        = this.CreateCommandContext(messageStore);
            GlobalTournamentsManager globalManager  = new GlobalTournamentsManager();
            BotCommandHandler        commandHandler = new BotCommandHandler(context, globalManager);

            IGuildUser guildUser = this.CreateGuildUser(otherId);
            await commandHandler.RemoveTournamentDirectorAsync(guildUser, DefaultTournamentName);

            string expectedMessage = BotStrings.TournamentDoesNotExist(DefaultTournamentName, DefaultGuildName);

            messageStore.VerifyChannelMessages(expectedMessage);
        }
Ejemplo n.º 9
0
        public async Task RemoveNonexistentTournamentDirector()
        {
            const ulong              otherId        = DefaultUserId + 1;
            MessageStore             messageStore   = new MessageStore();
            ICommandContext          context        = this.CreateCommandContext(messageStore);
            GlobalTournamentsManager globalManager  = new GlobalTournamentsManager();
            BotCommandHandler        commandHandler = new BotCommandHandler(context, globalManager);

            AddTournamentDirectorDirectly(globalManager, DefaultUserId);

            IGuildUser guildUser = this.CreateGuildUser(otherId);
            await commandHandler.RemoveTournamentDirectorAsync(guildUser, DefaultTournamentName);

            string expectedMessage = BotStrings.UserNotTournamentDirector(DefaultTournamentName, DefaultGuildName);

            messageStore.VerifyChannelMessages(expectedMessage);

            TournamentsManager manager = globalManager.GetOrAdd(DefaultGuildId, id => new TournamentsManager());

            Assert.IsTrue(
                manager.TryGetTournament(DefaultTournamentName, out ITournamentState state), "Could not find tournament.");
            Assert.IsFalse(state.IsDirector(otherId), "Director should not have been added.");
        }
Ejemplo n.º 10
0
        public async Task AddSameTournamentDirectors()
        {
            MessageStore             messageStore  = new MessageStore();
            ICommandContext          context       = this.CreateCommandContext(messageStore);
            GlobalTournamentsManager globalManager = new GlobalTournamentsManager();

            AddTournamentDirectorDirectly(globalManager, DefaultUserId);

            BotCommandHandler commandHandler = new BotCommandHandler(context, globalManager);

            IGuildUser guildUser = this.CreateGuildUser(DefaultUserId);
            await commandHandler.AddTournamentDirectorAsync(guildUser, DefaultTournamentName);

            string expectedMessage = BotStrings.UserAlreadyTournamentDirector(DefaultTournamentName, DefaultGuildName);

            messageStore.VerifyChannelMessages(expectedMessage);

            TournamentsManager manager = globalManager.GetOrAdd(DefaultGuildId, id => new TournamentsManager());

            Assert.IsTrue(
                manager.TryGetTournament(DefaultTournamentName, out ITournamentState state),
                "Could not find tournament.");
            Assert.IsTrue(state.IsDirector(DefaultUserId), "User should still be a director.");
        }
Ejemplo n.º 11
0
        public async Task SimplestSchedule()
        {
            const string readerName     = "#Reader";
            const string firstTeamName  = "#TeamA";
            const string secondTeamName = "#TeamB";

            MessageStore             messageStore  = new MessageStore();
            ICommandContext          context       = this.CreateCommandContext(messageStore, guildId: DefaultGuildId);
            GlobalTournamentsManager globalManager = new GlobalTournamentsManager();
            TournamentsManager       manager       = globalManager.GetOrAdd(DefaultGuildId, id => new TournamentsManager());

            HashSet <Team> teams = new HashSet <Team>()
            {
                new Team()
                {
                    Name = firstTeamName
                },
                new Team()
                {
                    Name = secondTeamName
                }
            };
            HashSet <Reader> readers = new HashSet <Reader>()
            {
                new Reader()
                {
                    Id   = 0,
                    Name = readerName
                }
            };
            RoundRobinScheduleFactory factory = new RoundRobinScheduleFactory(2, 0);
            Schedule schedule = factory.Generate(teams, readers);

            ITournamentState state = new TournamentState(DefaultGuildId, "T");

            state.Schedule = schedule;
            manager.AddOrUpdateTournament(state.Name, state, (name, oldState) => oldState);
            Assert.IsTrue(
                manager.TrySetCurrentTournament(state.Name, out string errorMessage),
                $"Failed to set the tournament: '{errorMessage}'");
            globalManager.GetOrAdd(DefaultGuildId, id => manager);

            BotCommandHandler commandHandler = new BotCommandHandler(context, globalManager);

            await commandHandler.GetScheduleAsync();

            Assert.AreEqual(1, messageStore.ChannelEmbeds.Count, "Unexpected number of embeds");

            string embed = messageStore.ChannelEmbeds[0];

            for (int round = 0; round < schedule.Rounds.Count; round++)
            {
                Assert.IsTrue(
                    embed.Contains(BotStrings.RoundNumber(round + 1)),
                    $"Round {round + 1} not found in embed. Embed: '{embed}'");
                string expectedGame = BotStrings.ScheduleLine(
                    readerName, schedule.Rounds[round].Games[0].Teams.Select(team => team.Name).ToArray());
                Assert.IsTrue(
                    embed.Contains(expectedGame),
                    $"Game '{expectedGame}' not foudn in embed. Embed: '{embed}'");
            }
        }