Example #1
0
        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);
        }
Example #2
0
        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");
        }
Example #3
0
        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);
        }