Esempio n. 1
0
        public async Task ShoutOut_is_limited_to_mods_and_subs(bool isSub, bool isMod, int numVerified)
        {
            // arrange
            var userToShout      = "someusername";
            var twitchLibMessage = TwitchLibMessageBuilder.Create()
                                   .WithUsername("NonSub")
                                   .Build();
            var chatMessage = ChatMessageBuilder.Create()
                              .WithTwitchLibMessage(twitchLibMessage)
                              .WithMessage($"!so {userToShout}")
                              .WithIsSubscriber(isSub)
                              .WithIsModerator(isMod)
                              .Build();
            var request = new ShoutOut(chatMessage);

            MockApiWrapper.Setup(m =>
                                 m.DoesUserExist(It.IsAny <string>())).ReturnsAsync(true);
            MockCollection.Setup(m => m.ExistsAsync(userToShout, null))
            .ReturnsAsync(new FakeExistsResult(true));
            MockCollection.Setup(m => m.GetAsync(userToShout, null))
            .ReturnsAsync(new FakeGetResult(new TwitcherProfile()));

            // act
            await _handler.Handle(request, CancellationToken.None);

            // assert
            MockTwitchClient.Verify(x => x.SendMessage(It.IsAny <string>(), It.IsAny <string>(), false),
                                    Times.Exactly(numVerified));
        }
Esempio n. 2
0
        public async Task ShoutOut_will_use_custom_message_if_there_is_one()
        {
            // arrange
            var userProfile = new TwitcherProfile {
                ShoutMessage = "hey hey look at me" + Guid.NewGuid()
            };
            var userName             = "******";
            var expectedShoutMessage = userProfile.ShoutMessage + $" https://twitch.tv/{userName}";
            var twitchLibMessage     = TwitchLibMessageBuilder.Create()
                                       .WithUsername("doesntmatter")
                                       .Build();
            var chatMessage = ChatMessageBuilder.Create()
                              .WithTwitchLibMessage(twitchLibMessage)
                              .WithIsSubscriber(true)
                              .WithMessage($"!so {userName}")
                              .Build();

            MockApiWrapper.Setup(x => x.DoesUserExist(userName)).ReturnsAsync(true);
            MockCollection.Setup(x => x.ExistsAsync(userName.ToLower(), null))
            .ReturnsAsync(new FakeExistsResult(true));
            MockCollection.Setup(x => x.GetAsync(userName.ToLower(), null))
            .ReturnsAsync(new FakeGetResult(userProfile));
            var shout = new ShoutOut(chatMessage);

            // act
            await _handler.Handle(shout, CancellationToken.None);

            // assert
            MockTwitchClient.Verify(x => x.SendMessage(It.IsAny <string>(), expectedShoutMessage, false), Times.Once);
        }
Esempio n. 3
0
        public async Task Gets_content_and_says_it_to_chat_room()
        {
            // arrange
            var channel         = "somechannel" + Guid.NewGuid();
            var commandName     = "!somemessage";
            var expectedContent = "blah blah blah whatever " + Guid.NewGuid();
            var content         = new ValidStaticCommands
            {
                Commands = new List <StaticCommandInfo>
                {
                    new StaticCommandInfo
                    {
                        Command = commandName,
                        Content = expectedContent
                    }
                }
            };

            MockCollection.Setup(x => x.GetAsync("staticContentCommands", null))
            .ReturnsAsync(new FakeGetResult(content));
            var request = new StaticMessage(commandName, channel);

            // act
            await _handler.Handle(request, CancellationToken.None);

            // assert
            // _twitchClient.SendMessage(request.Channel, command.Content);
            MockTwitchClient.Verify(x => x.SendMessage(channel, expectedContent, false), Times.Once);
        }
Esempio n. 4
0
        public async Task Show_current_project_url()
        {
            // arrange
            var expectedUrl     = "http://example.org/foo/bar";
            var expectedMessage = $"Current Project is: " + expectedUrl;
            var projectInfo     = new CurrentProjectInfo {
                Url = new Uri(expectedUrl)
            };
            var twitchLibMessage = TwitchLibMessageBuilder.Create()
                                   .WithUsername("doesntmatterusername")
                                   .Build();
            var chatMessage = ChatMessageBuilder.Create()
                              .WithTwitchLibMessage(twitchLibMessage)
                              .WithMessage("!currentproject")
                              .WithChannel("doesntmatterchannel")
                              .Build();
            var request = new SayCurrentProject(chatMessage);

            MockCollection.Setup(x => x.GetAsync("currentProject", null))
            .ReturnsAsync(new FakeGetResult(projectInfo));

            // act
            await _handler.Handle(request, CancellationToken.None);

            // assert
            MockTwitchClient.Verify(x => x.SendMessage(It.IsAny <string>(), expectedMessage, false), Times.Once);
        }
Esempio n. 5
0
        public async Task ShoutOut_will_shout_the_given_username()
        {
            // arrange
            var userName         = "******";
            var twitchLibMessage = TwitchLibMessageBuilder.Create()
                                   .WithUsername("doesntmatter")
                                   .Build();
            var chatMessage = ChatMessageBuilder.Create()
                              .WithTwitchLibMessage(twitchLibMessage)
                              .WithIsSubscriber(true)
                              .WithMessage($"!so {userName}")
                              .Build();

            MockApiWrapper.Setup(x => x.DoesUserExist(userName)).ReturnsAsync(true);
            MockCollection.Setup(x => x.ExistsAsync(userName.ToLower(), null))
            .ReturnsAsync(new FakeExistsResult(true));
            MockCollection.Setup(x => x.GetAsync(userName.ToLower(), null))
            .ReturnsAsync(new FakeGetResult(new TwitcherProfile()));
            var shout           = new ShoutOut(chatMessage);
            var expectedMessage = $"Hey everyone, check out @{userName}'s Twitch stream at https://twitch.tv/{userName}";

            // act
            await _handler.Handle(shout, CancellationToken.None);

            // assert
            MockTwitchClient.Verify(x => x.SendMessage(It.IsAny <string>(), expectedMessage, false), Times.Once);
        }
Esempio n. 6
0
        public async Task ShoutOut_WILL_shout_if_the_given_username_is_a_real_twitch_user()
        {
            // arrange
            var userLookup       = "doesntmattereither";
            var twitchLibMessage = TwitchLibMessageBuilder.Create()
                                   .WithUsername("doesntmatter")
                                   .Build();
            var chatMessage = ChatMessageBuilder.Create()
                              .WithTwitchLibMessage(twitchLibMessage)
                              .WithIsSubscriber(true)
                              .WithMessage($"!so {userLookup}")
                              .Build();

            MockApiWrapper.Setup(x => x.DoesUserExist(userLookup)).ReturnsAsync(true);
            MockCollection.Setup(x => x.ExistsAsync(userLookup.ToLower(), null))
            .ReturnsAsync(new FakeExistsResult(true));
            MockCollection.Setup(x => x.GetAsync(userLookup.ToLower(), null))
            .ReturnsAsync(new FakeGetResult(new TwitcherProfile()));

            var shout = new ShoutOut(chatMessage);

            // act
            await _handler.Handle(shout, CancellationToken.None);

            // assert
            MockTwitchClient.Verify(x => x.SendMessage(It.IsAny <string>(), It.IsAny <string>(), false), Times.Once);
        }
Esempio n. 7
0
        public async Task Valid_url_must_be_passed_in(string message)
        {
            // arrange
            var twitchLibMessage = TwitchLibMessageBuilder.Create()
                                   .WithUsername(MockTwitchOptions.Object.Value.Username)
                                   .Build();
            var chatMessage = ChatMessageBuilder.Create()
                              .WithTwitchLibMessage(twitchLibMessage)
                              .WithMessage(message)
                              .Build();
            var request = new SetCurrentProject(chatMessage);

            // act
            await _handler.Handle(request, CancellationToken.None);

            // assert
            MockTwitchClient.Verify(x => x.SendMessage(It.IsAny <string>(), "Sorry, I couldn't understand that URL!", false), Times.Once);
        }
Esempio n. 8
0
        public async Task ShoutOut_will_do_nothing_if_no_name_is_given()
        {
            // arrange
            var twitchLibMessage = TwitchLibMessageBuilder.Create()
                                   .WithUsername("doesntmatter")
                                   .Build();
            var chatMessage = ChatMessageBuilder.Create()
                              .WithTwitchLibMessage(twitchLibMessage)
                              .WithIsSubscriber(true)
                              .WithMessage("!so")
                              .Build();
            var request = new ShoutOut(chatMessage);

            // act
            await _handler.Handle(request, CancellationToken.None);

            // assert
            MockTwitchClient.Verify(x => x.SendMessage(It.IsAny <string>(), It.IsAny <string>(), false), Times.Never);
        }
Esempio n. 9
0
        public async Task Help_will_provide_details_on_specific_commands(string messageText, string startsWith)
        {
            // arrange
            var expectedChannel  = "whateverchannel";
            var twitchLibMessage = TwitchLibMessageBuilder.Create()
                                   .Build();
            var chatMessage = ChatMessageBuilder.Create()
                              .WithTwitchLibMessage(twitchLibMessage)
                              .WithChannel(expectedChannel)
                              .WithMessage(messageText)
                              .Build();
            var request = new Help(chatMessage);

            // act
            await _handler.Handle(request, CancellationToken.None);

            // assert
            MockTwitchClient.Verify(x => x.SendMessage(expectedChannel,
                                                       It.Is <string>(s => s.StartsWith(startsWith)), false), Times.Once);
        }
Esempio n. 10
0
        public async Task Help_with_invalid_arguments_will_just_say_generic_help()
        {
            // arrange
            var expectedChannel  = "whateverchannel";
            var twitchLibMessage = TwitchLibMessageBuilder.Create()
                                   .Build();
            var chatMessage = ChatMessageBuilder.Create()
                              .WithTwitchLibMessage(twitchLibMessage)
                              .WithChannel(expectedChannel)
                              .WithMessage("!help somethingThatIsntACommand")
                              .Build();
            var request = new Help(chatMessage);

            // act
            await _handler.Handle(request, CancellationToken.None);

            // assert
            MockTwitchClient.Verify(x => x.SendMessage(expectedChannel,
                                                       It.Is <string>(s => s.StartsWith("Try these commands:")), false), Times.Once);
        }
Esempio n. 11
0
        public async Task Says_okay_if_able_to_store()
        {
            // arrange
            var twitchLibMessage = TwitchLibMessageBuilder.Create()
                                   .WithUsername(MockTwitchOptions.Object.Value.Username)
                                   .Build();
            var chatMessage = ChatMessageBuilder.Create()
                              .WithTwitchLibMessage(twitchLibMessage)
                              .WithMessage("!setcurrentproject http://validurl.com")
                              .Build();
            var request = new SetCurrentProject(chatMessage);

            MockCollection.Setup(x => x.UpsertAsync(It.IsAny <string>(), It.IsAny <CurrentProjectInfo>(), null))
            .ReturnsAsync(new FakeMutationResult());

            // act
            await _handler.Handle(request, CancellationToken.None);

            // assert
            MockTwitchClient.Verify(x => x.SendMessage(It.IsAny <string>(), "Okay, got it!", false), Times.Once);
        }
Esempio n. 12
0
        public async Task Says_an_error_message_if_unable_to_store()
        {
            // arrange
            var twitchLibMessage = TwitchLibMessageBuilder.Create()
                                   .WithUsername(MockTwitchOptions.Object.Value.Username)
                                   .Build();
            var chatMessage = ChatMessageBuilder.Create()
                              .WithTwitchLibMessage(twitchLibMessage)
                              .WithMessage("!setcurrentproject http://validurl.com")
                              .Build();
            var request = new SetCurrentProject(chatMessage);

            MockCollection.Setup(x => x.UpsertAsync(It.IsAny <string>(), It.IsAny <CurrentProjectInfo>(), null))
            .Throws <Exception>();

            // act
            await _handler.Handle(request, CancellationToken.None);

            // assert
            MockTwitchClient.Verify(x => x.SendMessage(It.IsAny <string>(), "I was unable to store that, sorry!", false), Times.Once);
        }
Esempio n. 13
0
        public async Task If_user_isnt_specified_with_command_say_error_message(string messageWithNoUser)
        {
            // arrange
            var expectedMessage  = $"You must specify a user to trout.";
            var twitchLibMessage = TwitchLibMessageBuilder.Create()
                                   .WithUsername("doesn't matter")
                                   .Build();
            var chatMessage = ChatMessageBuilder.Create()
                              .WithTwitchLibMessage(twitchLibMessage)
                              .WithMessage(messageWithNoUser)
                              .Build();

            var troutRequest = new Trout(chatMessage);

            // act
            await _handler.Handle(troutRequest, CancellationToken.None);

            // assert
            MockTwitchClient.Verify(m =>
                                    m.SendMessage(It.IsAny <string>(), expectedMessage, false), Times.Once);
        }
Esempio n. 14
0
        public async Task ShoutOut_will_not_shout_if_the_given_username_isnt_a_real_twitch_user()
        {
            // arrange
            var userLookup       = "doesntmattereither";
            var twitchLibMessage = TwitchLibMessageBuilder.Create()
                                   .WithUsername("doesntmatter")
                                   .Build();
            var chatMessage = ChatMessageBuilder.Create()
                              .WithTwitchLibMessage(twitchLibMessage)
                              .WithIsSubscriber(true)
                              .WithMessage($"!so {userLookup}")
                              .Build();

            MockApiWrapper.Setup(x => x.DoesUserExist(userLookup)).ReturnsAsync(false);
            var shout = new ShoutOut(chatMessage);

            // act
            await _handler.Handle(shout, CancellationToken.None);

            // assert
            MockTwitchClient.Verify(x => x.SendMessage(It.IsAny <string>(), It.IsAny <string>(), false), Times.Never);
        }
Esempio n. 15
0
        public async Task Only_the_bot_user_itself_can_set_the_current_project()
        {
            // arrange
            var notTheBotUser    = MockTwitchOptions.Object.Value.Username + Guid.NewGuid();
            var twitchLibMessage = TwitchLibMessageBuilder.Create()
                                   .WithUsername(notTheBotUser)
                                   .Build();
            var chatMessage = ChatMessageBuilder.Create()
                              .WithTwitchLibMessage(twitchLibMessage)
                              .WithMessage("doesntmatter")
                              .Build();

            var request = new SetCurrentProject(chatMessage);

            // act
            await _handler.Handle(request, CancellationToken.None);

            // assert - twitch client never used, bucket never used
            MockTwitchClient.Verify(x => x.SendMessage(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <bool>()),
                                    Times.Never);
            MockCollection.Verify(x => x.UpsertAsync(It.IsAny <string>(), It.IsAny <CurrentProjectInfo>(), null),
                                  Times.Never);
        }
Esempio n. 16
0
        public async Task If_user_exists_then_perform_trout_action_with_target_username(string userThatDoesExist)
        {
            // arrange
            var twitchLibMessage = TwitchLibMessageBuilder.Create()
                                   .WithUsername("doesn't matter")
                                   .Build();
            var chatMessage = ChatMessageBuilder.Create()
                              .WithTwitchLibMessage(twitchLibMessage)
                              .WithMessage($"!trout {userThatDoesExist}")
                              .Build();

            MockApiWrapper.Setup(m => m.DoesUserExist(It.IsAny <string>()))
            .ReturnsAsync(true);

            var troutRequest = new Trout(chatMessage);

            // act
            await _handler.Handle(troutRequest, CancellationToken.None);

            // assert
            MockTwitchClient.Verify(x =>
                                    x.SendMessage(It.IsAny <string>(), $"/me slaps @{userThatDoesExist.Replace("@","")} around a bit with a large trout.", It.IsAny <bool>())
                                    , Times.Once);
        }
Esempio n. 17
0
        public async Task If_no_current_project_set_show_default_message()
        {
            // arrange
            var expectedDefaultMessage = "I haven't set any current project yet, sorry!";
            var twitchLibMessage       = TwitchLibMessageBuilder.Create()
                                         .WithUsername("doesntmatterusername")
                                         .Build();
            var chatMessage = ChatMessageBuilder.Create()
                              .WithTwitchLibMessage(twitchLibMessage)
                              .WithMessage("!currentproject")
                              .WithChannel("doesntmatterchannel")
                              .Build();
            var request = new SayCurrentProject(chatMessage);

            MockCollection.Setup(m => m.GetAsync("currentProject", null))
            .Throws <Exception>();

            // act
            await _handler.Handle(request, CancellationToken.None);

            // assert
            MockTwitchClient.Verify(x => x.SendMessage(It.IsAny <string>(), expectedDefaultMessage, false),
                                    Times.Once);
        }
Esempio n. 18
0
        public async Task If_user_doesnt_exist_trouting_say_error_message(string userThatDoesntExist)
        {
            // arrange
            var expectedMessage  = $"User {userThatDoesntExist.Replace("@", "")} doesn't exist.";
            var twitchLibMessage = TwitchLibMessageBuilder.Create()
                                   .WithUsername("doesn't matter")
                                   .Build();
            var chatMessage = ChatMessageBuilder.Create()
                              .WithTwitchLibMessage(twitchLibMessage)
                              .WithMessage($"!trout {userThatDoesntExist}")
                              .Build();

            MockApiWrapper.Setup(m => m.DoesUserExist(userThatDoesntExist))
            .ReturnsAsync(false);

            var troutRequest = new Trout(chatMessage);

            // act
            await _handler.Handle(troutRequest, CancellationToken.None);

            // assert
            MockTwitchClient.Verify(m =>
                                    m.SendMessage(It.IsAny <string>(), expectedMessage, false), Times.Once);
        }