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."); }
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}'"); } } }
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")); }
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); }
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")); }
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); }
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")); }
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); }
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."); }
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."); }
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}'"); } }