public ApiCallManagerTests() { var telegramMock = new Mock <TelegramController>(null, null, null, null, null, null, null, null); telegramMock.Setup(m => m.SendMessage(It.IsAny <long>(), It.IsAny <string>())).Returns(Task.CompletedTask); telegramMock.Setup(m => m.ReBindAuth(It.IsAny <long>())).Returns(Task.CompletedTask); TelegramController telegramHandler = telegramMock.Object; services = new ServiceCollection(); services.AddLogging(); services.AddScoped <GraphApi, OutlookApi>(); services.AddScoped <GraphApi, OneDriveApi>(); services.AddScoped <GraphApi, PermissionsApi>(); services.AddScoped <GraphApi, CalendarApi>(); services.AddScoped <GraphApi, PersonalContactsApi>(); services.AddScoped <ApiController>(); services.AddScoped <ApiCallManager>(); services.AddScoped <DefaultGraphApi>(); services.AddScoped(services => telegramHandler); services.AddScoped(services => Utils.CreateMemoryDbContext()); Dictionary <string, string> config = new Dictionary <string, string> { { "API:NumberOfMethodCall", "2" }, { "API:NumberOfServiceCall", "1" } }; var configuration = new ConfigurationBuilder() .AddInMemoryCollection(config) .Build(); services.AddScoped <IConfiguration>(service => configuration); }
public async void HandleQuery(CallbackQuery query) { try { var controller = new TelegramController(); controller.Start(); var account = controller.FromQuery(query); if (account == null) { await Bot.AnswerCallbackQueryAsync(query.Id, "Your account doesn't exist."); return; } account.Controller = account.Controller ?? controller; var command = GetQuery(query, account); Console.WriteLine($"Command: {command}"); await SendTextMessageAsync(command.Execute(query, account)); } catch (Exception e) { Console.WriteLine(e); } }
public async Task Handle_Message_With_Command_Ok() { // Arrange var botTokenFake = "fakeToken"; string mockCommandResult = "result"; var fakeEntityType = "bot_command"; var fakeLength = 1; var fakeOffset = 1; var fakeEntity = GetMessageEntityFake(fakeEntityType, fakeLength, fakeOffset); MessageEntity[] fakeEntities = { fakeEntity }; var fakeUpdateId = 1; var fakeUpdate = GetUpdateFake(fakeUpdateId, fakeEntities); _telegramServiceMock.Setup(x => x.GenerateResponseTextAsync(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <int>())) .Returns(Task.FromResult(mockCommandResult)); _telegramServiceMock.Setup(x => x.SendMessageToBotAsync(It.IsAny <string>(), It.IsAny <SendMessage>(), It.IsAny <CancellationToken>())); // Act var telegramController = new TelegramController( _telegramServiceMock.Object ); var actionResult = await telegramController.HandleMessageAsync(botTokenFake, fakeUpdate) as OkResult; // Assert Assert.NotNull(actionResult); }
public void GetPassword_CorrectMessegeAndCacheMiss_CallSendTextMessage() { var botStub = new Mock <ITelegramBotClient>(); var hubProxyStub = new Mock <IHubProxy>(); var hubProxyFactoryStub = new Mock <IHubProxyFactory>(); hubProxyFactoryStub .Setup(f => f.Create( It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <Action <string> >())) .Returns(hubProxyStub.Object); var cacheStub = new Mock <ICache <long, IHubProxy> >(); var controller = new TelegramController(botStub.Object, hubProxyFactoryStub.Object, "urlStub", "hubNameStub", cacheStub.Object); var chatId = 1; var message = "Correct message"; var update = CreateUpdate(chatId, message); controller.GetPassword(update); hubProxyFactoryStub .Verify(f => f.Create(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <Action <string> >()), Times.Once); cacheStub .Verify(mock => mock.Add(It.IsAny <long>(), It.IsAny <IHubProxy>()), Times.Once); hubProxyStub .Verify(mock => mock.Invoke("Generate", "{\"Key\":\"Correct\",\"Value\":\"message\"}"), Times.Once); }
public BotUtilsTests() { var telegramMock = new Mock <TelegramController>(null, null, null, null, null, null, null, null); telegramMock.Setup(m => m.SendMessage(It.IsAny <long>(), It.IsAny <string>())).Returns(Task.CompletedTask); TelegramController telegramHandler = telegramMock.Object; services = new ServiceCollection(); services.AddScoped(services => telegramHandler); services.AddScoped(services => Utils.CreateMemoryDbContext()); }
public void GetPassword_IncorrectMessegeAndCacheHit_CallSendTextMessageWithErrorText() { var botStub = new Mock <ITelegramBotClient>(); var hubProxyStub = new Mock <IHubProxy>(); var hubProxyFactoryStub = new Mock <IHubProxyFactory>(); hubProxyFactoryStub .Setup(f => f.Create( It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <Action <string> >())) .Returns(hubProxyStub.Object); var cacheStub = new Mock <ICache <long, IHubProxy> >(); IHubProxy outProxy; cacheStub .Setup(mock => mock.TryGet(It.IsAny <long>(), out outProxy)) .Callback(() => outProxy = hubProxyStub.Object) .Returns(true); var controller = new TelegramController(botStub.Object, hubProxyFactoryStub.Object, "urlStub", "hubNameStub", cacheStub.Object); var chatId = 1; var message = "Incorrect"; var update = CreateUpdate(chatId, message); controller.GetPassword(update); hubProxyFactoryStub .Verify(f => f.Create(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <Action <string> >()), Times.Never); cacheStub .Verify(mock => mock.Add(It.IsAny <long>(), It.IsAny <IHubProxy>()), Times.Never); botStub.Verify(mock => mock.SendTextMessageAsync( chatId, "_use_: \"*key* *example.com*\"", false, false, 0, null, Telegram.Bot.Types.Enums.ParseMode.Markdown, default(System.Threading.CancellationToken) ), Times.Once); }
public async Task Post_should_return_status_code_200() { var fakeService = new Mock <IHandleTelegramUpdate>(); var controller = new TelegramController(fakeService.Object); var result = await controller.Post(new TelegramUpdate()); result.Should().BeAssignableTo <StatusCodeResult>(); var statusCodeResult = result as StatusCodeResult; statusCodeResult.StatusCode.Should().Be((int)HttpStatusCode.OK); }
public async Task Post_should_call_service() { var fakeService = new Mock <IHandleTelegramUpdate>(); var fakeUpdate = new TelegramUpdate { Id = 42 }; var controller = new TelegramController(fakeService.Object); await controller.Post(new TelegramUpdate { Id = 42 }); fakeService.Verify(x => x.HandleAsync(It.Is <TelegramUpdate>(u => u.Id == fakeUpdate.Id)), Times.Once); }
/// <summary> /// 檢查是否有新版本,並通知管理員 /// </summary> /// <param name="serviceProvider"></param> /// <returns></returns> public static async Task CheckAppVersionAsync(IServiceProvider serviceProvider) { bool needUpdate = await CheckNeedUpdateAsync(serviceProvider); if (needUpdate) { BotDbContext db = serviceProvider.GetService(typeof(BotDbContext)) as BotDbContext; List <long> usersIds = await db.TelegramUsers.AsQueryable().Where(user => user.IsAdmin).Select(user => user.Id).ToListAsync(); TelegramController telegramHandler = serviceProvider.GetService(typeof(TelegramController)) as TelegramController; IEnumerable <Task> sendMessageTasks = usersIds.Select(userId => telegramHandler.SendMessage(userId, "Bot 有新版本需要更新 \n https://github.com/NTUT-SELab/MicrosoftGraphBot")); await Task.WhenAll(sendMessageTasks); } }
public void GetPassword_CorrectMessegeAndCacheHit_CallSendTextMessage() { var botStub = new Mock <ITelegramBotClient>(); var hubProxyStub = new Mock <IHubProxy>(); var hubProxyFactoryStub = new Mock <IHubProxyFactory>(); hubProxyFactoryStub .Setup(f => f.Create( It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <Action <string> >())) .Returns(hubProxyStub.Object); var cacheStub = new Mock <ICache <long, IHubProxy> >(); IHubProxy outProxy; cacheStub .Setup(mock => mock.TryGet(It.IsAny <long>(), out outProxy)) .Callback(() => outProxy = hubProxyStub.Object) .Returns(true); var controller = new TelegramController(botStub.Object, hubProxyFactoryStub.Object, "urlStub", "hubNameStub", cacheStub.Object); var chatId = 1; var message = "Correct message"; var update = CreateUpdate(chatId, message); //hack, cause cant settings mock out param in nested function //exeption here means that the proxy.Invoke called Assert.Throws(typeof(NullReferenceException), () => controller.GetPassword(update)); hubProxyFactoryStub .Verify(f => f.Create(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <Action <string> >()), Times.Never); cacheStub .Verify(mock => mock.Add(It.IsAny <long>(), It.IsAny <IHubProxy>()), Times.Never); //Assert.Throw upper used insted of this call //hubProxyStub // .Verify(mock => mock.Invoke("Generate", "{\"Key\":\"Correct\",\"Value\":\"message\"}"), Times.Once); }
/// <summary> /// 推播呼叫 Api 的結果給使用者 /// </summary> /// <param name="serviceProvider"></param> /// <returns></returns> public static async Task PushApiResultAsync(IServiceProvider serviceProvider) { BotDbContext db = serviceProvider.GetService(typeof(BotDbContext)) as BotDbContext; IList <ApiResult> apiResults = await db.ApiResults.Include(result => result.TelegramUser).ToListAsync(); if (apiResults.Any()) { IEnumerable <long> usersIds = apiResults.Select(item => item.TelegramUserId).Distinct(); TelegramController telegramHandler = serviceProvider.GetService(typeof(TelegramController)) as TelegramController; IEnumerable <Task> sendMessageTasks = usersIds.Select(usersId => telegramHandler.SendMessage(usersId, string.Join('\n', apiResults.Where(item => item.TelegramUserId == usersId).OrderBy(item => item.Date).Select(item => $"時間: {item.Date}, 結果:\n{item.Result}")))); db.ApiResults.RemoveRange(apiResults); Task sendMessageTask = Task.WhenAll(sendMessageTasks); Task dbTask = db.SaveChangesAsync(); await sendMessageTask; await dbTask; } }
public async void HandleMessage(Message message) { var chatId = message.From.Id; Account account; if (TelegramController.Accounts.ContainsKey(chatId)) { account = TelegramController.Accounts[chatId]; } else { var contoller = new TelegramController(); contoller.Start(); account = contoller.FromMessage(message); account.Controller = contoller; } var command = GetCommand(message, account); Console.WriteLine( $"Command: {command}, status: {account.Status.ToString()}"); await SendTextMessageAsync(command.Execute(message, this, account)); }
public async Task Handle_Message_With_No_Commands_Ok() { // Arrange var botTokenFake = "fakeToken"; string mockCommandResult = "result"; var fakeUpdateId = 1; var fakeUpdate = GetUpdateFake(fakeUpdateId); _telegramServiceMock.Setup(x => x.GenerateResponseTextAsync(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <int>())) .Returns(Task.FromResult(mockCommandResult)); _telegramServiceMock.Setup(x => x.SendMessageToBotAsync(It.IsAny <string>(), It.IsAny <SendMessage>(), It.IsAny <CancellationToken>())); // Act var telegramController = new TelegramController( _telegramServiceMock.Object ); var actionResult = await telegramController.HandleMessageAsync(botTokenFake, fakeUpdate) as AcceptedResult; // Assert Assert.NotNull(actionResult); }
public NotificationManager(Client.Client client) { controller = new TelegramController(); controller.Start(); _client = client; }