Browse Source

Default values.

pull/680/head
Sebastian Stehle 5 years ago
parent
commit
e44869ea81
  1. 41
      backend/src/Squidex.Domain.Apps.Core.Operations/DefaultValues/DefaultValueExtensions.cs
  2. 73
      backend/src/Squidex.Domain.Apps.Core.Operations/DefaultValues/DefaultValueGenerator.cs
  3. 17
      backend/tests/Squidex.Domain.Apps.Core.Tests/Operations/DefaultValues/DefaultValuesTests.cs

41
backend/src/Squidex.Domain.Apps.Core.Operations/DefaultValues/DefaultValueExtensions.cs

@ -5,8 +5,11 @@
// All rights reserved. Licensed under the MIT license. // All rights reserved. Licensed under the MIT license.
// ========================================================================== // ==========================================================================
using NodaTime;
using Squidex.Domain.Apps.Core.Contents; using Squidex.Domain.Apps.Core.Contents;
using Squidex.Domain.Apps.Core.Schemas; using Squidex.Domain.Apps.Core.Schemas;
using Squidex.Infrastructure;
using Squidex.Infrastructure.Json.Objects;
namespace Squidex.Domain.Apps.Core.DefaultValues namespace Squidex.Domain.Apps.Core.DefaultValues
{ {
@ -14,9 +17,43 @@ namespace Squidex.Domain.Apps.Core.DefaultValues
{ {
public static void GenerateDefaultValues(this ContentData data, Schema schema, PartitionResolver partitionResolver) public static void GenerateDefaultValues(this ContentData data, Schema schema, PartitionResolver partitionResolver)
{ {
var enricher = new DefaultValueGenerator(schema, partitionResolver); Guard.NotNull(schema, nameof(schema));
Guard.NotNull(partitionResolver, nameof(partitionResolver));
enricher.Enrich(data); foreach (var field in schema.Fields)
{
var fieldData = data.GetOrCreate(field.Name, _ => new ContentFieldData());
if (fieldData != null)
{
var partitioning = partitionResolver(field.Partitioning);
foreach (var partitionKey in partitioning.AllKeys)
{
Enrich(field, fieldData, partitionKey);
}
if (fieldData.Count > 0)
{
data[field.Name] = fieldData;
}
}
}
}
private static void Enrich(IField field, ContentFieldData fieldData, string partitionKey)
{
var defaultValue = DefaultValueFactory.CreateDefaultValue(field, SystemClock.Instance.GetCurrentInstant(), partitionKey);
if (field.RawProperties.IsRequired || defaultValue == null || defaultValue.Type == JsonValueType.Null)
{
return;
}
if (!fieldData.TryGetValue(partitionKey, out _))
{
fieldData.AddLocalized(partitionKey, defaultValue);
}
} }
} }
} }

73
backend/src/Squidex.Domain.Apps.Core.Operations/DefaultValues/DefaultValueGenerator.cs

@ -1,73 +0,0 @@
// ==========================================================================
// Squidex Headless CMS
// ==========================================================================
// Copyright (c) Squidex UG (haftungsbeschränkt)
// All rights reserved. Licensed under the MIT license.
// ==========================================================================
using NodaTime;
using Squidex.Domain.Apps.Core.Contents;
using Squidex.Domain.Apps.Core.Schemas;
using Squidex.Infrastructure;
using Squidex.Infrastructure.Json.Objects;
namespace Squidex.Domain.Apps.Core.DefaultValues
{
public sealed class DefaultValueGenerator
{
private readonly Schema schema;
private readonly PartitionResolver partitionResolver;
public DefaultValueGenerator(Schema schema, PartitionResolver partitionResolver)
{
Guard.NotNull(schema, nameof(schema));
Guard.NotNull(partitionResolver, nameof(partitionResolver));
this.schema = schema;
this.partitionResolver = partitionResolver;
}
public void Enrich(ContentData data)
{
Guard.NotNull(data, nameof(data));
foreach (var field in schema.Fields)
{
var fieldData = data.GetOrCreate(field.Name, _ => new ContentFieldData());
if (fieldData != null)
{
var partitioning = partitionResolver(field.Partitioning);
foreach (var partitionKey in partitioning.AllKeys)
{
Enrich(field, fieldData, partitionKey);
}
if (fieldData.Count > 0)
{
data[field.Name] = fieldData;
}
}
}
}
private static void Enrich(IField field, ContentFieldData fieldData, string partitionKey)
{
Guard.NotNull(fieldData, nameof(fieldData));
var defaultValue = DefaultValueFactory.CreateDefaultValue(field, SystemClock.Instance.GetCurrentInstant(), partitionKey);
if (field.RawProperties.IsRequired || defaultValue == null || defaultValue.Type == JsonValueType.Null)
{
return;
}
if (!fieldData.TryGetNonNull(partitionKey, out _))
{
fieldData.AddLocalized(partitionKey, defaultValue);
}
}
}
}

17
backend/tests/Squidex.Domain.Apps.Core.Tests/Operations/DefaultValues/DefaultValuesTests.cs

@ -38,16 +38,8 @@ namespace Squidex.Domain.Apps.Core.Operations.DefaultValues
new BooleanFieldProperties { DefaultValue = true }); new BooleanFieldProperties { DefaultValue = true });
} }
private static IEnumerable<object?[]> InvalidValues() [Fact]
{ public void Should_enrich_with_default_values()
yield return new object?[] { null };
yield return new object?[] { JsonValue.Null };
yield return new object?[] { JsonValue.False }; // Undefined
}
[Theory]
[MemberData(nameof(InvalidValues))]
public void Should_enrich_with_default_values(IJsonValue? value)
{ {
var data = var data =
new ContentData() new ContentData()
@ -58,11 +50,6 @@ namespace Squidex.Domain.Apps.Core.Operations.DefaultValues
new ContentFieldData() new ContentFieldData()
.AddInvariant(456)); .AddInvariant(456));
if (value != JsonBoolean.False)
{
data["my-string"]!["en"] = value!;
}
data.GenerateDefaultValues(schema, languagesConfig.ToResolver()); data.GenerateDefaultValues(schema, languagesConfig.ToResolver());
Assert.Equal(456, ((JsonNumber)data["my-number"]!["iv"]).Value); Assert.Equal(456, ((JsonNumber)data["my-number"]!["iv"]).Value);

Loading…
Cancel
Save