Browse Source

Empty workflows.

pull/380/head
Sebastian Stehle 7 years ago
parent
commit
1173ce7d6d
  1. 7
      src/Squidex.Domain.Apps.Core.Model/Contents/Workflow.cs
  2. 9
      src/Squidex.Domain.Apps.Core.Model/Contents/WorkflowStep.cs
  3. 2
      src/Squidex.Domain.Apps.Entities/Contents/DynamicContentWorkflow.cs
  4. 4
      src/Squidex/Areas/Api/Controllers/Apps/Models/UpsertWorkflowDto.cs
  5. 10
      tests/Squidex.Domain.Apps.Core.Tests/Model/Contents/WorkflowJsonTests.cs
  6. 14
      tests/Squidex.Domain.Apps.Core.Tests/Model/Contents/WorkflowTests.cs
  7. 7
      tests/Squidex.Domain.Apps.Entities.Tests/Apps/Guards/GuardAppWorkflowTests.cs

7
src/Squidex.Domain.Apps.Core.Model/Contents/Workflow.cs

@ -6,13 +6,12 @@
// ========================================================================== // ==========================================================================
using System.Collections.Generic; using System.Collections.Generic;
using Squidex.Infrastructure;
namespace Squidex.Domain.Apps.Core.Contents namespace Squidex.Domain.Apps.Core.Contents
{ {
public sealed class Workflow public sealed class Workflow
{ {
public static readonly IReadOnlyDictionary<Status, WorkflowStep> EmptySteps = new Dictionary<Status, WorkflowStep>(); private static readonly IReadOnlyDictionary<Status, WorkflowStep> EmptySteps = new Dictionary<Status, WorkflowStep>();
public static readonly Workflow Default = new Workflow( public static readonly Workflow Default = new Workflow(
new Dictionary<Status, WorkflowStep> new Dictionary<Status, WorkflowStep>
@ -48,9 +47,7 @@ namespace Squidex.Domain.Apps.Core.Contents
public Workflow(IReadOnlyDictionary<Status, WorkflowStep> steps, Status initial) public Workflow(IReadOnlyDictionary<Status, WorkflowStep> steps, Status initial)
{ {
Guard.NotNull(steps, nameof(steps)); Steps = steps ?? EmptySteps;
Steps = steps;
Initial = initial; Initial = initial;
} }

9
src/Squidex.Domain.Apps.Core.Model/Contents/WorkflowStep.cs

@ -6,13 +6,12 @@
// ========================================================================== // ==========================================================================
using System.Collections.Generic; using System.Collections.Generic;
using Squidex.Infrastructure;
namespace Squidex.Domain.Apps.Core.Contents namespace Squidex.Domain.Apps.Core.Contents
{ {
public sealed class WorkflowStep public sealed class WorkflowStep
{ {
public static readonly Dictionary<Status, WorkflowTransition> EmptyTransitions = new Dictionary<Status, WorkflowTransition>(); private static readonly IReadOnlyDictionary<Status, WorkflowTransition> EmptyTransitions = new Dictionary<Status, WorkflowTransition>();
public IReadOnlyDictionary<Status, WorkflowTransition> Transitions { get; } public IReadOnlyDictionary<Status, WorkflowTransition> Transitions { get; }
@ -20,11 +19,9 @@ namespace Squidex.Domain.Apps.Core.Contents
public bool NoUpdate { get; } public bool NoUpdate { get; }
public WorkflowStep(IReadOnlyDictionary<Status, WorkflowTransition> transitions, string color = null, bool noUpdate = false) public WorkflowStep(IReadOnlyDictionary<Status, WorkflowTransition> transitions = null, string color = null, bool noUpdate = false)
{ {
Guard.NotNull(transitions, nameof(transitions)); Transitions = transitions ?? EmptyTransitions;
Transitions = transitions;
Color = color; Color = color;

2
src/Squidex.Domain.Apps.Entities/Contents/DynamicContentWorkflow.cs

@ -118,7 +118,7 @@ namespace Squidex.Domain.Apps.Entities.Contents
{ {
var app = await appProvider.GetAppAsync(appId); var app = await appProvider.GetAppAsync(appId);
return app?.Workflows.Values?.FirstOrDefault() ?? Workflow.Default; return app?.Workflows.GetFirst();
} }
private static string GetColor(WorkflowStep step) private static string GetColor(WorkflowStep step)

4
src/Squidex/Areas/Api/Controllers/Apps/Models/UpsertWorkflowDto.cs

@ -34,9 +34,9 @@ namespace Squidex.Areas.Api.Controllers.Apps.Models
x => new WorkflowStep( x => new WorkflowStep(
x.Value?.Transitions.ToDictionary( x.Value?.Transitions.ToDictionary(
y => x.Key, 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.Color,
x.Value.NoUpdate)) ?? Workflow.EmptySteps, x.Value.NoUpdate)),
Initial); Initial);
return new ConfigureWorkflow { Workflow = workflow }; return new ConfigureWorkflow { Workflow = workflow };

10
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); 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);
}
} }
} }

14
tests/Squidex.Domain.Apps.Core.Tests/Model/Contents/WorkflowTests.cs

@ -26,13 +26,19 @@ namespace Squidex.Domain.Apps.Core.Model.Contents
}, },
StatusColors.Draft), StatusColors.Draft),
[Status.Archived] = [Status.Archived] =
new WorkflowStep( new WorkflowStep(),
WorkflowStep.EmptyTransitions),
[Status.Published] = [Status.Published] =
new WorkflowStep( new WorkflowStep()
WorkflowStep.EmptyTransitions)
}, Status.Draft); }, Status.Draft);
[Fact]
public void Should_provide_default_workflow_if_none_found()
{
var result = Workflows.Empty.GetFirst();
Assert.Same(Workflow.Default, result);
}
[Fact] [Fact]
public void Should_provide_initial_state() public void Should_provide_initial_state()
{ {

7
tests/Squidex.Domain.Apps.Entities.Tests/Apps/Guards/GuardAppWorkflowTests.cs

@ -33,7 +33,7 @@ namespace Squidex.Domain.Apps.Entities.Apps.Guards
Workflow = new Workflow( Workflow = new Workflow(
new Dictionary<Status, WorkflowStep> new Dictionary<Status, WorkflowStep>
{ {
[Status.Published] = new WorkflowStep(WorkflowStep.EmptyTransitions) [Status.Published] = new WorkflowStep()
}, },
default) default)
}; };
@ -50,7 +50,7 @@ namespace Squidex.Domain.Apps.Entities.Apps.Guards
Workflow = new Workflow( Workflow = new Workflow(
new Dictionary<Status, WorkflowStep> new Dictionary<Status, WorkflowStep>
{ {
[Status.Draft] = new WorkflowStep(WorkflowStep.EmptyTransitions) [Status.Draft] = new WorkflowStep()
}, },
Status.Draft) Status.Draft)
}; };
@ -107,8 +107,7 @@ namespace Squidex.Domain.Apps.Entities.Apps.Guards
new Dictionary<Status, WorkflowStep> new Dictionary<Status, WorkflowStep>
{ {
[Status.Draft] = [Status.Draft] =
new WorkflowStep( new WorkflowStep(),
WorkflowStep.EmptyTransitions),
[Status.Published] = [Status.Published] =
new WorkflowStep( new WorkflowStep(
new Dictionary<Status, WorkflowTransition> new Dictionary<Status, WorkflowTransition>

Loading…
Cancel
Save