示例#1
0
        public async Task TranslateToUserLanguage()
        {
            if (!EnvironmentVariablesDefined())
            {
                Assert.Inconclusive("Missing Translator Environment variables - Skipping test");
                return;
            }

            var nativeLanguages = new string[] { };
            var patterns        = new Dictionary <string, List <string> >();

            var activities   = TranscriptUtilities.GetFromTestContext(TestContext);
            var userState    = new UserState(new MemoryStorage());
            var userLangProp = userState.CreateProperty <string>("language");

            TestAdapter adapter = new TestAdapter()
                                  .Use(userState)
                                  .Use(new TranslationMiddleware(nativeLanguages, translatorKey, patterns, new CustomDictionary(), userLangProp, true));

            var flow = new TestFlow(adapter, async(context, cancellationToken) =>
            {
                if (!context.Responded)
                {
                    await context.SendActivityAsync($"message: {context.Activity.Text}");
                }
            });

            await flow.Test(activities).StartTestAsync();
        }
示例#2
0
        public async Task LocaleConvertToEnglish()
        {
            var botLocale = "en-us";

            var activities = TranscriptUtilities.GetFromTestContext(TestContext);

            var userState    = new UserState(new MemoryStorage());
            var userLangProp = userState.CreateProperty <string>("language", () => "en-us");

            TestAdapter adapter = new TestAdapter()
                                  .Use(userState)
                                  .Use(new LocaleConverterMiddleware(userLangProp, botLocale, LocaleConverter.Converter));

            var flow = new TestFlow(adapter, async(context, cancellationToken) =>
            {
                if (context.Activity.Type == ActivityTypes.Message)
                {
                    var userMessage = context.Activity.Text.ToLowerInvariant();
                    if (userMessage.StartsWith("set language "))
                    {
                        await userLangProp.SetAsync(context, userMessage.Substring(13, 5));
                    }
                    else
                    {
                        await context.SendActivityAsync($"message: {context.Activity.Text}");
                    }
                }
            });

            await flow.Test(activities, (expected, actual) =>
            {
                Assert.AreEqual(expected.AsMessageActivity().Text, actual.AsMessageActivity().Text);
            }).StartTestAsync();
        }
示例#3
0
        public async Task SkillMiddlewarePopulatesSkillContextDifferentDatatypes()
        {
            string jsonSkillBeginActivity = await File.ReadAllTextAsync(@".\TestData\skillBeginEvent.json");

            var skillBeginEvent = JsonConvert.DeserializeObject <Activity>(jsonSkillBeginActivity);

            var skillContextData = new SkillContext();

            skillContextData.Add("PARAM1", DateTime.Now);
            skillContextData.Add("PARAM2", 3);
            skillContextData.Add("PARAM3", null);

            // Ensure we have a copy
            skillBeginEvent.Value = new SkillContext(skillContextData);

            TestAdapter adapter = new TestAdapter()
                                  .Use(new SkillMiddleware(_userState, _conversationState, _dialogStateAccessor));

            var testFlow = new TestFlow(adapter, async(context, cancellationToken) =>
            {
                // Validate that SkillContext has been populated by the SKillMiddleware correctly
                await ValidateSkillContextData(context, skillContextData);
            });

            await testFlow.Test(new Activity[] { skillBeginEvent }).StartTestAsync();
        }
示例#4
0
        public async Task CustomStateTest()
        {
            var activities = TranscriptUtilities.GetFromTestContext(TestContext);

            var storage = new MemoryStorage();

            TestAdapter adapter = new TestAdapter()
                                  .Use(new CustomState(storage));

            var flow = new TestFlow(adapter, async(context) => {
                var(command, value) = GetCommandValue(context);
                switch (command)
                {
                case "delete":
                    CustomState.Get(context).Value = null;
                    break;

                case "set":
                    CustomState.Get(context).Value = value;
                    break;

                case "read":
                    await context.SendActivityAsync($"value:{CustomState.Get(context).Value}");
                    break;

                default:
                    await context.SendActivityAsync("bot message");
                    break;
                }
            });

            await flow.Test(activities).StartTestAsync();
        }
示例#5
0
        public async Task TranslateToEnglish()
        {
            if (!EnvironmentVariablesDefined())
            {
                Assert.Inconclusive("Missing Translator Environment variables - Skipping test");
                return;
            }

            var nativeLanguages = new string[] { "en-us" };
            var patterns        = new Dictionary <string, List <string> >();

            var activities = TranscriptUtilities.GetFromTestContext(TestContext);

            TestAdapter adapter = new TestAdapter()
                                  .Use(new UserState <LanguageState>(new MemoryStorage()))
                                  .Use(new TranslationMiddleware(nativeLanguages, translatorKey, patterns, new CustomDictionary(), GetUserLanguage, SetUserLanguage, false));

            var flow = new TestFlow(adapter, async(context) => {
                if (!context.Responded)
                {
                    await context.SendActivityAsync($"message: {context.Activity.Text}");
                }
            });

            await flow.Test(activities).StartTestAsync();
        }
        public async Task ConversationStateTest()
        {
            var testName   = "ConversationStateTest";
            var activities = TranscriptUtilities.GetActivitiesFromFile(ClassName, testName);

            var storage = new MemoryStorage();

            var convoState   = new ConversationState(new MemoryStorage());
            var testProperty = convoState.CreateProperty <ConversationStateObject>("test");

            var adapter = new TestAdapter(TestAdapter.CreateConversation(testName))
                          .Use(new AutoSaveStateMiddleware(convoState));

            var flow = new TestFlow(adapter, async(context, cancellationToken) =>
            {
                if (context.Activity.Type == ActivityTypes.Message)
                {
                    var(command, value) = GetCommandValue(context);
                    switch (command)
                    {
                    case "delete":
                        await testProperty.DeleteAsync(context);
                        break;

                    case "set":
                        {
                            var data   = await testProperty.GetAsync(context, () => new ConversationStateObject());
                            data.Value = value;
                            await testProperty.SetAsync(context, data);
                        }

                        break;

                    case "read":
                        {
                            var data = await testProperty.GetAsync(context, () => new ConversationStateObject());
                            await context.SendActivityAsync($"value:{data.Value}");
                        }

                        break;

                    default:
                        await context.SendActivityAsync("bot message");
                        break;
                    }
                }
            });

            await flow.Test(activities).StartTestAsync();
        }
        public async Task SkillMiddlewareEmptySkillContext()
        {
            string jsonSkillBeginActivity = await File.ReadAllTextAsync(@".\TestData\skillBeginEvent.json");

            var skillBeginEvent = JsonConvert.DeserializeObject <Activity>(jsonSkillBeginActivity);

            TestAdapter adapter = new TestAdapter()
                                  .Use(new SkillMiddleware(_userState, _conversationState, _dialogStateAccessor));

            var testFlow = new TestFlow(adapter, async(context, cancellationToken) =>
            {
                // Validate that SkillContext has been populated by the SKillMiddleware correctly
                await ValidateSkillContextData(context, new SkillContext());
            });

            await testFlow.Test(new Activity[] { skillBeginEvent }).StartTestAsync();
        }
        public async Task UserStateTest()
        {
            var activities = TranscriptUtilities.GetFromTestContext(TestContext);

            var userState    = new UserState(new MemoryStorage());
            var testProperty = userState.CreateProperty <UserStateObject>("test");

            var adapter = new TestAdapter()
                          .Use(userState);

            var flow = new TestFlow(adapter, async(context, cancellationToken) =>
            {
                if (context.Activity.Type == ActivityTypes.Message)
                {
                    var(command, value) = GetCommandValue(context);
                    switch (command)
                    {
                    case "delete":
                        await testProperty.DeleteAsync(context);
                        break;

                    case "set":
                        {
                            var data   = await testProperty.GetAsync(context, () => new UserStateObject());
                            data.Value = value;
                            await testProperty.SetAsync(context, data);
                        }
                        break;

                    case "read":
                        {
                            var data = await testProperty.GetAsync(context, () => new UserStateObject());
                            await context.SendActivityAsync($"value:{data.Value}");
                        }
                        break;

                    default:
                        await context.SendActivityAsync("bot message");
                        break;
                    }
                }
            });

            await flow.Test(activities).StartTestAsync();
        }
示例#9
0
        public async Task BotAdapted_Bracketing()
        {
            var testName   = "BotAdapted_Bracketing";
            var activities = TranscriptUtilities.GetActivitiesFromFile(ClassName, testName);

            TestAdapter adapter = new TestAdapter(TestAdapter.CreateConversation(testName))
                                  .Use(new BeforeAfterMiddleware());

            adapter.OnTurnError = async(context, exception) =>
            {
                await context.SendActivityAsync($"Caught: {exception.Message}");

                return;
            };

            var flow = new TestFlow(adapter, async(context, cancellationToken) =>
            {
                switch (context.Activity.Type)
                {
                case ActivityTypes.Message:
                    {
                        var userMessage = context.Activity.AsMessageActivity()?.Text;
                        switch (userMessage)
                        {
                        case "use middleware":
                            await context.SendActivityAsync("using middleware");
                            break;

                        case "catch exception":
                            await context.SendActivityAsync("generating exception");
                            throw new Exception("exception to catch");
                        }
                    }

                    break;

                default:
                    await context.SendActivityAsync(context.Activity.Type);
                    break;
                }
            });

            await flow.Test(activities).StartTestAsync();
        }
示例#10
0
        public async Task SkillMiddlewareNullEventName()
        {
            string jsonSkillBeginActivity = await File.ReadAllTextAsync(@".\TestData\skillBeginEvent.json");

            var skillBeginEvent = JsonConvert.DeserializeObject <Activity>(jsonSkillBeginActivity);

            skillBeginEvent.Name = null;

            TestAdapter adapter = new TestAdapter()
                                  .Use(new SkillMiddleware(_userState, _conversationState, _dialogStateAccessor));

#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously
            var testFlow = new TestFlow(adapter, async(context, cancellationToken) =>
#pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously
            {
            });

            await testFlow.Test(new Activity[] { skillBeginEvent }).StartTestAsync();
        }
        public async Task SkillMiddlewareTestCancelAllSkillDialogsEvent()
        {
            var cancelAllSkillDialogsEvent = new Activity
            {
                Name = SkillEvents.CancelAllSkillDialogsEventName,
            };

            TestAdapter adapter = new TestAdapter()
                                  .Use(new SkillMiddleware(_userState, _conversationState, _dialogStateAccessor));

            var testFlow = new TestFlow(adapter, async(context, cancellationToken) =>
            {
                Assert.AreEqual(context.Activity.Name, SkillEvents.CancelAllSkillDialogsEventName);

                var conversationState = await _dialogStateAccessor.GetAsync(context, () => new DialogState());
                Assert.AreEqual(conversationState.DialogStack.Count, 0);
            });

            await testFlow.Test(new Activity[] { cancelAllSkillDialogsEvent }).StartTestAsync();
        }
示例#12
0
        public async Task LocaleConvertToEnglish()
        {
            var botLocale = "en-us";

            var activities = TranscriptUtilities.GetFromTestContext(TestContext);

            TestAdapter adapter = new TestAdapter()
                                  .Use(new UserState <LanguageState>(new MemoryStorage()))
                                  .Use(new LocaleConverterMiddleware(GetUserLanguage, SetUserLanguage, botLocale, LocaleConverter.Converter));

            var flow = new TestFlow(adapter, async(context) => {
                if (!context.Responded)
                {
                    await context.SendActivityAsync($"message: {context.Activity.Text}");
                }
            });

            await flow.Test(activities, (expected, actual) => {
                Assert.AreEqual(expected.AsMessageActivity().Text, actual.AsMessageActivity().Text);
            }).StartTestAsync();
        }
示例#13
0
        public async Task BotAdapted_Bracketing()
        {
            var activities = TranscriptUtilities.GetFromTestContext(TestContext);

            TestAdapter adapter = new TestAdapter()
                                  .Use(new BeforeAfterMiddleware())
                                  .Use(new CatchExceptionMiddleware());

            var flow = new TestFlow(adapter, async(context) => {
                var userMessage = context.Activity.AsMessageActivity()?.Text;
                switch (userMessage)
                {
                case "use middleware":
                    await context.SendActivityAsync("using middleware");
                    break;

                case "catch exception":
                    await context.SendActivityAsync("generating exception");
                    throw new Exception("exception to catch");
                }
            });

            await flow.Test(activities).StartTestAsync();
        }