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(); }
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(); }
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(); }
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(); }
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(); }
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(); }
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(); }
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(); }
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(); }