Esempio n. 1
0
        public void Continue_the_execution_when_waiting_item_has_the_history_of_waiting_for_same_signal()
        {
            var g1 = _graphBuilder.LambdaCompletedEventGraph(_confirmEmailId, "input", "result");

            _builder.AddProcessedEvents(g1);
            _builder.AddProcessedEvents(_graphBuilder.WaitForSignalEvent(_confirmEmailId, g1.First().EventId, new[] { "Confirmed" }, SignalWaitType.Any));
            _builder.AddProcessedEvents(_graphBuilder.WorkflowItemSignalledEvent(_confirmEmailId, g1.First().EventId, "Confirmed"));

            var g2 = _graphBuilder.LambdaCompletedEventGraph(_confirmEmailId, "input", "result");

            _builder.AddProcessedEvents(g2);
            _builder.AddProcessedEvents(_graphBuilder.WaitForSignalEvent(_confirmEmailId, g2.First().EventId, new[] { "Confirmed" }, SignalWaitType.Any));

            var s = _graphBuilder.WorkflowSignaledEvent("Confirmed", "");

            _builder.AddNewEvents(s);

            var workflow = new UserActivateWorkflow();
            var decision = workflow.Decisions(_builder.Result());

            Assert.That(decision, Is.EquivalentTo(new WorkflowDecision[]
            {
                new ScheduleLambdaDecision(Identity.Lambda("ActivateUser").ScheduleId(), "input"),
                new WorkflowItemSignalledDecision(_confirmEmailId, g2.First().EventId, "Confirmed", s.EventId),
            }));
        }
Esempio n. 2
0
        public void Signal_is_ignored_when_workflow_item_is_already_resumed()
        {
            var graph = _graphBuilder.LambdaCompletedEventGraph(_confirmEmailId, "input", "result");

            _builder.AddProcessedEvents(graph);
            _builder.AddProcessedEvents(_graphBuilder.WaitForSignalEvent(_confirmEmailId, graph.First().EventId, new[] { "Confirmed" }, SignalWaitType.Any));
            _builder.AddProcessedEvents(_graphBuilder.WorkflowSignaledEvent("Confirmed", ""));
            _builder.AddProcessedEvents(_graphBuilder.WorkflowItemSignalledEvent(_confirmEmailId, graph.First().EventId, "Confirmed"));
            _builder.AddNewEvents(_graphBuilder.WorkflowSignaledEvent("Confirmed", ""));

            var workflow  = new UserActivateWorkflow();
            var decisions = workflow.Decisions(_builder.Result());

            Assert.That(decisions, Is.Empty);
        }
Esempio n. 3
0
        public async Task Wait_for_a_signal_to_continue()
        {
            var    @event   = new AutoResetEvent(false);
            var    workflow = new UserActivateWorkflow(@event);
            string result   = null;

            workflow.Completed += (s, e) => { result = e.Result; @event.Set(); };
            _workflowHost       = await HostAsync(workflow);

            var workflowId = await _domain.StartWorkflow <UserActivateWorkflow>("input", _taskListName);

            @event.WaitOne();

            await _domain.SendSignal(workflowId, "EmailConfirmed", "");

            @event.WaitOne();

            Assert.That(result, Is.EqualTo("Activated"));
        }
Esempio n. 4
0
        public void Continue_the_execution_and_record_resumed_signal_when_signal_is_received()
        {
            var graph = _graphBuilder.LambdaCompletedEventGraph(_confirmEmailId, "input", "result");

            _builder.AddProcessedEvents(graph);
            _builder.AddProcessedEvents(_graphBuilder.WaitForSignalEvent(_confirmEmailId, graph.First().EventId, new[] { "Confirmed" }, SignalWaitType.Any));
            var s = _graphBuilder.WorkflowSignaledEvent("Confirmed", "");

            _builder.AddNewEvents(s);

            var workflow = new UserActivateWorkflow();
            var decision = workflow.Decisions(_builder.Result());

            Assert.That(decision, Is.EquivalentTo(new WorkflowDecision[]
            {
                new ScheduleLambdaDecision(Identity.Lambda("ActivateUser").ScheduleId(), "input"),
                new WorkflowItemSignalledDecision(_confirmEmailId, graph.First().EventId, "Confirmed", s.EventId),
            }));
        }
Esempio n. 5
0
        public void Out_of_two_similar_signals_one_trigger_the_continuation_of_execution_and_other_one_is_ignored()
        {
            var graph = _graphBuilder.LambdaCompletedEventGraph(_confirmEmailId, "input", "result");

            _builder.AddProcessedEvents(graph);
            _builder.AddProcessedEvents(_graphBuilder.WaitForSignalEvent(_confirmEmailId, graph.First().EventId, new[] { "Confirmed" }, SignalWaitType.Any));
            var s1 = _graphBuilder.WorkflowSignaledEvent("Confirmed", "");

            _builder.AddNewEvents(s1);
            _builder.AddNewEvents(_graphBuilder.WorkflowSignaledEvent("Confirmed", ""));

            var workflow = new UserActivateWorkflow();
            var decision = workflow.Decisions(_builder.Result());

            Assert.That(decision, Is.EquivalentTo(new WorkflowDecision[]
            {
                new ScheduleLambdaDecision(Identity.Lambda("ActivateUser").ScheduleId(), "input"),
                new WorkflowItemSignalledDecision(_confirmEmailId, graph.First().EventId, "Confirmed", s1.EventId),
            }));
        }
Esempio n. 6
0
        public void Ignore_the_signal_when_waiting_workflow_item_has_already_been_signalled_multiple_times_in_past()
        {
            var g1 = _graphBuilder.LambdaCompletedEventGraph(_confirmEmailId, "input", "result");

            _builder.AddProcessedEvents(g1);
            _builder.AddProcessedEvents(_graphBuilder.WaitForSignalEvent(_confirmEmailId, g1.First().EventId, new[] { "Confirmed" }, SignalWaitType.Any));
            _builder.AddProcessedEvents(_graphBuilder.WorkflowItemSignalledEvent(_confirmEmailId, g1.First().EventId, "Confirmed"));

            var g2 = _graphBuilder.LambdaCompletedEventGraph(_confirmEmailId, "input", "result");

            _builder.AddProcessedEvents(g2);
            _builder.AddProcessedEvents(_graphBuilder.WaitForSignalEvent(_confirmEmailId, g2.First().EventId, new[] { "Confirmed" }, SignalWaitType.Any));
            _builder.AddProcessedEvents(_graphBuilder.WorkflowItemSignalledEvent(_confirmEmailId, g2.First().EventId, "Confirmed"));

            _builder.AddNewEvents(_graphBuilder.WorkflowSignaledEvent("Confirmed", ""));

            var workflow = new UserActivateWorkflow();
            var decision = workflow.Decisions(_builder.Result());

            Assert.That(decision, Is.Empty);
        }
Esempio n. 7
0
        public void Returns_the_decision_to_wait_for_a_signal()
        {
            var graph = _graphBuilder.LambdaCompletedEventGraph(_confirmEmailId, "input", "result");

            _builder.AddNewEvents(graph);
            var workflow = new UserActivateWorkflow();
            var decision = workflow.Decisions(_builder.Result());

            Assert.That(decision, Is.EqualTo(new[]
            {
                new WaitForSignalsDecision(new WaitForSignalData {
                    ScheduleId = _confirmEmailId, TriggerEventId = graph.First().EventId
                })
            }));
            var swfDecision = decision.First().SwfDecision();
            var data        = swfDecision.RecordMarkerDecisionAttributes.Details.AsDynamic();

            Assert.That(data.SignalNames.ToObject <string[]>(), Is.EqualTo(new[] { "Confirmed" }));
            Assert.That((SignalWaitType)data.WaitType, Is.EqualTo(SignalWaitType.Any));
            Assert.That((SignalNextAction)data.NextAction, Is.EqualTo(SignalNextAction.Continue));
        }
Esempio n. 8
0
        public void Continue_the_execution_and_record_resumed_signal_when_signal_is_received_along_with_wait_for_signal_decision()
        {
            var graph = _graphBuilder.LambdaCompletedEventGraph(_confirmEmailId, "input", "result");

            _builder.AddNewEvents(graph);
            var s = _graphBuilder.WorkflowSignaledEvent("Confirmed", "");

            _builder.AddNewEvents(s);

            var workflow = new UserActivateWorkflow();
            var decision = workflow.Decisions(_builder.Result());

            Assert.That(decision, Is.EqualTo(new WorkflowDecision[]
            {
                new WaitForSignalsDecision(new WaitForSignalData {
                    ScheduleId = _confirmEmailId, TriggerEventId = graph.First().EventId
                }),
                new ScheduleLambdaDecision(Identity.Lambda("ActivateUser").ScheduleId(), "input"),
                new WorkflowItemSignalledDecision(_confirmEmailId, graph.First().EventId, "Confirmed", s.EventId)
            }));
        }