Skip to content
This repository was archived by the owner on Dec 4, 2023. It is now read-only.

Commit 08b70aa

Browse files
Updates for Issue 1134 (#1139)
1 parent 678ab1d commit 08b70aa

File tree

3 files changed

+80
-7
lines changed

3 files changed

+80
-7
lines changed

libraries/bot-dialogs/src/main/java/com/microsoft/bot/dialogs/Dialog.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import com.microsoft.bot.connector.authentication.GovernmentAuthenticationConstants;
2020
import com.microsoft.bot.connector.authentication.SkillValidation;
2121
import com.microsoft.bot.dialogs.memory.DialogStateManager;
22+
import com.microsoft.bot.dialogs.memory.DialogStateManagerConfiguration;
2223
import com.microsoft.bot.schema.Activity;
2324
import com.microsoft.bot.schema.ActivityTypes;
2425
import com.microsoft.bot.schema.EndOfConversationCodes;
@@ -322,24 +323,25 @@ public static CompletableFuture<Void> run(Dialog dialog, TurnContext turnContext
322323
dialogSet.add(dialog);
323324

324325
return dialogSet.createContext(turnContext)
325-
.thenAccept(dialogContext -> innerRun(turnContext, dialog.getId(), dialogContext));
326+
.thenAccept(dialogContext -> innerRun(turnContext, dialog.getId(), dialogContext, null));
326327
}
327328

328329
/**
329330
* Shared implementation of run with Dialog and DialogManager.
330331
*
331-
* @param turnContext The turnContext.
332-
* @param dialogId The Id of the Dialog.
333-
* @param dialogContext The DialogContext.
332+
* @param turnContext The turnContext.
333+
* @param dialogId The Id of the Dialog.
334+
* @param dialogContext The DialogContext.
335+
* @param stateConfiguration The DialogStateManagerConfiguration.
334336
* @return A DialogTurnResult.
335337
*/
336338
protected static CompletableFuture<DialogTurnResult> innerRun(TurnContext turnContext, String dialogId,
337-
DialogContext dialogContext) {
339+
DialogContext dialogContext, DialogStateManagerConfiguration stateConfiguration) {
338340
for (Entry<String, Object> entry : turnContext.getTurnState().getTurnStateServices().entrySet()) {
339341
dialogContext.getServices().replace(entry.getKey(), entry.getValue());
340342
}
341343

342-
DialogStateManager dialogStateManager = new DialogStateManager(dialogContext);
344+
DialogStateManager dialogStateManager = new DialogStateManager(dialogContext, stateConfiguration);
343345
return dialogStateManager.loadAllScopes().thenCompose(result -> {
344346
dialogContext.getContext().getTurnState().add(dialogStateManager);
345347
DialogTurnResult dialogTurnResult = null;

libraries/bot-dialogs/src/main/java/com/microsoft/bot/dialogs/DialogManager.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,7 @@ public CompletableFuture<DialogManagerResult> onTurn(TurnContext context) {
254254
// Create DialogContext
255255
DialogContext dc = new DialogContext(dialogs, context, dialogState);
256256

257-
return Dialog.innerRun(context, rootDialogId, dc).thenCompose(turnResult -> {
257+
return Dialog.innerRun(context, rootDialogId, dc, getStateManagerConfiguration()).thenCompose(turnResult -> {
258258
return botStateSet.saveAllChanges(dc.getContext(), false).thenCompose(saveResult -> {
259259
DialogManagerResult result = new DialogManagerResult();
260260
result.setTurnResult(turnResult);

libraries/bot-dialogs/src/test/java/com/microsoft/bot/dialogs/DialogManagerTests.java

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,20 @@
3131
import com.microsoft.bot.builder.UserState;
3232
import com.microsoft.bot.builder.adapters.TestAdapter;
3333
import com.microsoft.bot.builder.adapters.TestFlow;
34+
import com.microsoft.bot.dialogs.memory.DialogStateManager;
35+
import com.microsoft.bot.dialogs.memory.DialogStateManagerConfiguration;
36+
import com.microsoft.bot.dialogs.memory.PathResolver;
37+
import com.microsoft.bot.dialogs.memory.scopes.MemoryScope;
3438
import com.microsoft.bot.dialogs.prompts.PromptOptions;
3539
import com.microsoft.bot.dialogs.prompts.TextPrompt;
3640
import com.microsoft.bot.schema.Activity;
3741
import com.microsoft.bot.schema.ActivityTypes;
42+
import com.microsoft.bot.schema.ChannelAccount;
3843
import com.microsoft.bot.schema.ConversationAccount;
3944
import com.microsoft.bot.schema.ResourceResponse;
4045
import com.microsoft.bot.schema.ResultPair;
4146

47+
import org.apache.commons.lang3.NotImplementedException;
4248
import org.apache.commons.lang3.StringUtils;
4349
import org.junit.Assert;
4450
import org.junit.Test;
@@ -462,6 +468,44 @@ public void SkillShouldReturnEmptyOnRepromptWithNoDialog() {
462468
Assert.assertEquals(DialogTurnStatus.EMPTY, _dmTurnResult.getTurnResult().getStatus());
463469
}
464470

471+
@Test
472+
public void DialogManager_StateConfigurationTest() {
473+
// Arrange
474+
WaterfallDialog dialog = new WaterfallDialog("test-dialog", null);
475+
476+
CustomMemoryScope memoryScope = new CustomMemoryScope();
477+
CustomPathResolver pathResolver = new CustomPathResolver();
478+
479+
DialogManager dialogManager = new DialogManager(dialog, null);
480+
dialogManager.setStateManagerConfiguration(new DialogStateManagerConfiguration());
481+
dialogManager.getStateManagerConfiguration().getMemoryScopes().add(memoryScope);
482+
dialogManager.getStateManagerConfiguration().getPathResolvers().add(pathResolver);
483+
484+
// The test dialog being used here happens to not send anything so we only need to mock the type.
485+
TestAdapter adapter = new TestAdapter();
486+
487+
// ChannelId and Conversation.Id are required for ConversationState and
488+
// ChannelId and From.Id are required for UserState.
489+
Activity activity = new Activity(ActivityTypes.MESSAGE);
490+
activity.setChannelId("test-channel");
491+
ConversationAccount conversation = new ConversationAccount();
492+
conversation.setId("test-conversation-id");
493+
ChannelAccount channelAccount = new ChannelAccount();
494+
channelAccount.setId("test-id");
495+
activity.setConversation(conversation);
496+
activity.setFrom(channelAccount);
497+
498+
// Act
499+
TurnContext turnContext = new TurnContextImpl(adapter, activity);
500+
turnContext.getTurnState().add(new ConversationState(new MemoryStorage()));
501+
dialogManager.onTurn(turnContext).join();
502+
DialogStateManager actual = turnContext.getTurnState().get(DialogStateManager.class);
503+
504+
// Assert
505+
Assert.assertTrue(actual.getConfiguration().getMemoryScopes().contains(memoryScope));
506+
Assert.assertTrue(actual.getConfiguration().getPathResolvers().contains(pathResolver));
507+
}
508+
465509
private Dialog CreateTestDialog(String property) {
466510
return new AskForNameDialog(property.replace(".", ""), property);
467511
}
@@ -539,6 +583,33 @@ public CompletableFuture<ResourceResponse[]> invoke(TurnContext context, List<Ac
539583
}
540584
}
541585

586+
private class CustomMemoryScope extends MemoryScope {
587+
CustomMemoryScope() {
588+
super("custom", false);
589+
}
590+
591+
@Override
592+
public Object getMemory(DialogContext dialogContext) {
593+
throw new NotImplementedException("Not implemented");
594+
}
595+
596+
@Override
597+
public void setMemory(DialogContext dialogContext, Object memory) {
598+
throw new NotImplementedException("Not implemented");
599+
}
600+
}
601+
602+
private class CustomPathResolver implements PathResolver {
603+
CustomPathResolver() {
604+
}
605+
606+
@Override
607+
public String transformPath(String path) {
608+
throw new NotImplementedException("Not implemented");
609+
}
610+
611+
}
612+
542613
private class AskForNameDialog extends ComponentDialog implements DialogDependencies {
543614
private final String property;
544615

0 commit comments

Comments
 (0)