Пример #1
0
        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));
        }
Пример #2
0
        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;
 }
Пример #5
0
        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"));
            }
        }
Пример #6
0
 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;
 }
Пример #7
0
        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);
        }