private async Task OnContactForAssignment()
        {
            if (EscalationTimeout.Value == int.MaxValue)
            {
                return;
            }

            var escalationTime     = DateTime.Now.AddMilliseconds(EscalationTimeout.Value);
            var delayUntilWorkflow = new DelayUntilConditionWorkflow(
                Create(
                    instance =>
            {
                HasEscalated.Value = true;
            }),
                () => IsBooked.Value,
                escalationTime,
                true);

            await WorkflowInstance.EnterWorkflow(delayUntilWorkflow, false);
        }
Ejemplo n.º 2
0
        public async Task UnitTestDelayUntilConditionWorkflow()
        {
            using (var engine = new WorkflowEngine())
            {
                var argConditionMet = new Argument <bool>("ConditionMet");

                var escalationDateTime   = DateTime.Now.AddSeconds(5);
                var setConditionDateTime = DateTime.Now.AddSeconds(1);
                var delayUntilWorkflow   = new DelayUntilConditionWorkflow(
                    Workflow.Create(
                        instance =>
                {
                    instance.GetArgument <bool>("HasEscalated").Value = true;
                }),
                    () => argConditionMet.Value,
                    escalationDateTime);

                var delayUntilInstance = engine.CreateWorkflow(delayUntilWorkflow);
                await delayUntilInstance.Start(new Argument <bool>("HasEscalated"));

                var setConditionWorkflow = new DelayWorkflow(
                    Workflow.Create(
                        () =>
                {
                    argConditionMet.Value = true;
                }),
                    Convert.ToInt32(setConditionDateTime.Subtract(DateTime.Now).TotalMilliseconds));

                var setConditionInstance = engine.CreateWorkflow(setConditionWorkflow);
                await setConditionInstance.Start();

                await delayUntilInstance.Wait();

                await setConditionInstance.Wait();

                Assert.IsTrue(delayUntilInstance.GetArgument <bool>("HasEscalated").Value);
                Assert.IsTrue(DateTime.Now >= setConditionDateTime);
                Assert.IsFalse(DateTime.Now >= escalationDateTime);
            }
        }