public void Returns_the_scheduling_decision_for_workflow_item()
        {
            var workflowItem   = TimerItem.New(Identity.Timer("Somename"), _workflow.Object);
            var workflowAction = WorkflowAction.JumpTo(null, workflowItem);

            var decisions = workflowAction.Decisions(Mock.Of <IWorkflow>());

            Assert.That(decisions, Is.EquivalentTo(workflowItem.ScheduleDecisions()));
        }
        public void Can_be_returned_as_workflow_action_when_scheduling_the_timer()
        {
            var workflow = new WorkflowToReturnScheduleTimerAction();
            var completedActivityEvent = CreateCompletedActivityEvent(ActivityName, ActivityVersion, PositionalName);

            var workflowAction = completedActivityEvent.Interpret(workflow);

            Assert.That(workflowAction, Is.EqualTo(WorkflowAction.JumpTo(TimerItem.New(Identity.Timer("SomeTimer"), null))));
        }
        public void Returns_timer_decision_when_rescheduled_after_a_timeout()
        {
            var workflowItem   = new ActivityItem(Identity.New("name", "ver", "pos"), _workflow.Object);
            var workflowAction = WorkflowAction.JumpTo(workflowItem).After(TimeSpan.FromSeconds(2));

            var decisions = workflowAction.GetDecisions();

            Assert.That(decisions, Is.EquivalentTo(new[] { new ScheduleTimerDecision(Identity.New("name", "ver", "pos"), TimeSpan.FromSeconds(2), true) }));
        }
        public void Returns_timer_decision_when_jumped_after_a_timeout()
        {
            var identity       = Identity.New("name", "ver", "pos");
            var workflowItem   = new ActivityItem(identity, _workflow.Object);
            var workflowAction = WorkflowAction.JumpTo(null, workflowItem).After(TimeSpan.FromSeconds(2));

            var decisions = workflowAction.Decisions(Mock.Of <IWorkflow>()).ToArray();

            Assert.That(decisions.Count(), Is.EqualTo(1));
            decisions[0].AssertRescheduleTimer(identity.ScheduleId(), TimeSpan.FromSeconds(2));
        }
        public void Schedule_the_timer_with_default_scheduleid_when_it_has_not_already_scheduled()
        {
            var identity       = Identity.Timer("Somename");
            var workflowItem   = TimerItem.New(identity, _workflow.Object);
            var workflowAction = WorkflowAction.JumpTo(null, workflowItem);

            var decisions = workflowAction.Decisions(Mock.Of <IWorkflow>()).ToArray();

            Assert.That(decisions.Count(), Is.EqualTo(1));
            decisions[0].AssertWorkflowItemTimer(identity.ScheduleId(), TimeSpan.Zero);
        }
        public void Reuse_the_scheduleid_when_it_has_already_scheduled()
        {
            const string runId      = "runid";
            var          identity   = Identity.Timer("Somename");
            var          scheduleId = identity.ScheduleId(runId + "Reset");

            _builder.AddWorkflowRunId(runId);
            _builder.AddProcessedEvents(_graphBuilder.TimerStartedGraph(scheduleId, TimeSpan.Zero).ToArray());
            _workflow.SetupGet(w => w.WorkflowHistoryEvents).Returns(_builder.Result());

            var workflowItem   = TimerItem.New(identity, _workflow.Object);
            var workflowAction = WorkflowAction.JumpTo(null, workflowItem);

            var decisions = workflowAction.Decisions(Mock.Of <IWorkflow>()).ToArray();

            Assert.That(decisions.Count(), Is.EqualTo(1));
            decisions[0].AssertWorkflowItemTimer(scheduleId, TimeSpan.Zero);
        }
 public void Equality_tests()
 {
     Assert.True(WorkflowAction.JumpTo(TimerItem.New(Identity.Timer("Somename"), _workflow.Object)).Equals(WorkflowAction.JumpTo(TimerItem.New(Identity.Timer("Somename"), _workflow.Object))));
     Assert.False(WorkflowAction.JumpTo(TimerItem.New(Identity.Timer("Somename"), _workflow.Object)).Equals(WorkflowAction.JumpTo(TimerItem.New(Identity.Timer("Somename1"), _workflow.Object))));
 }