public StoryStep(IStoryFrame <T> storyFrame, bool isDialogResultCheckupStep)
 {
     this.StoryFrame = storyFrame;
     this.Message    = storyFrame.Text;
     this.Actor      = storyFrame.Actor;
     this.IsDialogResultCheckupStep = isDialogResultCheckupStep;
 }
        private static void AssertSuggestions(IStoryFrame <IMessageActivity> storyFrame, IMessageActivity message)
        {
            var botStoryFrame = storyFrame as BotStoryFrame <IMessageActivity>;

            Assert.NotNull(botStoryFrame);
            Assert.Equal(botStoryFrame.Suggestions, message.SuggestedActions.Actions.Select(s => new KeyValuePair <string, object>(s.Title, s.Value)));
        }
        private static void AssertUserFrameOption(IStoryFrame <IMessageActivity> storyFrame, IMessageActivity message, IReadOnlyList <string> options)
        {
            Assert.NotEmpty(options);

            var optionValue = options[storyFrame.OptionIndex];

            Assert.Equal(optionValue, message.Text);
        }
Esempio n. 4
0
        private async Task ProcessUserFrameTextExact(IStoryFrame storyStoryFrame, CancellationToken cancellationToken = default(CancellationToken))
        {
            // When user frame is being processed there should be no newly received messages from bot
            Assert.Empty(this.receivedMessages);

            await
            this.userBotMessengerService.GetOrCreateMessengerForUser(this.UserId)
            .SendUserToBotMessageAsync(storyStoryFrame.Text, cancellationToken);
        }
Esempio n. 5
0
        private void ProcessBotFrameTextMatchRegex(IStoryFrame storyFrame)
        {
            var message = this.receivedMessages.FirstOrDefault();

            Assert.NotNull(message);
            Assert.Equal("message", message.Type);
            Assert.Matches(storyFrame.Text, message.Text);

            this.receivedMessages.Remove(message);
        }
        private string GetUserStepMessage(IStoryFrame <IMessageActivity> frame)
        {
            switch (frame.ComparisonType)
            {
            case ComparisonType.Option:
                return(this.GetUserOptionMessage(frame));

            default:
                return(frame.Text);
            }
        }
        private static void ProcessBotFrameListPresent(IStoryFrame <IMessageActivity> storyFrame, IMessageActivity message)
        {
            Assert.NotNull(message);
            Assert.Equal(1, message.Attachments.Count);
            Assert.NotNull(message.Attachments[0].Content);

            var listJson = JObject.Parse(JsonConvert.SerializeObject(message.Attachments[0].Content));

            if (storyFrame.ListPredicate != null)
            {
                Assert.True(storyFrame.ListPredicate(listJson), "List contains expected item");
            }
        }
        private static void ProcessBotFrameListPresent(IStoryFrame <IMessageActivity> storyFrame, IMessageActivity message)
        {
            Assert.NotNull(message);
            Assert.Equal(1, message.Attachments.Count);
            Assert.IsType <JObject>(message.Attachments[0].Content);

            var listJson = (JObject)message.Attachments[0].Content;

            if (storyFrame.ListPredicate != null)
            {
                Assert.True(storyFrame.ListPredicate(listJson), "List contains expected item");
            }
        }
        private string GetUserOptionMessage(IStoryFrame <IMessageActivity> frame)
        {
            if (this.conversationService.LatestOptions == null)
            {
                throw new MissingOptionsException();
            }

            var index = frame.OptionIndex;

            if (index < 0 || this.conversationService.LatestOptions.Length <= index)
            {
                throw new OptionsIndexOutOfRangeException(index, this.conversationService.LatestOptions.Length);
            }

            return(this.conversationService.LatestOptions[index]);
        }
Esempio n. 10
0
        private void ProcessBotFrameTextExact(IStoryFrame storyFrame)
        {
            if (storyFrame == null)
            {
                throw new ArgumentNullException(nameof(storyFrame));
            }

            this.RemoveTypingMessages();

            var message = this.receivedMessages.FirstOrDefault();

            Assert.NotNull(message);
            Assert.Equal("message", message.Type);
            Assert.Equal(storyFrame.Text, message.Text);

            this.receivedMessages.Remove(message);
        }
Esempio n. 11
0
        private async Task ProcessUserFrameOption(IStoryFrame storyFrame, CancellationToken cancellationToken = default(CancellationToken))
        {
            // When user frame is being processed there should be no newly received messages from bot
            Assert.Empty(this.receivedMessages);

            Assert.NotEmpty(this.latestOptions);

            var optionValue = this.latestOptions[storyFrame.OptionIndex];

            if (!string.IsNullOrEmpty(storyFrame.OptionOutputPlaceholder))
            {
                this.outputValues.Add(storyFrame.OptionOutputPlaceholder, optionValue);
            }

            await
            this.userBotMessengerService.GetOrCreateMessengerForUser(this.UserId)
            .SendUserToBotMessageAsync(optionValue, cancellationToken);
        }
Esempio n. 12
0
        private void ProcessBotFrameListPresent(IStoryFrame storyFrame)
        {
            this.RemoveTypingMessages();

            var message = this.receivedMessages.FirstOrDefault();

            Assert.NotNull(message);
            Assert.Equal("list", message.AttachmentLayout);
            Assert.Equal(1, message.Attachments.Count);

            var listJson = (JObject)message.Attachments[0].Content;

            if (storyFrame.ListPredicate != null)
            {
                Assert.True(storyFrame.ListPredicate(listJson), "List contains expected item");
            }

            this.latestOptions = listJson.SelectToken("buttons").Select(item => item["value"].ToString()).ToArray();

            this.receivedMessages.Remove(message);
        }
        public IMessageActivity Build(IStoryFrame <IMessageActivity> frame)
        {
            var text = this.GetUserStepMessage(frame);

            return(new Activity
            {
                Id = Guid.NewGuid().ToString(),
                Type = ActivityTypes.Message,
                From = new ChannelAccount {
                    Id = ChannelId.User
                },
                Text = text,
                Conversation = this.conversationService.Account,
                Recipient = new ChannelAccount {
                    Id = ChannelId.Bot
                },
                ServiceUrl = "InvalidServiceUrl",
                ChannelId = this.configuration.ChannelId,
                Attachments = Array.Empty <Attachment>(),
                Entities = Array.Empty <Entity>(),
            });
        }
 public IMessageActivity Build(IStoryFrame <IMessageActivity> frame)
 {
     return(new Activity
     {
         Id = Guid.NewGuid().ToString(),
         Type = ActivityTypes.ConversationUpdate,
         From = new ChannelAccount {
             Id = ChannelId.User
         },
         Conversation = new ConversationAccount {
             Id = Guid.NewGuid().ToString()
         },
         Recipient = new ChannelAccount {
             Id = ChannelId.Bot
         },
         ServiceUrl = "InvalidServiceUrl",
         ChannelId = this.configuration.ChannelId,
         Attachments = Array.Empty <Attachment>(),
         Entities = Array.Empty <Entity>(),
         MembersAdded = this.configuration.ConversationUpdateAddedMembers
                        .Select(x => new ChannelAccount(x))
                        .ToList(),
     });
 }
Esempio n. 15
0
 public void AddStoryFrame(IStoryFrame storyFrame)
 {
     this.StoryFrames.Add(storyFrame);
 }
 public StoryStep(IStoryFrame storyFrame)
 {
     this.StoryFrame = storyFrame;
     this.Message    = storyFrame.Text;
     this.Actor      = storyFrame.Actor;
 }
 private static void ProcessBotFrameTextWithSuggestions(IStoryFrame <IMessageActivity> storyFrame, IMessageActivity message)
 {
     ProcessFrameTextExact(storyFrame, message.Type, message.Text);
     AssertSuggestions(storyFrame, message);
 }
 private static void ProcessBotFrameTextMatchRegexWithSuggestions(IStoryFrame <IMessageActivity> storyFrame, IMessageActivity message)
 {
     ProcessBotFrameTextMatchRegex(storyFrame, message);
     AssertSuggestions(storyFrame, message);
 }
 private static void ProcessBotFramePredicate(IStoryFrame <IMessageActivity> storyFrame, IMessageActivity message)
 {
     Assert.True(storyFrame.MessageActivityPredicate(message));
 }
 private static void ProcessBotFrameTextMatchRegex(IStoryFrame <IMessageActivity> storyFrame, IMessageActivity message)
 {
     Assert.NotNull(message);
     Assert.Equal(MessageType, message.Type);
     Assert.Matches(storyFrame.Text, message.Text);
 }
        public async Task <IMessageActivity> GetStepMessageActivity(IStoryFrame frame)
        {
            var message = this.GetUserStepMessage(frame);

            return(this.conversationService.GetToBotActivity(message));
        }
        public IMessageActivity GetStepMessageActivity(IStoryFrame <IMessageActivity> frame)
        {
            var activityBuilder = frame.ActivityBuilder ?? new MessageActivityBuilder(this.conversationService, this.configuration);

            return(activityBuilder.Build(frame));
        }
 private static void ProcessFrameTextExact(IStoryFrame <IMessageActivity> storyFrame, string messageType, string message)
 {
     Assert.NotNull(message);
     Assert.Equal(MessageType, messageType);
     Assert.Equal(storyFrame.Text, message);
 }
Esempio n. 24
0
 public T Build(IStoryFrame <T> frame)
 {
     return(this.activity);
 }