示例#1
0
        public async void DoesProfileIsFormattedCorrectly()
        {
            var usersConnector = Helpers.GetDatabaseConnector <UsersConnector>();

            usersConnector.Setup(x => x.GetUser(0)).ReturnsAsync(new User
            {
                Credits          = 100,
                Experience       = 250,
                Id               = 0,
                LastDailyReward  = null,
                LastHourlyReward = null,
                Level            = 4
            });
            var logic = GetShowProfileCommandLogic(usersConnector.Object);

            var result = await logic.ShowProfile(0, "S@mpleUser");

            Assert.Equal(Helpers.InfoColor, result.Color);
            Assert.Equal("User profile - S@mpleUser", result.Title);
            Assert.Equal("**Credits: ** 100\n" +
                         "**Level: ** 4\n" +
                         "**Current exp: ** 250\n" +
                         "**Job title: ** Super Market Assistant\n" +
                         "**Job salary: ** 45\n" +
                         "**Job cooldown: ** 6\n" +
                         "**Minimum bet: ** 60", result.Description);
        }
示例#2
0
        public async void CorrectValuesInTheOutput()
        {
            var usersConnector = Helpers.GetDatabaseConnector <UsersConnector>();

            usersConnector.Setup(x => x.GetUser(0)).ReturnsAsync(new User()
            {
                Id = 0,
                LastDailyReward  = DateTime.Now,
                LastHourlyReward = DateTime.Now,
                LastVoteReward   = DateTime.Now,
                LastWorkReward   = DateTime.Now
            });
            var logic = GetCooldownCommandLogic(usersConnector.Object);

            var result = await logic.GetCooldowns(0);

            var times = result.Description.Split('\n').SkipLast(1) //converts output result to TimeSpan[]
                        .Select(x => string.Join(':', x.Split(':').Skip(1)))
                        .Select(x => TimeSpan.Parse(x))
                        .ToArray();

            Assert.Equal(Helpers.InfoColor, result.Color);
            Assert.Equal(4, times.Length);
            Assert.Equal(TimeSpan.FromHours(1).Subtract(TimeSpan.FromSeconds(1)), times[0]);
            Assert.Equal(TimeSpan.FromDays(1).Subtract(TimeSpan.FromSeconds(1)), times[1]);
            Assert.Equal(TimeSpan.FromHours(6).Subtract(TimeSpan.FromSeconds(1)), times[2]);
            Assert.Equal(TimeSpan.FromHours(12).Subtract(TimeSpan.FromSeconds(1)), times[3]);
        }
示例#3
0
        public async void GiveRewardOnLaterUse()
        {
            var amountOfCredits = 0;
            var usersConnector  = Helpers.GetDatabaseConnector <UsersConnector>();

            usersConnector.Setup(x => x.GetUser(0))
            .ReturnsAsync(new User
            {
                Id               = 0,
                Credits          = 250,
                Experience       = 1200,
                LastDailyReward  = null,
                LastHourlyReward = null,
                LastWorkReward   = new DateTime(2020, 1, 1),
                Level            = 6
            });
            usersConnector.Setup(x => x.GiveCredits(0, It.IsAny <int>()))
            .Callback((ulong user, int credits) => { amountOfCredits += credits; });
            usersConnector.Setup(x => x.UpdateUser(It.IsAny <User>()));
            var logic = GetWorkRewardCommandLogic(usersConnector.Object);

            var result = await logic.GetWorkReward(0);

            Assert.Equal(Helpers.SuccessColor, result.Color);
            Assert.Equal("WorkReward", result.Title);
            Assert.Matches(@"You've gained ([^\\s]+) credits!", result.Description);
        }
示例#4
0
        public async void InformAboutCallingCommandTooEarly()
        {
            var usersConnector = Helpers.GetDatabaseConnector <UsersConnector>();

            usersConnector.Setup(x => x.GetUser(0))
            .ReturnsAsync(new User
            {
                Id               = 0,
                Credits          = 250,
                Experience       = 1200,
                LastDailyReward  = null,
                LastHourlyReward = null,
                LastWorkReward   = DateTime.Now,
                Level            = 6
            });
            var logic = GetWorkRewardCommandLogic(usersConnector.Object);

            var result = await logic.GetWorkReward(0);

            Assert.Equal(Helpers.WarningColor, result.Color);
            Assert.Equal("WorkReward", result.Title);
            Assert.Matches(
                "You've tried to execute command '!work' before it was ready! Command will be ready in ([^\\s]+)",
                result.Description);
        }
示例#5
0
        public async void DoesReturnInfoOnIncorrectArguments(string argument)
        {
            var coinDropConnector = Helpers.GetDatabaseConnector <CoindropConnector>();
            var usersConnector    = Helpers.GetDatabaseConnector <UsersConnector>();
            var logic             = GetCollectDropCommandLogic(coinDropConnector.Object, usersConnector.Object);

            var result = await logic.Collect(argument, 0, 0, "test-user");

            Assert.Equal(Helpers.WarningColor, result.Color);
            Assert.Contains("Invalid arguments!", result.Description);
            Assert.Equal("Collect", result.Title);
        }
示例#6
0
        public async void DoesReturnInfoOnIncorrectArguments(string arguments)
        {
            //Arrange
            var usersConnector       = Helpers.GetDatabaseConnector <UsersConnector>();
            var gameHistoryConnector = Helpers.GetDatabaseConnector <GameHistoryConnector>();
            var logic = GetCoinflipCommandLogic(usersConnector.Object, gameHistoryConnector.Object);

            //Assert
            var result = await logic.PlayCoinflip(arguments, 0);

            Assert.Contains("Invalid arguments!", result.Description);
            Assert.Equal(Helpers.WarningColor, result.Color);
        }
示例#7
0
        public async void IsCorrectAmountDisplayed(int amount)
        {
            var usersConnector = Helpers.GetDatabaseConnector <UsersConnector>();

            usersConnector.Setup(x => x.GetCredits(0)).ReturnsAsync(amount);
            var logic = GetCreditsCommandLogic(usersConnector.Object);

            var result = await logic.GetCurrentCreditStatus(0);

            Assert.Contains(result.Fields, x => x.Name == "Credits balance");
            Assert.Equal("Credits balance", result.Fields[0].Name);
            Assert.Equal(amount.ToString(), result.Fields[0].Value);
        }
示例#8
0
        public async void DoesReturnCorrectAnswerOnLackOfCredits(string arguments, int amount)
        {
            var usersConnector = Helpers.GetDatabaseConnector <UsersConnector>();

            usersConnector.Setup(x => x.TakeCredits(0, amount)).ReturnsAsync(false);
            var gameHistoryConnector = Helpers.GetDatabaseConnector <GameHistoryConnector>();
            var logic = GetCoinflipCommandLogic(usersConnector.Object, gameHistoryConnector.Object);

            var result = await logic.PlayCoinflip(arguments, 0);

            Assert.Contains("This is a casino, not a bank!\nYou do not have enough credits!", result.Description);
            Assert.Equal(Helpers.WarningColor, result.Color);
        }
示例#9
0
        public async void DoesInformationWhenDropIsCollectedWork()
        {
            var coinDropConnector = Helpers.GetDatabaseConnector <CoindropConnector>();

            coinDropConnector.Setup(x => x.CollectCoinDrop(0, 4453)).ReturnsAsync(0);
            var usersConnector = Helpers.GetDatabaseConnector <UsersConnector>();
            var logic          = GetCollectDropCommandLogic(coinDropConnector.Object, usersConnector.Object);

            var result = await logic.Collect("4453", 0, 0, "test-user");

            Assert.Equal(Helpers.InfoColor, result.Color);
            Assert.Contains("Sadly the CoinDrop has already been collected!", result.Description);
            Assert.Equal("CoinDropAlreadyCollected", result.Title);
        }
示例#10
0
        public async void DoesReturnErrorOnInvalidBetSize(string arguments)
        {
            //Arrange
            var usersConnector       = Helpers.GetDatabaseConnector <UsersConnector>();
            var gameHistoryConnector = Helpers.GetDatabaseConnector <GameHistoryConnector>();
            var logic = GetCoinflipCommandLogic(usersConnector.Object, gameHistoryConnector.Object);

            //Assert
            var result = await logic.PlayCoinflip(arguments, 0);

            Assert.Contains("Error Occured!!!", result.Title);
            Assert.Contains("Check your arguments (whether bet size does not equal 0 for example)!",
                            result.Description);
            Assert.Equal(Helpers.WarningColor, result.Color);
        }
示例#11
0
        public async void GetInfoWhenTopGgFunctionalityIsTurnedOff()
        {
            var usersConnector = Helpers.GetDatabaseConnector <UsersConnector>();
            var config         = Helpers.GetConfig();

            config.BotSettings.TopGgToken = null;
            var logic = GetVoteRewardCommandLogic(GetHttpClient(false), usersConnector.Object, config);

            var result = await logic.Vote(0);

            Assert.Equal("TopGGVote", result.Title);
            Assert.Equal(Helpers.InfoColor, result.Color);
            Assert.Equal("Top GG Token functionality is disabled on this server :disappointed:. Contact bots admin to turn it on :slight_smile:.",
                         result.Description);
        }
示例#12
0
        public async void DoesCollectingWork()
        {
            var coinDropConnector = Helpers.GetDatabaseConnector <CoindropConnector>();

            coinDropConnector.Setup(x => x.CollectCoinDrop(0, 4453)).ReturnsAsync(100);
            var usersConnector = Helpers.GetDatabaseConnector <UsersConnector>();

            usersConnector.Setup(x => x.GiveCredits(0, It.IsAny <int>()));
            var logic = GetCollectDropCommandLogic(coinDropConnector.Object, usersConnector.Object);

            var result = await logic.Collect("4453", 0, 0, "test-user");

            Assert.Equal(Helpers.SuccessColor, result.Color);
            Assert.Contains("Congratulations, the CoinDrop has been collected!\n**Reward**", result.Description);
            Assert.Equal("CoinDropCollected", result.Title);
            Assert.Contains("Collected by", result.Footer);
        }
示例#13
0
        public async void GetInfoWhenBotHasNoTogGgToken()
        {
            var httpMessageHandler = GetHttpClient(false, HttpStatusCode.Unauthorized);
            var usersConnector     = Helpers.GetDatabaseConnector <UsersConnector>();

            usersConnector.Setup(x => x.GetUser(0)).ReturnsAsync(new User()
            {
                Id             = 0,
                LastVoteReward = DateTime.Now.Subtract(TimeSpan.FromDays(5))
            });
            var logic = GetVoteRewardCommandLogic(httpMessageHandler, usersConnector.Object);

            var result = await logic.Vote(0);

            Assert.Equal("Invalid Top GG Token Provided by the bot administrator! Please contact him!",
                         result.Description);
            Assert.Equal(Helpers.WarningColor, result.Color);
        }
示例#14
0
        public async void GivesCreditsOnFirstVote()
        {
            var usersConnector = Helpers.GetDatabaseConnector <UsersConnector>();

            usersConnector.Setup(x => x.GetUser(0)).ReturnsAsync(new User()
            {
                Id             = 0,
                LastVoteReward = null
            });
            usersConnector.Setup(x => x.GiveCredits(0, It.IsAny <int>()));
            usersConnector.Setup(x => x.UpdateUser(It.IsAny <User>()));
            var logic = GetVoteRewardCommandLogic(GetHttpClient(true), usersConnector.Object);

            var result = await logic.Vote(0);

            Assert.Matches("You've gained ([^\\s]+) credits!", result.Description);
            Assert.Equal(Helpers.SuccessColor, result.Color);
            Assert.Equal("TopGGVote", result.Title);
        }
示例#15
0
        public async void GiveRewardOnLaterUse()
        {
            var usersConnector = Helpers.GetDatabaseConnector <UsersConnector>();

            usersConnector.Setup(x => x.GetUser(0)).ReturnsAsync(new User
            {
                Id = 0,
                LastDailyReward = new DateTime(2020, 1, 1)
            });
            usersConnector.Setup(x => x.UpdateUser(It.IsAny <User>()));
            usersConnector.Setup(x => x.GiveCredits(0, It.IsAny <int>()));
            var logic = GetHourlyRewardCommandLogic(usersConnector.Object);

            var result = await logic.GetHourlyReward(0);

            Assert.Equal(Helpers.SuccessColor, result.Color);
            Assert.Equal("HourlyReward", result.Title);
            Assert.Matches(@"You've gained ([^\s]+) credits!", result.Description);
        }
示例#16
0
        public async void GetInfoWhenCommandCalledTooEarly()
        {
            var httpMessageHandler = GetHttpClient(true);
            var usersConnector     = Helpers.GetDatabaseConnector <UsersConnector>();

            usersConnector.Setup(x => x.GetUser(0)).ReturnsAsync(new User()
            {
                Id             = 0,
                LastVoteReward = DateTime.Now
            });
            var logic = GetVoteRewardCommandLogic(httpMessageHandler, usersConnector.Object);

            var result = await logic.Vote(0);

            Assert.Equal(Helpers.WarningColor, result.Color);
            Assert.Equal("TopGGVote", result.Title);
            Assert.Matches(
                "You've tried to execute command '!vote' before it was ready! Command will be ready in ([^\\s]+)",
                result.Description);
        }
示例#17
0
        public async void GetInfoThatUserHasNotVoted()
        {
            var httpMessageHandler = GetHttpClient(false);
            var usersConnector     = Helpers.GetDatabaseConnector <UsersConnector>();

            usersConnector.Setup(x => x.GetUser(0)).ReturnsAsync(new User()
            {
                Id             = 0,
                LastVoteReward = DateTime.Now.Subtract(TimeSpan.FromDays(5))
            });
            var logic = GetVoteRewardCommandLogic(httpMessageHandler, usersConnector.Object);

            var result = await logic.Vote(0);

            Assert.Equal(
                "To gain a vote reward, you have to use this link\n[Vote](https://top.gg/bot/688160933574475800/vote)",
                result.Description);
            Assert.Equal(Helpers.InfoColor, result.Color);
            Assert.Equal("You haven't voted yet!", result.Title);
        }
示例#18
0
        public async void DoGetGameHistoryWorks()
        {
            var gameHistoryConnector = Helpers.GetDatabaseConnector <GameHistoryConnector>();

            gameHistoryConnector.Setup(x => x.GetGameHistories(0)).ReturnsAsync(new[]
            {
                new GameHistory {
                    CoinsDifference = 100, GameName = "Sample Game", HasWon = true
                },
                new GameHistory {
                    CoinsDifference = -200, GameName = "Sample Another Game", HasWon = false
                }
            });
            var logic = GetGameHistoryCommandLogic(gameHistoryConnector.Object);

            var result = await logic.GetGameHistory(0);

            Assert.Equal(Helpers.InfoColor, result.Color);
            Assert.Equal("GameHistory", result.Title);
            Assert.Equal("Sample Game | Won | 100\nSample Another Game | Lost | -200", result.Description);
        }
示例#19
0
        public async void CorrectFormattingOfTheOutput()
        {
            var date           = new DateTime(2020, 1, 1, 16, 0, 0);
            var usersConnector = Helpers.GetDatabaseConnector <UsersConnector>();

            usersConnector.Setup(x => x.GetUser(0)).ReturnsAsync(new User()
            {
                Id = 0,
                LastDailyReward  = DateTime.Now,
                LastHourlyReward = DateTime.Now,
                LastVoteReward   = DateTime.Now,
                LastWorkReward   = DateTime.Now
            });
            var logic = GetCooldownCommandLogic(usersConnector.Object);

            var result = await logic.GetCooldowns(0);

            Assert.Equal(Helpers.InfoColor, result.Color);
            Assert.Matches("Hourly : ([^\\s]+)\nDaily : ([^\\s]+)\nWork : ([^\\s]+)\nVote : ([^\\s]+)",
                           result.Description);
        }
示例#20
0
        public async void CorrectlyFormatOutput()
        {
            var usersConnector = Helpers.GetDatabaseConnector <UsersConnector>();

            usersConnector.Setup(x => x.CommandGetGlobalTop()).ReturnsAsync(new List <User>
            {
                new User
                {
                    Credits          = 1200,
                    Experience       = 100,
                    Id               = 1,
                    LastDailyReward  = null,
                    LastHourlyReward = null,
                    Level            = 3
                },
                new User
                {
                    Credits          = 100,
                    Experience       = 0,
                    Id               = 0,
                    LastDailyReward  = null,
                    LastHourlyReward = null,
                    Level            = 1
                }
            });
            var logic = GetGlobalTopCommandLogic(usersConnector.Object);

#pragma warning disable 1998
            var result = await logic.GetGlobalTop(async id =>
#pragma warning restore 1998
            {
                return(id switch
                {
                    0 => "SampleUser1",
                    1 => "SampleUser2",
                    _ => "SampleUser3"
                });
            });
示例#21
0
        public async void DoesPlayingWorks(string arguments, int amount)
        {
            var usersConnector = Helpers.GetDatabaseConnector <UsersConnector>();

            usersConnector.Setup(x => x.TakeCredits(0, amount)).ReturnsAsync(true);
            usersConnector.Setup(x => x.GiveCredits(0, amount * 2));
            usersConnector.Setup(x => x.GetCredits(0)).ReturnsAsync(1000);
            usersConnector.Setup(x => x.GetUser(0)).ReturnsAsync(new User
            {
                Level = 10
            });
            usersConnector.Setup(x => x.CommandGiveUserExp(0, It.IsAny <int>()))
            .ReturnsAsync(new AddExpResult(false, 100000, 0, 0));
            var gameHistoryConnector = Helpers.GetDatabaseConnector <GameHistoryConnector>();

            gameHistoryConnector.Setup(x => x.AddGameHistory(It.IsAny <GameHistory>()))
            .ReturnsAsync(true);
            var logic = GetCoinflipCommandLogic(usersConnector.Object, gameHistoryConnector.Object);

            var result = await logic.PlayCoinflip(arguments, 0);

            Assert.Matches("^\nYou've (won|lost) ([^\\s]+) credits!$", result.Description);
            Assert.Equal("CoinFlip", result.Title);
        }