public async Task HandleUpdate_NonSupportedUpdateTypeReceived_Should_DoNothing() { // Arrange var telegramBotMock = new Mock <ITelegramBotClient>(); var loggerMock = new Mock <ILogger <TelegramUpdateHandler> >(); var update = new Update { ChatMember = new ChatMemberUpdated() }; var handler = new TelegramUpdateHandler(null, null, loggerMock.Object); // Act await handler.HandleUpdateAsync(telegramBotMock.Object, update, default); // Assert // Verify LogInformation was called loggerMock.Verify(x => x.Log( LogLevel.Information, It.IsAny <EventId>(), It.IsAny <It.IsAnyType>(), It.IsAny <Exception>(), (Func <It.IsAnyType, Exception, string>)It.IsAny <object>())); }
public async Task HandleUpdate_MessageReceivedNotTextType_Should_DoNothing() { // Arrange var telegramBotMock = new Mock <ITelegramBotClient>(); var chatConfigServiceMock = new Mock <IChatConfigurationService>(); var serviceScopeFactory = new Mock <IServiceScopeFactory>(); var serviceScope = new Mock <IServiceScope>(); var serviceProvider = new Mock <IServiceProvider>(); var update = new Update { Message = new Message { Audio = new Audio(), Chat = new Chat { Id = 1 } } }; serviceScopeFactory.Setup(x => x.CreateScope()).Returns(serviceScope.Object); serviceScope.Setup(x => x.ServiceProvider).Returns(serviceProvider.Object); serviceProvider.Setup(x => x.GetService(typeof(IChatConfigurationService))).Returns(chatConfigServiceMock.Object); var handler = new TelegramUpdateHandler(serviceScopeFactory.Object, null, null); // Act await handler.HandleUpdateAsync(telegramBotMock.Object, update, default); // Assert chatConfigServiceMock.Verify(x => x.GetConfigurationByChatId(update.Message.Chat.Id), Times.Never); }
public async Task HandleError_ApiRequestException_Should_LogWarning(string exceptionMessage) { // Arrange var telegramBotMock = new Mock <ITelegramBotClient>(); var loggerMock = new Mock <ILogger <TelegramUpdateHandler> >(); var githubServiceMock = new Mock <IGithubService>(); var handler = new TelegramUpdateHandler(null, githubServiceMock.Object, loggerMock.Object); var exception = new ApiRequestException(exceptionMessage); // Act await handler.HandleErrorAsync(telegramBotMock.Object, exception, default); // Assert // Verify LogWarning was called loggerMock.Verify(x => x.Log( LogLevel.Warning, It.IsAny <EventId>(), It.IsAny <It.IsAnyType>(), It.IsAny <Exception>(), (Func <It.IsAnyType, Exception, string>)It.IsAny <object>())); // Verify CreateBugIssue was never called githubServiceMock.Verify(x => x.CreateBugIssue(It.IsAny <string>(), It.IsAny <Exception>(), It.IsAny <GithubIssueLabels>()), Times.Never); }
public async Task HandleError_ExceptionCaptured_Should_LogErrorAndCreateBugIssue() { // Arrange var telegramBotMock = new Mock <ITelegramBotClient>(); var loggerMock = new Mock <ILogger <TelegramUpdateHandler> >(); var githubServiceMock = new Mock <IGithubService>(); var handler = new TelegramUpdateHandler(null, githubServiceMock.Object, loggerMock.Object); var exception = new Exception("Fatal test exception"); // Act await handler.HandleErrorAsync(telegramBotMock.Object, exception, default); // Assert // Verify LogError was called loggerMock.Verify(x => x.Log( LogLevel.Error, It.IsAny <EventId>(), It.IsAny <It.IsAnyType>(), exception, (Func <It.IsAnyType, Exception, string>)It.IsAny <object>())); // Verify CreateBugIssue was called githubServiceMock.Verify(x => x.CreateBugIssue("Application Exception: Fatal test exception", exception, GithubIssueLabels.Telegram)); }
public async Task HandleAsync_calls_message_handler_when_update_type_is_Message() { var fakeLogger = new Mock <ILogger <TelegramUpdateHandler> >(); var fakeMessageHandler = new Mock <IHandleTelegramMessage>(); var fakeOptions = new Mock <IOptions <TelegramBotConfiguration> >(); var fakeBotService = new Mock <ITelegramBotService>(); var handler = new TelegramUpdateHandler( fakeLogger.Object, fakeMessageHandler.Object, fakeBotService.Object, fakeOptions.Object); await handler.HandleAsync(TelegramUpdateFactory.CreateFakeTelegramUpdate(UpdateType.Message)); fakeMessageHandler.Verify(x => x.HandleAsync(It.IsAny <TelegramMessage>()), Times.Once); }
public async Task HandleAsync_should_do_nothing_if_update_is_null() { var fakeLogger = new Mock <ILogger <TelegramUpdateHandler> >(); var fakeMessageHandler = new Mock <IHandleTelegramMessage>(); var fakeOptions = new Mock <IOptions <TelegramBotConfiguration> >(); var fakeBotService = new Mock <ITelegramBotService>(); var handler = new TelegramUpdateHandler( fakeLogger.Object, fakeMessageHandler.Object, fakeBotService.Object, fakeOptions.Object); await handler.HandleAsync(null); fakeBotService.VerifyNoOtherCalls(); fakeMessageHandler.VerifyNoOtherCalls(); }
public async Task HandleUpdate_MessageReceived_Should_GetCorrections() { // Arrange var telegramBotMock = new Mock <ITelegramBotClient>(); var chatConfigServiceMock = new Mock <IChatConfigurationService>(); var serviceScopeFactory = new Mock <IServiceScopeFactory>(); var serviceScope = new Mock <IServiceScope>(); var serviceProvider = new Mock <IServiceProvider>(); var loggerMock = new Mock <ILogger <TelegramUpdateHandler> >(); var grammarService = new Mock <IGrammarService>(); var update = new Update { Message = new Message { Text = "My Text", Chat = new Chat { Id = 1 } } }; chatConfigServiceMock.Setup(x => x.GetConfigurationByChatId(update.Message.Chat.Id)) .ReturnsAsync(new ChatConfiguration()); grammarService.Setup(x => x.GetCorrections("My Text")) .ReturnsAsync(new GrammarCheckResult(null)); serviceScopeFactory.Setup(x => x.CreateScope()).Returns(serviceScope.Object); serviceScope.Setup(x => x.ServiceProvider).Returns(serviceProvider.Object); serviceProvider.Setup(x => x.GetService(typeof(IChatConfigurationService))).Returns(chatConfigServiceMock.Object); serviceProvider.Setup(x => x.GetService(typeof(IEnumerable <IGrammarService>))).Returns(new[] { grammarService.Object }); var handler = new TelegramUpdateHandler(serviceScopeFactory.Object, null, loggerMock.Object); // Act await handler.HandleUpdateAsync(telegramBotMock.Object, update, default); // Assert chatConfigServiceMock.Verify(x => x.GetConfigurationByChatId(update.Message.Chat.Id)); grammarService.Verify(x => x.GetCorrections("My Text")); }
public async Task HandleAsync_does_not_report_or_catch_exception_if_message_handler_fails() { var fakeLogger = new Mock <ILogger <TelegramUpdateHandler> >(); var fakeMessageHandler = new Mock <IHandleTelegramMessage>(); var fakeOptions = new Mock <IOptions <TelegramBotConfiguration> >(); var fakeBotService = new Mock <ITelegramBotService>(); var exception = new Exception("whoops"); fakeMessageHandler.Setup(x => x.HandleAsync(It.IsAny <TelegramMessage>())) .ThrowsAsync(exception); var fakeClient = new Mock <ITelegramBotClient>(); fakeBotService.SetupGet(x => x.Client).Returns(fakeClient.Object); var fakeConfig = new TelegramBotConfiguration { EnableExceptionForwarding = false, ExceptionChatId = 42 }; fakeOptions.SetupGet(x => x.Value).Returns(fakeConfig); var handler = new TelegramUpdateHandler( fakeLogger.Object, fakeMessageHandler.Object, fakeBotService.Object, fakeOptions.Object); Func <Task> action = async() => await handler.HandleAsync(TelegramUpdateFactory.CreateFakeTelegramUpdate(UpdateType.Message)); await action.Should().ThrowAsync <Exception>(); fakeClient.VerifyNoOtherCalls(); }
public async Task HandleAsync_catches_and_reports_exception_when_message_handler_throws_and_exception_forwarding_is_enabled() { var fakeLogger = new Mock <ILogger <TelegramUpdateHandler> >(); var fakeMessageHandler = new Mock <IHandleTelegramMessage>(); var fakeOptions = new Mock <IOptions <TelegramBotConfiguration> >(); var fakeBotService = new Mock <ITelegramBotService>(); var exception = new Exception("whoops"); fakeMessageHandler.Setup(x => x.HandleAsync(It.IsAny <TelegramMessage>())) .ThrowsAsync(exception); var fakeClient = new Mock <ITelegramBotClient>(); fakeBotService.SetupGet(x => x.Client).Returns(fakeClient.Object); var fakeConfig = new TelegramBotConfiguration { EnableExceptionForwarding = true, ExceptionChatId = 42 }; fakeOptions.SetupGet(x => x.Value).Returns(fakeConfig); var handler = new TelegramUpdateHandler( fakeLogger.Object, fakeMessageHandler.Object, fakeBotService.Object, fakeOptions.Object); await handler.HandleAsync(TelegramUpdateFactory.CreateFakeTelegramUpdate(UpdateType.Message)); var expectedMessage = $"```\n{exception}\n```"; fakeClient.VerifySendTextMessageAsync(fakeConfig.ExceptionChatId, expectedMessage, Times.Once(), ParseMode.Markdown); }
public async Task <IActionResult> Post(Update update, [FromServices] TelegramUpdateHandler updateHandler) { var handled = await updateHandler.Handle(update); return(Ok(handled)); }