public void ApplyPostedResultShouldWorkWithJObjects() { var publicMemberBefore = new PublicMember() { State = "before" }; var publicMemberAfter = new JObject(); publicMemberAfter.Add("State", new JValue("after")); var functionResult = new FunctionResult() { PublicMember = publicMemberAfter, }; var sender = new object(); var context = new object(); var internalMember = new object(); var functionsManager = new FunctionsManager("component", "statemachine"); functionsManager.AddTask(new object(), publicMemberBefore, internalMember, context, sender); functionsManager.ApplyFunctionResult(functionResult, publicMemberBefore, new object(), context, sender); Assert.AreEqual("after", publicMemberBefore.State); }
public void ApplyFunctionResultShouldThrowValidationExceptionWhenDeserializationFails() { var sender = new object(); var publicMemberBefore = new PublicMember() { State = "before" }; var publicMemberAfter = new JObject(); publicMemberAfter.Add("State", new JValue("after")); var functionResult = new FunctionResult() { PublicMember = "Hello", }; var functionsManager = new FunctionsManager("component", "statemachine"); functionsManager.AddTask(new object(), new object(), new object(), new object(), sender, "function"); while (true) { var postedTask = functionsManager.GetTask(); if (postedTask != null) { break; } Thread.Sleep(TimeSpan.FromSeconds(1)); } var exception = Assert.Throws <ValidationException>(() => functionsManager.ApplyFunctionResult(functionResult, publicMemberBefore, new object(), new object(), sender)); Assert.IsTrue(exception.Message.Contains("Hello"), "Exception message should show where is the problem"); }
public async Task AddTaskShouldApplyPostedResultAndCallSenders() { var functionsManager = new FunctionsManager("component", "statemachine"); var xcEvent = new object(); var publicMember = new PublicMember() { State = "before" }; var internalMember = new object(); var context = new object(); var sender = Substitute.For <ISender>(); var task = functionsManager.AddTask(xcEvent, publicMember, internalMember, context, sender, "function"); Task.Run(() => { while (true) { var postedTask = functionsManager.GetTask(); if (postedTask != null) { var functionResult = new FunctionResult() { ComponentName = "component", StateMachineName = "statemachine", PublicMember = "{ \"State\": \"after\" }", Senders = new List <SenderResult> { new SenderResult { SenderName = "Do", SenderParameter = "{ \"Value\": \"do\" }", UseContext = true }, new SenderResult { SenderName = "Undo", SenderParameter = "{ \"Value\": \"undo\" }", UseContext = false }, new SenderResult { SenderName = "Reply", UseContext = true } }, RequestId = postedTask.RequestId, }; functionsManager.AddTaskResult(functionResult); break; } Thread.Sleep(TimeSpan.FromSeconds(1)); } }); await task; Assert.AreEqual("after", publicMember.State); sender.Received().Do(context, Arg.Is <DoEvent>(evt => evt.Value == "do"), null); sender.Received().SendEvent(Arg.Is <UndoEvent>(evt => evt.Value == "undo")); sender.Received().Reply(context, Arg.Any <object>(), null); }