Skip to content

Commit

Permalink
[Cherry-Pick to 4.13] Add ShowSignInLink to OAuthPromptSettings (#5906)…
Browse files Browse the repository at this point in the history
… (#5966)

* Add ShowSignInLink to OAuthPromptSettings (#5906)

* Add ShowSignInLink to OAuthPromptSettings

* Refactor tests

* Update test adapter to only override channel Id when the value is not set by the test.
  • Loading branch information
mrivera-ms committed Nov 10, 2021
1 parent 9d14958 commit b8096af
Show file tree
Hide file tree
Showing 4 changed files with 64 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,8 @@ public static async Task SendOAuthCardAsync(OAuthPromptSettings settings, ITurnC
cardActionType = ActionTypes.OpenUrl;
}
}
else if (!ChannelRequiresSignInLink(turnContext.Activity.ChannelId))
else if ((settings.ShowSignInLink != null && settings.ShowSignInLink == false) ||
(settings.ShowSignInLink == null && !ChannelRequiresSignInLink(turnContext.Activity.ChannelId)))
{
value = null;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,5 +52,12 @@ public class OAuthPromptSettings
/// <value>True if the <see cref="OAuthPrompt"/> should automatically end upon receiving
/// an invalid message.</value>
public bool EndOnInvalidMessage { get; set; }

/// <summary>
/// Gets or sets an optional boolean value to force the display of a Sign In link overriding
/// the default behavior.
/// </summary>
/// <value>True to display the SignInLink.</value>
public bool? ShowSignInLink { get; set; }
}
}
5 changes: 4 additions & 1 deletion libraries/Microsoft.Bot.Builder/Adapters/TestAdapter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,10 @@ public async Task ProcessActivityAsync(Activity activity, BotCallbackHandler cal
activity.Type = ActivityTypes.Message;
}

activity.ChannelId = Conversation.ChannelId;
if (activity.ChannelId == null)
{
activity.ChannelId = Conversation.ChannelId;
}

if (activity.From == null || activity.From.Id == "unknown" || activity.From.Role == RoleTypes.Bot)
{
Expand Down
51 changes: 51 additions & 0 deletions tests/Microsoft.Bot.Builder.Dialogs.Tests/OAuthPromptTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -589,6 +589,57 @@ public async Task OAuthPromptRecognizeTokenAsync_WithNullTextMessageActivity_Doe
.StartTestAsync();
}

[Theory]
[InlineData(null, Channels.Test, false)] //Do not override; ChannelRequiresSingInLink() returns false; Result: no link
[InlineData(null, Channels.Msteams, true)] //Do not override; ChannelRequiresSingInLink() returns true; Result: show link
[InlineData(false, Channels.Test, false)] //Override: no link; ChannelRequiresSingInLink() returns false; Result: no link
[InlineData(true, Channels.Test, true)] //Override: show link; ChannelRequiresSingInLink() returns false; Result: show link
[InlineData(false, Channels.Msteams, false)] //Override: no link; ChannelRequiresSingInLink() returns true; Result: no link
[InlineData(true, Channels.Msteams, true)] //Override: show link; ChannelRequiresSingInLink() returns true; Result: show link
public async Task OAuthPromptSignInLinkSettingsCases(bool? showSignInLinkValue, string channelId, bool shouldHaveSignInLink)
{
var oAuthPromptSettings = new OAuthPromptSettings();
oAuthPromptSettings.ShowSignInLink = showSignInLinkValue;

var convoState = new ConversationState(new MemoryStorage());
var dialogState = convoState.CreateProperty<DialogState>("dialogState");

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

// Create new DialogSet
var dialogs = new DialogSet(dialogState);
dialogs.Add(new OAuthPrompt("OAuthPrompt", oAuthPromptSettings));

BotCallbackHandler botCallbackHandler = async (turnContext, cancellationToken) =>
{
var dc = await dialogs.CreateContextAsync(turnContext, cancellationToken);
var results = await dc.ContinueDialogAsync(cancellationToken);
if (results.Status == DialogTurnStatus.Empty)
{
await dc.PromptAsync("OAuthPrompt", new PromptOptions(), cancellationToken: cancellationToken);
}
};

var initialActivity = new Activity()
{
ChannelId = channelId,
Text = "hello"
};
await new TestFlow(adapter, botCallbackHandler)
.Send(initialActivity)
.AssertReply(activity =>
{
Assert.Single(((Activity)activity).Attachments);
Assert.Equal(OAuthCard.ContentType, ((Activity)activity).Attachments[0].ContentType);
var oAuthCard = (OAuthCard)((Activity)activity).Attachments[0].Content;
var cardAction = oAuthCard.Buttons[0];
Assert.Equal(shouldHaveSignInLink, cardAction.Value != null);
})
.StartTestAsync();
}

private async Task OAuthPrompt(IStorage storage)
{
var convoState = new ConversationState(storage);
Expand Down

0 comments on commit b8096af

Please sign in to comment.