Skip to content
This repository has been archived by the owner on Jun 30, 2022. It is now read-only.

Commit

Permalink
[Skill Template] Updated with new libs, LG, activity handler, main di…
Browse files Browse the repository at this point in the history
…alog changes (#2613)

* updated skill template

* updated to using activity templates
  • Loading branch information
lauren-mills committed Oct 30, 2019
1 parent 34da033 commit 9c28759
Show file tree
Hide file tree
Showing 62 changed files with 1,246 additions and 1,185 deletions.
3 changes: 2 additions & 1 deletion templates/Skill-Template/csharp/Directory.Build.props
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<Project>
<PropertyGroup>
<CodeAnalysisRuleSet>$(SolutionDir)..\..\..\VirtualAssistant.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRuleSet>$(SolutionDir)\VirtualAssistant.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>

<ItemGroup>
Expand All @@ -10,6 +10,7 @@
<PropertyGroup>
<RestoreAdditionalProjectSources>
https://botbuilder.myget.org/F/aitemplates/api/v3/index.json;
https://botbuilder.myget.org/F/botbuilder-v4-dotnet-daily/api/v3/index.json;
</RestoreAdditionalProjectSources>
</PropertyGroup>

Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,8 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

using System;
using System.Collections.Specialized;
using System.Threading.Tasks;
using Microsoft.Bot.Schema;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using SkillSample.Responses.Main;
using SkillSample.Responses.Sample;
using SkillSample.Tests.Utterances;

namespace SkillSample.Tests
Expand All @@ -20,10 +15,10 @@ public async Task Test_Help_Interruption()
{
await GetTestFlow()
.Send(SampleDialogUtterances.Trigger)
.AssertReply(NamePrompt())
.AssertReplyOneOf(GetTemplates("NamePromptText"))
.Send(GeneralUtterances.Help)
.AssertReply(HelpResponse())
.AssertReply(NamePrompt())
.AssertReply(activity => Assert.AreEqual(1, activity.AsMessageActivity().Attachments.Count))
.AssertReplyOneOf(GetTemplates("NamePromptText"))
.StartTestAsync();
}

Expand All @@ -32,37 +27,10 @@ public async Task Test_Cancel_Interruption()
{
await GetTestFlow()
.Send(SampleDialogUtterances.Trigger)
.AssertReply(NamePrompt())
.AssertReplyOneOf(GetTemplates("NamePromptText"))
.Send(GeneralUtterances.Cancel)
.AssertReply(CancelResponse())
.AssertReplyOneOf(GetTemplates("CancelledText"))
.StartTestAsync();
}

private Action<IActivity> NamePrompt()
{
return activity =>
{
var messageActivity = activity.AsMessageActivity();
CollectionAssert.Contains(ParseReplies(SampleResponses.NamePrompt, new StringDictionary()), messageActivity.Text);
};
}

private Action<IActivity> HelpResponse()
{
return activity =>
{
var messageActivity = activity.AsMessageActivity();
CollectionAssert.Contains(ParseReplies(MainResponses.HelpMessage, new StringDictionary()), messageActivity.Text);
};
}

private Action<IActivity> CancelResponse()
{
return activity =>
{
var messageActivity = activity.AsMessageActivity();
CollectionAssert.Contains(ParseReplies(MainResponses.CancelMessage, new StringDictionary()), messageActivity.Text);
};
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,10 @@
// Licensed under the MIT License.

using System.Collections.Generic;
using System.Collections.Specialized;
using System.Globalization;
using System.Linq;
using System.Threading.Tasks;
using AdaptiveCards;
using Microsoft.Bot.Schema;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using SkillSample.Responses.Main;
using SkillSample.Responses.Shared;

namespace SkillSample.Tests
{
Expand All @@ -26,13 +21,9 @@ await GetTestFlow()
.Send(new Activity()
{
Type = ActivityTypes.ConversationUpdate,
MembersAdded = new List<ChannelAccount>() { new ChannelAccount("bot") }
})
.AssertReply(activity =>
{
var messageActivity = activity.AsMessageActivity();
CollectionAssert.Contains(ParseReplies(MainResponses.WelcomeMessage, new StringDictionary()), messageActivity.Text);
MembersAdded = new List<ChannelAccount>() { new ChannelAccount("user") }
})
.AssertReply(TemplateEngine.GenerateActivityForLocale("IntroMessage"))
.StartTestAsync();
}

Expand All @@ -45,13 +36,9 @@ await GetTestFlow()
.Send(new Activity()
{
Type = ActivityTypes.ConversationUpdate,
MembersAdded = new List<ChannelAccount>() { new ChannelAccount("bot") }
})
.AssertReply(activity =>
{
var messageActivity = activity.AsMessageActivity();
CollectionAssert.Contains(ParseReplies(MainResponses.WelcomeMessage, new StringDictionary()), messageActivity.Text);
MembersAdded = new List<ChannelAccount>() { new ChannelAccount("user") }
})
.AssertReply(TemplateEngine.GenerateActivityForLocale("IntroMessage"))
.StartTestAsync();
}

Expand All @@ -64,13 +51,9 @@ await GetTestFlow()
.Send(new Activity()
{
Type = ActivityTypes.ConversationUpdate,
MembersAdded = new List<ChannelAccount>() { new ChannelAccount("bot") }
})
.AssertReply(activity =>
{
var messageActivity = activity.AsMessageActivity();
CollectionAssert.Contains(ParseReplies(MainResponses.WelcomeMessage, new StringDictionary()), messageActivity.Text);
MembersAdded = new List<ChannelAccount>() { new ChannelAccount("user") }
})
.AssertReply(TemplateEngine.GenerateActivityForLocale("IntroMessage"))
.StartTestAsync();
}

Expand All @@ -83,13 +66,9 @@ await GetTestFlow()
.Send(new Activity()
{
Type = ActivityTypes.ConversationUpdate,
MembersAdded = new List<ChannelAccount>() { new ChannelAccount("bot") }
})
.AssertReply(activity =>
{
var messageActivity = activity.AsMessageActivity();
CollectionAssert.Contains(ParseReplies(MainResponses.WelcomeMessage, new StringDictionary()), messageActivity.Text);
MembersAdded = new List<ChannelAccount>() { new ChannelAccount("user") }
})
.AssertReply(TemplateEngine.GenerateActivityForLocale("IntroMessage"))
.StartTestAsync();
}

Expand All @@ -102,13 +81,9 @@ await GetTestFlow()
.Send(new Activity()
{
Type = ActivityTypes.ConversationUpdate,
MembersAdded = new List<ChannelAccount>() { new ChannelAccount("bot") }
})
.AssertReply(activity =>
{
var messageActivity = activity.AsMessageActivity();
CollectionAssert.Contains(ParseReplies(MainResponses.WelcomeMessage, new StringDictionary()), messageActivity.Text);
MembersAdded = new List<ChannelAccount>() { new ChannelAccount("user") }
})
.AssertReply(TemplateEngine.GenerateActivityForLocale("IntroMessage"))
.StartTestAsync();
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,10 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Threading.Tasks;
using Microsoft.Bot.Schema;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using SkillSample.Responses.Main;
using SkillSample.Responses.Shared;
using SkillSample.Tests.Utterances;

namespace SkillSample.Tests
Expand All @@ -23,9 +19,9 @@ await GetTestFlow()
.Send(new Activity()
{
Type = ActivityTypes.ConversationUpdate,
MembersAdded = new List<ChannelAccount>() { new ChannelAccount("bot") }
MembersAdded = new List<ChannelAccount>() { new ChannelAccount("user") }
})
.AssertReply(WelcomeMessage())
.AssertReply(TemplateEngine.GenerateActivityForLocale("IntroText"))
.StartTestAsync();
}

Expand All @@ -34,7 +30,7 @@ public async Task Test_Help_Intent()
{
await GetTestFlow()
.Send(GeneralUtterances.Help)
.AssertReply(HelpMessage())
.AssertReply(activity => Assert.AreEqual(1, activity.AsMessageActivity().Attachments.Count))
.StartTestAsync();
}

Expand All @@ -43,7 +39,7 @@ public async Task Test_Unhandled_Message()
{
await GetTestFlow()
.Send(GeneralUtterances.None)
.AssertReply(DidntUnderstandMessage())
.AssertReplyOneOf(GetTemplates("UnsupportedText"))
.StartTestAsync();
}

Expand All @@ -52,36 +48,9 @@ public async Task Test_Single_Turn()
{
await GetTestFlow()
.Send(GeneralUtterances.None)
.AssertReply(DidntUnderstandMessage())
.AssertReplyOneOf(GetTemplates("UnsupportedText"))
.AssertReply((activity) => { Assert.AreEqual(ActivityTypes.Handoff, activity.Type); })
.StartTestAsync();
}

private Action<IActivity> WelcomeMessage()
{
return activity =>
{
var messageActivity = activity.AsMessageActivity();
CollectionAssert.Contains(ParseReplies(MainResponses.WelcomeMessage, new StringDictionary()), messageActivity.Text);
};
}

private Action<IActivity> HelpMessage()
{
return activity =>
{
var messageActivity = activity.AsMessageActivity();
CollectionAssert.Contains(ParseReplies(MainResponses.HelpMessage, new StringDictionary()), messageActivity.Text);
};
}

private Action<IActivity> DidntUnderstandMessage()
{
return activity =>
{
var messageActivity = activity.AsMessageActivity();
CollectionAssert.Contains(ParseReplies(SharedResponses.DidntUnderstandMessage, new StringDictionary()), messageActivity.Text);
};
}
}
}
Original file line number Diff line number Diff line change
@@ -1,28 +1,30 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Bot.Builder;
using Microsoft.Bot.Builder.AI.Luis;
using Microsoft.Bot.Builder.Dialogs;

namespace SkillSample.Tests.Mocks
{
public class MockLuisRecognizer : ITelemetryRecognizer
public class MockLuisRecognizer : LuisRecognizer
{
private static LuisApplication mockApplication = new LuisApplication()
{
ApplicationId = "testappid",
Endpoint = "testendpoint",
EndpointKey = "testendpointkey"
};

public MockLuisRecognizer(IRecognizerConvert defaultIntent)
: base(application: mockApplication)
{
TestUtterances = new Dictionary<string, IRecognizerConvert>();
DefaultIntent = defaultIntent;
}

public bool LogPersonalInformation { get; set; } = false;

public IBotTelemetryClient TelemetryClient { get; set; } = new NullBotTelemetryClient();

private Dictionary<string, IRecognizerConvert> TestUtterances { get; set; }

private IRecognizerConvert DefaultIntent { get; set; }
Expand All @@ -35,38 +37,12 @@ public void RegisterUtterances(Dictionary<string, IRecognizerConvert> utterances
}
}

public Task<RecognizerResult> RecognizeAsync(ITurnContext turnContext, CancellationToken cancellationToken)
{
throw new NotImplementedException();
}

public Task<T> RecognizeAsync<T>(DialogContext dialogContext, CancellationToken cancellationToken = default(CancellationToken))
where T : IRecognizerConvert, new()
{
var text = dialogContext.Context.Activity.Text;

var mockResult = TestUtterances.GetValueOrDefault(text, DefaultIntent);
return Task.FromResult((T)mockResult);
}

public Task<T> RecognizeAsync<T>(ITurnContext turnContext, CancellationToken cancellationToken)
where T : IRecognizerConvert, new()
public override Task<T> RecognizeAsync<T>(ITurnContext turnContext, CancellationToken cancellationToken)
{
var text = turnContext.Activity.Text;

var mockResult = TestUtterances.GetValueOrDefault(text, DefaultIntent);
return Task.FromResult((T)mockResult);
}

public Task<RecognizerResult> RecognizeAsync(ITurnContext turnContext, Dictionary<string, string> telemetryProperties, Dictionary<string, double> telemetryMetrics, CancellationToken cancellationToken = default(CancellationToken))
{
throw new NotImplementedException();
}

public Task<T> RecognizeAsync<T>(ITurnContext turnContext, Dictionary<string, string> telemetryProperties, Dictionary<string, double> telemetryMetrics, CancellationToken cancellationToken = default(CancellationToken))
where T : IRecognizerConvert, new()
{
throw new NotImplementedException();
}
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.Bot.Builder;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,8 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

using System;
using System.Collections.Specialized;
using System.Threading.Tasks;
using Microsoft.Bot.Schema;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using SkillSample.Responses.Sample;
using SkillSample.Tests.Utterances;

namespace SkillSample.Tests
Expand All @@ -19,28 +15,10 @@ public async Task Test_Sample_Dialog()
{
await GetTestFlow()
.Send(SampleDialogUtterances.Trigger)
.AssertReply(NamePrompt())
.Send(SampleDialogUtterances.MessagePromptResponse)
.AssertReply(HaveNameMessage())
.AssertReplyOneOf(GetTemplates("NamePromptText"))
.Send(SampleDialogUtterances.NamePromptResponse)
.AssertReplyOneOf(GetTemplates("HaveNameMessageText", new { Name = SampleDialogUtterances.NamePromptResponse }))
.StartTestAsync();
}

private Action<IActivity> NamePrompt()
{
return activity =>
{
var messageActivity = activity.AsMessageActivity();
CollectionAssert.Contains(ParseReplies(SampleResponses.NamePrompt, new StringDictionary()), messageActivity.Text);
};
}

private Action<IActivity> HaveNameMessage()
{
return activity =>
{
var messageActivity = activity.AsMessageActivity();
CollectionAssert.Contains(ParseReplies(SampleResponses.HaveNameMessage, new StringDictionary() { { "Name", SampleDialogUtterances.MessagePromptResponse } }), messageActivity.Text);
};
}
}
}
Loading

0 comments on commit 9c28759

Please sign in to comment.