< Summary

Information
Class: Elsa.Workflows.Runtime.WorkflowDispatchOutboxStateExtensions
Assembly: Elsa.Workflows.Runtime
File(s): /home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Workflows.Runtime/Extensions/WorkflowDispatchOutboxStateExtensions.cs
Line coverage
86%
Covered lines: 13
Uncovered lines: 2
Coverable lines: 15
Total lines: 68
Line coverage: 86.6%
Branch coverage
71%
Covered branches: 10
Total branches: 14
Branch coverage: 71.4%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
AddWorkflowDispatchOutboxItem(...)100%22100%
RemoveWorkflowDispatchOutboxItem(...)50%4471.42%
HasWorkflowDispatchOutboxItem(...)50%22100%
HasWorkflowDispatchOutboxItems(...)50%22100%
GetWorkflowDispatchOutboxState(...)100%44100%

File(s)

/home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Workflows.Runtime/Extensions/WorkflowDispatchOutboxStateExtensions.cs

#LineLine coverage
 1using Elsa.Extensions;
 2using Elsa.Workflows.Runtime.Models;
 3using Elsa.Workflows.State;
 4
 5namespace Elsa.Workflows.Runtime;
 6
 7/// <summary>
 8/// Extension methods for workflow dispatch outbox state stored on workflow state.
 9/// </summary>
 10public static class WorkflowDispatchOutboxStateExtensions
 11{
 12    /// <summary>
 13    /// The workflow property key used to store committed outbox item IDs.
 14    /// </summary>
 15    public const string PropertyKey = "Elsa.Workflows.Runtime.WorkflowDispatchOutbox";
 16
 17    /// <summary>
 18    /// Adds an outbox item ID to the workflow execution context's persisted property bag.
 19    /// </summary>
 20    public static void AddWorkflowDispatchOutboxItem(this WorkflowExecutionContext context, string outboxItemId)
 21    {
 122        var state = context.Properties.GetWorkflowDispatchOutboxState();
 23
 124        if (!state.ItemIds.Contains(outboxItemId))
 125            state.ItemIds.Add(outboxItemId);
 26
 127        context.Properties[PropertyKey] = state;
 128    }
 29
 30    /// <summary>
 31    /// Removes a delivered outbox item ID from the persisted workflow state property bag.
 32    /// </summary>
 33    public static bool RemoveWorkflowDispatchOutboxItem(this WorkflowState workflowState, string outboxItemId)
 34    {
 835        var state = workflowState.Properties.GetWorkflowDispatchOutboxState();
 36
 837        if (!state.ItemIds.Remove(outboxItemId))
 038            return false;
 39
 840        if (state.ItemIds.Count == 0)
 841            workflowState.Properties.Remove(PropertyKey);
 42        else
 043            workflowState.Properties[PropertyKey] = state;
 44
 845        return true;
 46    }
 47
 48    /// <summary>
 49    /// Returns true when the workflow state includes the specified committed outbox item ID.
 50    /// </summary>
 51    public static bool HasWorkflowDispatchOutboxItem(this WorkflowState? workflowState, string outboxItemId)
 52    {
 1953        return workflowState?.Properties.GetWorkflowDispatchOutboxState().ItemIds.Contains(outboxItemId) == true;
 54    }
 55
 56    /// <summary>
 57    /// Returns true when the workflow state includes committed outbox item IDs.
 58    /// </summary>
 59    public static bool HasWorkflowDispatchOutboxItems(this WorkflowState? workflowState)
 60    {
 361        return workflowState?.Properties.GetWorkflowDispatchOutboxState().ItemIds.Count > 0;
 62    }
 63
 64    private static WorkflowDispatchOutboxState GetWorkflowDispatchOutboxState(this IDictionary<string, object>? properti
 65    {
 3166        return properties?.TryGetValue<WorkflowDispatchOutboxState>(PropertyKey, out var state) == true ? state : new();
 67    }
 68}