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), })); }
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); }
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")); }
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), })); }
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), })); }
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); }
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)); }
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) })); }