public static async Task DialogTask_Frame_Scoring_Throws_Out_Of_Range(double score) { var state = new object(); var item = new Activity(); var token = new CancellationTokenSource().Token; var scorable = MockScorable(item, state, score, token); var innerLoop = new Mock <IEventLoop>(); var innerProducer = new Mock <IEventProducer <IActivity> >(); var queue = new EventQueue <IActivity>(); IEventLoop loop = new ScoringEventLoop <double>(innerLoop.Object, innerProducer.Object, queue, new TraitsScorable <IActivity, double>(NormalizedTraits.Instance, Comparer <double> .Default, new[] { scorable.Object })); try { IEventProducer <IActivity> producer = queue; producer.Post(item); await loop.PollAsync(token); Assert.Fail(); } catch (ArgumentOutOfRangeException) { } scorable.Verify(); }
public async Task DialogTask_Frame_Scoring_Stops_At_Maximum() { var state1 = new object(); var item = new Activity(); var token = new CancellationTokenSource().Token; var scorable1 = MockScorable(item, state1, 1.0, token); var scorable2 = new Mock <IScorable <object, double> >(MockBehavior.Strict); var innerLoop = new Mock <IEventLoop>(); var innerProducer = new Mock <IEventProducer <IActivity> >(); var queue = new EventQueue <IActivity>(); IEventLoop loop = new ScoringEventLoop <double>(innerLoop.Object, innerProducer.Object, queue, new TraitsScorable <IActivity, double>(NormalizedTraits.Instance, Comparer <double> .Default, new[] { scorable1.Object, scorable2.Object })); scorable1 .Setup(s => s.PostAsync(item, state1, token)) .Returns(Task.FromResult(0)); IEventProducer <IActivity> producer = queue; producer.Post(item); await loop.PollAsync(token); scorable1.Verify(); scorable2.Verify(); }
public static async Task DialogTask_Frame_Scoring_Allows_Value(double score) { var state = new object(); var item = new Activity(); var token = new CancellationTokenSource().Token; var scorable = MockScorable(item, state, score, token); var innerLoop = new Mock <IEventLoop>(); var innerProducer = new Mock <IEventProducer <IActivity> >(); var queue = new EventQueue <IActivity>(); IEventLoop loop = new ScoringEventLoop <double>(innerLoop.Object, innerProducer.Object, queue, new TraitsScorable <IActivity, double>(NormalizedTraits.Instance, Comparer <double> .Default, new[] { scorable.Object })); scorable .Setup(s => s.PostAsync(item, state, token)) .Returns(Task.FromResult(0)); IEventProducer <IActivity> producer = queue; producer.Post(item); await loop.PollAsync(token); scorable.Verify(); }
public async Task DialogTaskManager_TwoParallelDialogTasks() { var dialog = new Mock <DialogTaskTests.IDialogFrames <string> >(MockBehavior.Strict); var secondStackDialog = new Mock <DialogTaskTests.IDialogFrames <object> >(MockBehavior.Strict); dialog .Setup(d => d.StartAsync(It.IsAny <IDialogContext>())) .Returns <IDialogContext>(async context => { context.Wait(dialog.Object.ItemReceived); }); dialog .Setup(d => d.ItemReceived(It.IsAny <IDialogContext>(), It.IsAny <IAwaitable <IMessageActivity> >())) .Returns <IDialogContext, IAwaitable <IMessageActivity> >(async(context, message) => { var msg = await message; await context.PostAsync(msg.Text); context.Wait(dialog.Object.ItemReceived); }); var promptMessage = "Say something!"; secondStackDialog .Setup(d => d.StartAsync(It.IsAny <IDialogContext>())) .Returns <IDialogContext>( async context => { context.Wait(secondStackDialog.Object.ItemReceived <IMessageActivity>); }); secondStackDialog .Setup(d => d.ItemReceived(It.IsAny <IDialogContext>(), It.IsAny <IAwaitable <IMessageActivity> >())) .Returns <IDialogContext, IAwaitable <IMessageActivity> >(async(context, message) => { PromptDialog.Text(context, secondStackDialog.Object.ItemReceived, promptMessage); }); secondStackDialog .Setup(d => d.ItemReceived(It.IsAny <IDialogContext>(), It.IsAny <IAwaitable <string> >())) .Returns <IDialogContext, IAwaitable <string> >(async(context, message) => { await context.PostAsync($"from prompt {await message}"); context.Wait(secondStackDialog.Object.ItemReceived <IMessageActivity>); }); Func <IDialog <object> > makeRoot = () => dialog.Object; Func <IDialog <object> > secondStackMakeRoot = () => secondStackDialog.Object; var toBot = MakeTestMessage(); using (new FiberTestBase.ResolveMoqAssembly(dialog.Object, secondStackDialog.Object)) using (var container = Build(Options.MockConnectorFactory, dialog.Object, secondStackDialog.Object)) { string foo = "foo"; string bar = "bar"; Queue <IMessageActivity> queue; using (var scope = DialogModule.BeginLifetimeScope(container, toBot)) { toBot.Text = foo; DialogModule_MakeRoot.Register(scope, makeRoot); await scope.Resolve <IPostToBot>().PostAsync(toBot, CancellationToken.None); var botData = scope.Resolve <IBotData>(); await botData.LoadAsync(CancellationToken.None); var dialogTaskManager = scope.Resolve <IDialogTaskManager>(); //create second dialog task var secondDialogTask = dialogTaskManager.CreateDialogTask(); var reactiveDialogTask = new ReactiveDialogTask(secondDialogTask, secondStackMakeRoot); IEventLoop loop = reactiveDialogTask; await loop.PollAsync(CancellationToken.None); IEventProducer <IActivity> producer = reactiveDialogTask; producer.Post(toBot); await loop.PollAsync(CancellationToken.None); await botData.FlushAsync(CancellationToken.None); queue = scope.Resolve <Queue <IMessageActivity> >(); Assert.AreEqual(foo, queue.Dequeue().Text); Assert.AreEqual(promptMessage, queue.Dequeue().Text); } using (var scope = DialogModule.BeginLifetimeScope(container, toBot)) { toBot.Text = bar; DialogModule_MakeRoot.Register(scope, makeRoot); await scope.Resolve <IPostToBot>().PostAsync(toBot, CancellationToken.None); var dialogTaskManager = scope.Resolve <IDialogTaskManager>(); Assert.AreEqual(2, dialogTaskManager.DialogTasks.Count); var secondDialogTask = dialogTaskManager.DialogTasks[1]; await secondDialogTask.PollAsync(CancellationToken.None); secondDialogTask.Post(toBot); await secondDialogTask.PollAsync(CancellationToken.None); queue = scope.Resolve <Queue <IMessageActivity> >(); Assert.AreEqual(bar, queue.Dequeue().Text); Assert.AreEqual($"from prompt {bar}", queue.Dequeue().Text); } } }