public async Task Post_NewMessage_ShouldHandle() { // Arrange var fixture = new Fixture(); var stubApplicationSettings = new Mock <IApplicationSettings>(); var botService = new Mock <BotService>(stubApplicationSettings.Object, new Mock <ILogger <BotService> >().Object); botService.CallBase = true; botService.Setup(x => x.HandleMessageAsync(It.IsAny <string>(), It.IsAny <int>())).Returns(Task.CompletedTask); CallbackController callbackController = new CallbackController(stubApplicationSettings.Object, botService.Object, new Mock <ILogger <CallbackController> >().Object); CallbackEventModel callbackEventModel = new CallbackEventModel() { Type = CallbackEventType.NewMessage, Group_id = fixture.Create <int>(), Object = JsonConvert.SerializeObject(new { Body = fixture.Create <string>(), User_id = fixture.Create <int>() }) }; // Act var result = await callbackController.Post(callbackEventModel); // Assert botService.Verify(x => x.HandleMessageAsync(It.IsAny <string>(), It.IsAny <int>()), Times.Once); Assert.IsInstanceOfType(result, typeof(OkObjectResult)); }
public async Task Post_ConfirmationEventWithCorrectGroupId_ShouldConfirm() { // Arrange var fixture = new Fixture(); int groupId = fixture.Create <int>(); string serverConfirmationReplyString = fixture.Create <string>(); var stubApplicationSettings = new Mock <IApplicationSettings>(); stubApplicationSettings.SetupGet(x => x.ServerConfirmationGroupId).Returns(groupId); stubApplicationSettings.SetupGet(x => x.ServerConfirmationReplyString).Returns(serverConfirmationReplyString); var botService = new Mock <BotService>(stubApplicationSettings.Object, new Mock <ILogger <BotService> >().Object); botService.CallBase = true; botService.Setup(x => x.HandleMessageAsync(It.IsAny <string>(), It.IsAny <int>())).Returns(Task.CompletedTask); CallbackController callbackController = new CallbackController(stubApplicationSettings.Object, botService.Object, new Mock <ILogger <CallbackController> >().Object); CallbackEventModel callbackEventModel = new CallbackEventModel() { Type = CallbackEventType.Confirmation, Group_id = groupId }; OkObjectResult okResult = new OkObjectResult(serverConfirmationReplyString); // Act var result = await callbackController.Post(callbackEventModel); // Assert Assert.AreEqual(okResult.Value.ToString(), (result as OkObjectResult)?.Value.ToString()); }
public async Task<SvamletModel> Post(CallbackEventModel model) { var sinch = SinchFactory.CreateCallbackResponseFactory(Locale.EnUs); var reader = sinch.CreateEventReader(); var evt = reader.ReadModel(model); var builder = sinch.CreateIceSvamletBuilder(); switch (evt.Event) { case Event.IncomingCall: builder.AddNumberInputMenu("menu1", "Enter 4 digits", 4, "Enter 4 digits", 3, TimeSpan.FromSeconds(60)); builder.RunMenu("menu1"); break; case Event.PromptInput: using (var db = new ConferenceContext()) { var conference = db.Conferences.FirstOrDefault(c => c.PinCode == model.MenuResult.Value); if (conference != null) { builder.ConnectConference(conference.ConferenceId.ToString()); } else { builder.Say("Invalid code").Hangup(HangupCause.Normal); } } break; case Event.AnsweredCall: builder.Continue(); break; default: break; } return builder.Build().Model; }
public async Task<SvamletModel> Post(CallbackEventModel model) { var sinch = SinchFactory.CreateCallbackResponseFactory(Locale.EnUs); var reader = sinch.CreateEventReader(); var evt = reader.ReadModel(model); var builder = sinch.CreateIceSvamletBuilder(); switch (evt.Event) { case Event.IncomingCall: if (model.OriginationType == "MXP") { await ConnectToConference(model.To.Endpoint, model.From, builder); } else { builder.AddNumberInputMenu("menu1", "Enter 4 digit pin", 4, "Enter 4 digit pin", 3, TimeSpan.FromSeconds(60)); builder.RunMenu("menu1"); } break; case Event.PromptInput: await ConnectToConference(model.MenuResult.Value, model.From, builder); break; case Event.AnsweredCall: builder.Continue(); break; case Event.DisconnectedCall: break; default: break; } return builder.Build().Model; }
public async Task <ActionResult> Post([FromBody] CallbackEventModel callbackEvent) { if (string.IsNullOrEmpty(callbackEvent.Type)) { return(BadRequest()); } switch (callbackEvent.Type) { case CallbackEventType.Confirmation: if (callbackEvent.Group_id != _settings.ServerConfirmationGroupId) { _logger.LogWarning($"Callback server confirmation failed. Group ids are mismatch. GroupId: {callbackEvent.Group_id}"); return(BadRequest()); } return(Ok(_settings.ServerConfirmationReplyString)); case CallbackEventType.NewMessage: var message = JsonConvert.DeserializeObject <MessageModel>(callbackEvent.Object.ToString()); await _botService.HandleMessageAsync(message.Body, message.User_id); return(Ok("ok")); default: return(Ok("ok")); } }
public Svamlet Post(CallbackEventModel model) { var sinch = new CallbackFactory(new Locale("en-US")); Svamlet result = null; var builder = sinch.CreateIceSvamletBuilder(); if (NumberConfigContext.Current().Any(c => c.From == model.From)) { var config = NumberConfigContext.Current().FirstOrDefault(c => c.From == model.From); result = builder.ConnectPstn(config.To).WithCli(model.To.Endpoint).WithoutCallbacks().Model; } else { result = builder.Say("Invalid caller id!").Hangup().Model; } return result; }
public ICallbackEvent ReadModel(CallbackEventModel model) { if (model == null) { return(null); } Type resultType; if (!ResultImplementationMap.TryGetValue(model.Event, out resultType)) { resultType = typeof(CallingCallbackEvent); } var resultImplementation = resultType.GetConstructor(new Type[0]); if (resultImplementation == null) { return(null); } var result = resultImplementation.Invoke(null); foreach (var resultProperty in resultType.GetProperties()) { var sourcePropertyName = GetSourceName(resultType, resultProperty.Name); var sourceProperty = model.GetType().GetProperty(sourcePropertyName); if (sourceProperty == null) { continue; } var converted = ReadModelProperty(sourceProperty.GetValue(model), resultProperty.PropertyType); try { resultProperty.SetValue(result, converted); } catch (Exception ex) { Trace.WriteLine("Conversion failed for property '" + resultProperty.Name + "' - " + ex); } } return(result as ICallbackEvent); }
public async Task <SvamletModel> Post(CallbackEventModel model) { var sinch = SinchFactory.CreateCallbackResponseFactory(Locale.EnUs); var reader = sinch.CreateEventReader(); var evt = reader.ReadModel(model); var builder = sinch.CreateIceSvamletBuilder(); switch (evt.Event) { case Event.IncomingCall: builder.AddNumberInputMenu("menu1", "Enter 4 digits", 4, "Enter 4 digits", 3, TimeSpan.FromSeconds(60)); builder.RunMenu("menu1"); break; case Event.PromptInput: using (var db = new ConferenceContext()) { var conference = db.Conferences.FirstOrDefault(c => c.PinCode == model.MenuResult.Value); if (conference != null) { builder.ConnectConference(conference.ConferenceId.ToString()); } else { builder.Say("Invalid code").Hangup(HangupCause.Normal); } } break; case Event.AnsweredCall: builder.Continue(); break; default: break; } return(builder.Build().Model); }