diff --git a/src/Squidex.Domain.Apps.Core.Model/Contents/Workflow.cs b/src/Squidex.Domain.Apps.Core.Model/Contents/Workflow.cs index 2093a76c0..940605f44 100644 --- a/src/Squidex.Domain.Apps.Core.Model/Contents/Workflow.cs +++ b/src/Squidex.Domain.Apps.Core.Model/Contents/Workflow.cs @@ -6,13 +6,12 @@ // ========================================================================== using System.Collections.Generic; -using Squidex.Infrastructure; namespace Squidex.Domain.Apps.Core.Contents { public sealed class Workflow { - public static readonly IReadOnlyDictionary EmptySteps = new Dictionary(); + private static readonly IReadOnlyDictionary EmptySteps = new Dictionary(); public static readonly Workflow Default = new Workflow( new Dictionary @@ -48,9 +47,7 @@ namespace Squidex.Domain.Apps.Core.Contents public Workflow(IReadOnlyDictionary steps, Status initial) { - Guard.NotNull(steps, nameof(steps)); - - Steps = steps; + Steps = steps ?? EmptySteps; Initial = initial; } diff --git a/src/Squidex.Domain.Apps.Core.Model/Contents/WorkflowStep.cs b/src/Squidex.Domain.Apps.Core.Model/Contents/WorkflowStep.cs index d4c6848fc..04eb595c5 100644 --- a/src/Squidex.Domain.Apps.Core.Model/Contents/WorkflowStep.cs +++ b/src/Squidex.Domain.Apps.Core.Model/Contents/WorkflowStep.cs @@ -6,13 +6,12 @@ // ========================================================================== using System.Collections.Generic; -using Squidex.Infrastructure; namespace Squidex.Domain.Apps.Core.Contents { public sealed class WorkflowStep { - public static readonly Dictionary EmptyTransitions = new Dictionary(); + private static readonly IReadOnlyDictionary EmptyTransitions = new Dictionary(); public IReadOnlyDictionary Transitions { get; } @@ -20,11 +19,9 @@ namespace Squidex.Domain.Apps.Core.Contents public bool NoUpdate { get; } - public WorkflowStep(IReadOnlyDictionary transitions, string color = null, bool noUpdate = false) + public WorkflowStep(IReadOnlyDictionary transitions = null, string color = null, bool noUpdate = false) { - Guard.NotNull(transitions, nameof(transitions)); - - Transitions = transitions; + Transitions = transitions ?? EmptyTransitions; Color = color; diff --git a/src/Squidex.Domain.Apps.Entities/Contents/DynamicContentWorkflow.cs b/src/Squidex.Domain.Apps.Entities/Contents/DynamicContentWorkflow.cs index 021545248..6a302fcce 100644 --- a/src/Squidex.Domain.Apps.Entities/Contents/DynamicContentWorkflow.cs +++ b/src/Squidex.Domain.Apps.Entities/Contents/DynamicContentWorkflow.cs @@ -118,7 +118,7 @@ namespace Squidex.Domain.Apps.Entities.Contents { var app = await appProvider.GetAppAsync(appId); - return app?.Workflows.Values?.FirstOrDefault() ?? Workflow.Default; + return app?.Workflows.GetFirst(); } private static string GetColor(WorkflowStep step) diff --git a/src/Squidex/Areas/Api/Controllers/Apps/Models/UpsertWorkflowDto.cs b/src/Squidex/Areas/Api/Controllers/Apps/Models/UpsertWorkflowDto.cs index d9772dd52..f091ced6c 100644 --- a/src/Squidex/Areas/Api/Controllers/Apps/Models/UpsertWorkflowDto.cs +++ b/src/Squidex/Areas/Api/Controllers/Apps/Models/UpsertWorkflowDto.cs @@ -34,9 +34,9 @@ namespace Squidex.Areas.Api.Controllers.Apps.Models x => new WorkflowStep( x.Value?.Transitions.ToDictionary( y => x.Key, - y => new WorkflowTransition(y.Value.Expression, y.Value.Role)) ?? WorkflowStep.EmptyTransitions, + y => new WorkflowTransition(y.Value.Expression, y.Value.Role)), x.Value.Color, - x.Value.NoUpdate)) ?? Workflow.EmptySteps, + x.Value.NoUpdate)), Initial); return new ConfigureWorkflow { Workflow = workflow }; diff --git a/tests/Squidex.Domain.Apps.Core.Tests/Model/Contents/WorkflowJsonTests.cs b/tests/Squidex.Domain.Apps.Core.Tests/Model/Contents/WorkflowJsonTests.cs index bbc5af4e9..6719981ec 100644 --- a/tests/Squidex.Domain.Apps.Core.Tests/Model/Contents/WorkflowJsonTests.cs +++ b/tests/Squidex.Domain.Apps.Core.Tests/Model/Contents/WorkflowJsonTests.cs @@ -22,15 +22,5 @@ namespace Squidex.Domain.Apps.Core.Model.Contents serialized.Should().BeEquivalentTo(workflow); } - - [Fact] - public void Should_serialize_and_deserialize_workflows() - { - var workflow = Workflows.Empty.Set(Workflow.Default); - - var serialized = workflow.SerializeAndDeserialize(); - - serialized.Should().BeEquivalentTo(workflow); - } } } diff --git a/tests/Squidex.Domain.Apps.Core.Tests/Model/Contents/WorkflowTests.cs b/tests/Squidex.Domain.Apps.Core.Tests/Model/Contents/WorkflowTests.cs index d696f9aef..21515232d 100644 --- a/tests/Squidex.Domain.Apps.Core.Tests/Model/Contents/WorkflowTests.cs +++ b/tests/Squidex.Domain.Apps.Core.Tests/Model/Contents/WorkflowTests.cs @@ -26,13 +26,19 @@ namespace Squidex.Domain.Apps.Core.Model.Contents }, StatusColors.Draft), [Status.Archived] = - new WorkflowStep( - WorkflowStep.EmptyTransitions), + new WorkflowStep(), [Status.Published] = - new WorkflowStep( - WorkflowStep.EmptyTransitions) + new WorkflowStep() }, Status.Draft); + [Fact] + public void Should_provide_default_workflow_if_none_found() + { + var result = Workflows.Empty.GetFirst(); + + Assert.Same(Workflow.Default, result); + } + [Fact] public void Should_provide_initial_state() { diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Apps/Guards/GuardAppWorkflowTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Apps/Guards/GuardAppWorkflowTests.cs index 68d8d72af..e9d679ed1 100644 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Apps/Guards/GuardAppWorkflowTests.cs +++ b/tests/Squidex.Domain.Apps.Entities.Tests/Apps/Guards/GuardAppWorkflowTests.cs @@ -33,7 +33,7 @@ namespace Squidex.Domain.Apps.Entities.Apps.Guards Workflow = new Workflow( new Dictionary { - [Status.Published] = new WorkflowStep(WorkflowStep.EmptyTransitions) + [Status.Published] = new WorkflowStep() }, default) }; @@ -50,7 +50,7 @@ namespace Squidex.Domain.Apps.Entities.Apps.Guards Workflow = new Workflow( new Dictionary { - [Status.Draft] = new WorkflowStep(WorkflowStep.EmptyTransitions) + [Status.Draft] = new WorkflowStep() }, Status.Draft) }; @@ -107,8 +107,7 @@ namespace Squidex.Domain.Apps.Entities.Apps.Guards new Dictionary { [Status.Draft] = - new WorkflowStep( - WorkflowStep.EmptyTransitions), + new WorkflowStep(), [Status.Published] = new WorkflowStep( new Dictionary