public void Schedule_the_child_when_one_of_its_parents_branch_is_completed_and_other_parent_branch_is_not_active_at_all()
        {
            _eventsBuilder.AddNewEvents(CompletedActivityEventGraph(_activityName, _activityVersion, _positionalName));

            var decisions = new WorkflowWithMultipleParents().Decisions(_eventsBuilder.Result());

            Assert.That(decisions, Is.EquivalentTo(new[] { new ScheduleActivityDecision(Identity.New("Transcode", "2.0").ScheduleId()) }));
        }
        public void Schedule_the_child_when_one_of_its_parents_branch_is_completed_and_other_parent_branch_is_not_active_at_all()
        {
            var workflow = new WorkflowWithMultipleParents();
            var workflowHistoryEvents = CreateCompletedActivityEventGraph(_activityName, _activityVersion, _positionalName);

            var decisions = workflow.NewExecutionFor(workflowHistoryEvents).Execute();

            Assert.That(decisions, Is.EquivalentTo(new[] { new ScheduleActivityDecision(Identity.New("Transcode", "2.0")) }));
        }
        public void Does_not_schedule_the_child_when_one_of_its_parent_activity_is_active()
        {
            var workflow         = new WorkflowWithMultipleParents();
            var allHistoryEvents = _builder.ActivityCompletedGraph(Identity.New(_activityName, _activityVersion, _positionalName), "id", "res")
                                   .Concat(_builder.ActivityScheduledGraph(Identity.New(_siblingActivityName, _siblingActivityVersion)));

            var decisions = workflow.NewExecutionFor(new WorkflowHistoryEvents(allHistoryEvents)).Execute();

            CollectionAssert.IsEmpty(decisions);
        }
        public void Return_scheduling_decision_for_child_when_all_of_its_parents_are_completed()
        {
            _eventsBuilder.AddNewEvents(CompletedActivityEventGraph(_activityName, _activityVersion, _positionalName));
            _eventsBuilder.AddNewEvents(CompletedActivityEventGraph(_siblingActivityName, _siblingActivityVersion));

            var workflow = new WorkflowWithMultipleParents();

            var decisions = workflow.Decisions(_eventsBuilder.Result());

            Assert.That(decisions, Is.EquivalentTo(new[] { new ScheduleActivityDecision(Identity.New("Transcode", "2.0").ScheduleId()) }));
        }
        public void Return_scheduling_decision_for_child_when_all_of_its_parents_are_completed()
        {
            var workflow      = new WorkflowWithMultipleParents();
            var activityGraph = _builder.ActivityCompletedGraph(Identity.New(_activityName, _activityVersion, _positionalName), "id", "res");
            var siblingGraph  = _builder.ActivityCompletedGraph(Identity.New(_siblingActivityName, _siblingActivityVersion), "id2", "re2");


            var decisions = workflow.NewExecutionFor(new WorkflowHistoryEvents(siblingGraph.Concat(activityGraph))).Execute();

            Assert.That(decisions, Is.EquivalentTo(new[] { new ScheduleActivityDecision(Identity.New("Transcode", "2.0")) }));
        }
        public void Does_not_schedule_the_child_when_one_of_its_parent_activity_is_active()
        {
            _eventsBuilder.AddProcessedEvents(_eventGraphBuilder
                                              .ActivityScheduledGraph(Identity.New(_siblingActivityName, _siblingActivityVersion).ScheduleId())
                                              .ToArray());
            _eventsBuilder.AddNewEvents(CompletedActivityEventGraph(_activityName, _activityVersion, _positionalName));

            var workflow = new WorkflowWithMultipleParents();

            var decisions = workflow.Decisions(_eventsBuilder.Result());

            CollectionAssert.IsEmpty(decisions);
        }