mirror of https://github.com/Squidex/squidex.git
13 changed files with 261 additions and 37 deletions
@ -0,0 +1,37 @@ |
|||
// ==========================================================================
|
|||
// Squidex Headless CMS
|
|||
// ==========================================================================
|
|||
// Copyright (c) Squidex UG (haftungsbeschraenkt)
|
|||
// All rights reserved. Licensed under the MIT license.
|
|||
// ==========================================================================
|
|||
|
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using Newtonsoft.Json; |
|||
using Squidex.Infrastructure.Json.Newtonsoft; |
|||
|
|||
namespace Squidex.Domain.Apps.Core.Contents.Json |
|||
{ |
|||
public sealed class WorkflowConverter : JsonClassConverter<Workflows> |
|||
{ |
|||
protected override void WriteValue(JsonWriter writer, Workflows value, JsonSerializer serializer) |
|||
{ |
|||
var json = new Dictionary<Guid, Workflow>(value.Count); |
|||
|
|||
foreach (var workflow in value) |
|||
{ |
|||
json.Add(workflow.Key, workflow.Value); |
|||
} |
|||
|
|||
serializer.Serialize(writer, json); |
|||
} |
|||
|
|||
protected override Workflows ReadValue(JsonReader reader, Type objectType, JsonSerializer serializer) |
|||
{ |
|||
var json = serializer.Deserialize<Dictionary<Guid, Workflow>>(reader); |
|||
|
|||
return new Workflows(json.ToArray()); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,36 @@ |
|||
// ==========================================================================
|
|||
// Squidex Headless CMS
|
|||
// ==========================================================================
|
|||
// Copyright (c) Squidex UG (haftungsbeschraenkt)
|
|||
// All rights reserved. Licensed under the MIT license.
|
|||
// ==========================================================================
|
|||
|
|||
using System; |
|||
using System.ComponentModel; |
|||
using System.Globalization; |
|||
|
|||
namespace Squidex.Domain.Apps.Core.Contents |
|||
{ |
|||
public sealed class StatusConverter : TypeConverter |
|||
{ |
|||
public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) |
|||
{ |
|||
return sourceType == typeof(string); |
|||
} |
|||
|
|||
public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) |
|||
{ |
|||
return destinationType == typeof(string); |
|||
} |
|||
|
|||
public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) |
|||
{ |
|||
return new Status(value?.ToString()); |
|||
} |
|||
|
|||
public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) |
|||
{ |
|||
return value.ToString(); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,36 @@ |
|||
// ==========================================================================
|
|||
// Squidex Headless CMS
|
|||
// ==========================================================================
|
|||
// Copyright (c) Squidex UG (haftungsbeschraenkt)
|
|||
// All rights reserved. Licensed under the MIT license.
|
|||
// ==========================================================================
|
|||
|
|||
using FluentAssertions; |
|||
using Squidex.Domain.Apps.Core.Contents; |
|||
using Xunit; |
|||
|
|||
namespace Squidex.Domain.Apps.Core.Model.Contents |
|||
{ |
|||
public class WorkflowJsonTests |
|||
{ |
|||
[Fact] |
|||
public void Should_serialize_and_deserialize() |
|||
{ |
|||
var workflow = Workflow.Default; |
|||
|
|||
var serialized = workflow.SerializeAndDeserialize(); |
|||
|
|||
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); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,116 @@ |
|||
// ==========================================================================
|
|||
// Squidex Headless CMS
|
|||
// ==========================================================================
|
|||
// Copyright (c) Squidex UG (haftungsbeschraenkt)
|
|||
// All rights reserved. Licensed under the MIT license.
|
|||
// ==========================================================================
|
|||
|
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using Squidex.Domain.Apps.Core.Contents; |
|||
using Xunit; |
|||
|
|||
namespace Squidex.Domain.Apps.Core.Model.Contents |
|||
{ |
|||
public class WorkflowTests |
|||
{ |
|||
private readonly Workflow workflow = new Workflow( |
|||
new Dictionary<Status, WorkflowStep> |
|||
{ |
|||
[Status.Draft] = |
|||
new WorkflowStep( |
|||
new Dictionary<Status, WorkflowTransition> |
|||
{ |
|||
[Status.Archived] = new WorkflowTransition("ToArchivedExpr", "ToArchivedRole"), |
|||
[Status.Published] = new WorkflowTransition("ToPublishedExpr", "ToPublishedRole") |
|||
}, |
|||
StatusColors.Draft), |
|||
[Status.Archived] = |
|||
new WorkflowStep( |
|||
new Dictionary<Status, WorkflowTransition>(), |
|||
StatusColors.Archived, true), |
|||
[Status.Published] = |
|||
new WorkflowStep( |
|||
new Dictionary<Status, WorkflowTransition>(), |
|||
StatusColors.Archived) |
|||
}, Status.Draft); |
|||
|
|||
[Fact] |
|||
public void Should_provide_initial_state() |
|||
{ |
|||
var (status, step) = workflow.GetInitialStep(); |
|||
|
|||
Assert.Equal(Status.Draft, status); |
|||
Assert.Equal(StatusColors.Draft, step.Color); |
|||
Assert.Same(workflow.Steps[Status.Draft], step); |
|||
} |
|||
|
|||
[Fact] |
|||
public void Should_provide_step() |
|||
{ |
|||
var found = workflow.TryGetStep(Status.Draft, out var step); |
|||
|
|||
Assert.True(found); |
|||
Assert.Same(workflow.Steps[Status.Draft], step); |
|||
} |
|||
|
|||
[Fact] |
|||
public void Should_not_provide_unknown_step() |
|||
{ |
|||
var found = workflow.TryGetStep(default, out var step); |
|||
|
|||
Assert.False(found); |
|||
Assert.Null(step); |
|||
} |
|||
|
|||
[Fact] |
|||
public void Should_provide_transition() |
|||
{ |
|||
var found = workflow.TryGetTransition(Status.Draft, Status.Archived, out var transition); |
|||
|
|||
Assert.True(found); |
|||
Assert.Equal("ToArchivedExpr", transition.Expression); |
|||
Assert.Equal("ToArchivedRole", transition.Role); |
|||
} |
|||
|
|||
[Fact] |
|||
public void Should_not_provide_transition_from_unknown_step() |
|||
{ |
|||
var found = workflow.TryGetTransition(default, Status.Archived, out var transition); |
|||
|
|||
Assert.False(found); |
|||
Assert.Null(transition); |
|||
} |
|||
|
|||
[Fact] |
|||
public void Should_not_provide_transition_to_unknown_step() |
|||
{ |
|||
var found = workflow.TryGetTransition(Status.Draft, default, out var transition); |
|||
|
|||
Assert.False(found); |
|||
Assert.Null(transition); |
|||
} |
|||
|
|||
[Fact] |
|||
public void Should_provide_transitions() |
|||
{ |
|||
var transitions = workflow.GetTransitions(Status.Draft).ToArray(); |
|||
|
|||
Assert.Equal(2, transitions.Length); |
|||
|
|||
var (status1, step1, transition1) = transitions[0]; |
|||
|
|||
Assert.Equal(Status.Archived, status1); |
|||
Assert.Equal("ToArchivedExpr", transition1.Expression); |
|||
Assert.Equal("ToArchivedRole", transition1.Role); |
|||
Assert.Same(workflow.Steps[Status.Archived], step1); |
|||
|
|||
var (status2, step2, transition2) = transitions[1]; |
|||
|
|||
Assert.Equal(Status.Published, status2); |
|||
Assert.Equal("ToPublishedExpr", transition2.Expression); |
|||
Assert.Equal("ToPublishedRole", transition2.Role); |
|||
Assert.Same(workflow.Steps[Status.Published], step2); |
|||
} |
|||
} |
|||
} |
|||
Loading…
Reference in new issue