Browse Source

Fix workflow serializer for old NoUpdate values.

pull/445/head
Sebastian 7 years ago
parent
commit
724caa2124
  1. 60
      backend/src/Squidex.Domain.Apps.Core.Model/Contents/Json/JsonWorkflowStep.cs
  2. 4
      backend/src/Squidex.Domain.Apps.Core.Model/Contents/Json/JsonWorkflowTransition.cs
  3. 12
      backend/src/Squidex.Domain.Apps.Core.Model/Contents/Json/WorkflowStepConverter.cs
  4. 2
      backend/src/Squidex/Config/Domain/SerializationServices.cs
  5. 10
      backend/tests/Squidex.Domain.Apps.Core.Tests/Model/Contents/WorkflowJsonTests.cs
  6. 7
      backend/tests/Squidex.Domain.Apps.Core.Tests/TestUtils.cs

60
backend/src/Squidex.Domain.Apps.Core.Model/Contents/Json/JsonWorkflowStep.cs

@ -0,0 +1,60 @@
// ==========================================================================
// Squidex Headless CMS
// ==========================================================================
// Copyright (c) Squidex UG (haftungsbeschraenkt)
// All rights reserved. Licensed under the MIT license.
// ==========================================================================
using System.Collections.Generic;
using System.Linq;
using Newtonsoft.Json;
using Squidex.Infrastructure.Reflection;
namespace Squidex.Domain.Apps.Core.Contents.Json
{
public sealed class JsonWorkflowStep
{
[JsonProperty]
public Dictionary<Status, JsonWorkflowTransition> Transitions { get; set; }
[JsonProperty]
public string? Color { get; set; }
[JsonProperty("noUpdate")]
public bool NoUpdateFlag { get; set; }
[JsonProperty("noUpdateRules")]
public NoUpdate? NoUpdate { get; set; }
public JsonWorkflowStep()
{
}
public JsonWorkflowStep(WorkflowStep step)
{
SimpleMapper.Map(step, this);
Transitions =
step.Transitions.ToDictionary(
x => x.Key,
x => new JsonWorkflowTransition(x.Value));
}
public WorkflowStep ToStep()
{
var noUpdate = NoUpdate;
if (NoUpdateFlag)
{
noUpdate = NoUpdate.Always;
}
var transitions =
Transitions?.ToDictionary(
x => x.Key,
x => x.Value.ToTransition());
return new WorkflowStep(transitions, Color, noUpdate);
}
}
}

4
backend/src/Squidex.Domain.Apps.Core.Model/Contents/Json/JsonWorkflowTransition.cs

@ -25,9 +25,9 @@ namespace Squidex.Domain.Apps.Core.Contents.Json
{
}
public JsonWorkflowTransition(WorkflowTransition client)
public JsonWorkflowTransition(WorkflowTransition transition)
{
SimpleMapper.Map(client, this);
SimpleMapper.Map(transition, this);
}
public WorkflowTransition ToTransition()

12
backend/src/Squidex.Domain.Apps.Core.Model/Contents/Json/WorkflowTransitionConverter.cs → backend/src/Squidex.Domain.Apps.Core.Model/Contents/Json/WorkflowStepConverter.cs

@ -11,20 +11,20 @@ using Squidex.Infrastructure.Json.Newtonsoft;
namespace Squidex.Domain.Apps.Core.Contents.Json
{
public sealed class WorkflowTransitionConverter : JsonClassConverter<WorkflowTransition>
public sealed class WorkflowStepConverter : JsonClassConverter<WorkflowStep>
{
protected override void WriteValue(JsonWriter writer, WorkflowTransition value, JsonSerializer serializer)
protected override void WriteValue(JsonWriter writer, WorkflowStep value, JsonSerializer serializer)
{
var json = new JsonWorkflowTransition(value);
var json = new JsonWorkflowStep(value);
serializer.Serialize(writer, json);
}
protected override WorkflowTransition ReadValue(JsonReader reader, Type objectType, JsonSerializer serializer)
protected override WorkflowStep ReadValue(JsonReader reader, Type objectType, JsonSerializer serializer)
{
var json = serializer.Deserialize<JsonWorkflowTransition>(reader)!;
var json = serializer.Deserialize<JsonWorkflowStep>(reader)!;
return json.ToTransition();
return json.ToStep();
}
}
}

2
backend/src/Squidex/Config/Domain/SerializationServices.cs

@ -53,7 +53,7 @@ namespace Squidex.Config.Domain
new StatusConverter(),
new StringEnumConverter(),
new WorkflowConverter(),
new WorkflowTransitionConverter());
new WorkflowStepConverter());
settings.NullValueHandling = NullValueHandling.Ignore;

10
backend/tests/Squidex.Domain.Apps.Core.Tests/Model/Contents/WorkflowJsonTests.cs

@ -25,6 +25,16 @@ namespace Squidex.Domain.Apps.Core.Model.Contents
serialized.Should().BeEquivalentTo(workflow);
}
[Fact]
public void Should_deserialize_old_noUpdate_condition()
{
var jsonStep = new { noUpdate = true };
var serialized = jsonStep.SerializeAndDeserialize<WorkflowStep>();
serialized.Should().BeEquivalentTo(new WorkflowStep(null, null, NoUpdate.Always));
}
[Fact]
public void Should_serialize_and_deserialize_no_update_condition()
{

7
backend/tests/Squidex.Domain.Apps.Core.Tests/TestUtils.cs

@ -65,7 +65,7 @@ namespace Squidex.Domain.Apps.Core
new StatusConverter(),
new StringEnumConverter(),
new WorkflowConverter(),
new WorkflowTransitionConverter()),
new WorkflowStepConverter()),
TypeNameHandling = typeNameHandling
};
@ -123,6 +123,11 @@ namespace Squidex.Domain.Apps.Core
return schema;
}
public static T SerializeAndDeserialize<T>(this object value)
{
return DefaultSerializer.Deserialize<T>(DefaultSerializer.Serialize(value));
}
public static T SerializeAndDeserialize<T>(this T value)
{
return DefaultSerializer.Deserialize<T>(DefaultSerializer.Serialize(value));

Loading…
Cancel
Save