diff --git a/backend/src/Squidex.Domain.Apps.Core.Operations/DefaultValues/DefaultValueExtensions.cs b/backend/src/Squidex.Domain.Apps.Core.Operations/DefaultValues/DefaultValueExtensions.cs index dcf4a5c5f..a588de814 100644 --- a/backend/src/Squidex.Domain.Apps.Core.Operations/DefaultValues/DefaultValueExtensions.cs +++ b/backend/src/Squidex.Domain.Apps.Core.Operations/DefaultValues/DefaultValueExtensions.cs @@ -5,8 +5,11 @@ // 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 { @@ -14,9 +17,43 @@ namespace Squidex.Domain.Apps.Core.DefaultValues { 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); + } } } } diff --git a/backend/src/Squidex.Domain.Apps.Core.Operations/DefaultValues/DefaultValueGenerator.cs b/backend/src/Squidex.Domain.Apps.Core.Operations/DefaultValues/DefaultValueGenerator.cs deleted file mode 100644 index 5ba1be11c..000000000 --- a/backend/src/Squidex.Domain.Apps.Core.Operations/DefaultValues/DefaultValueGenerator.cs +++ /dev/null @@ -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); - } - } - } -} diff --git a/backend/tests/Squidex.Domain.Apps.Core.Tests/Operations/DefaultValues/DefaultValuesTests.cs b/backend/tests/Squidex.Domain.Apps.Core.Tests/Operations/DefaultValues/DefaultValuesTests.cs index d8f07a9d8..8574b8bec 100644 --- a/backend/tests/Squidex.Domain.Apps.Core.Tests/Operations/DefaultValues/DefaultValuesTests.cs +++ b/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 }); } - private static IEnumerable InvalidValues() - { - 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) + [Fact] + public void Should_enrich_with_default_values() { var data = new ContentData() @@ -58,11 +50,6 @@ namespace Squidex.Domain.Apps.Core.Operations.DefaultValues new ContentFieldData() .AddInvariant(456)); - if (value != JsonBoolean.False) - { - data["my-string"]!["en"] = value!; - } - data.GenerateDefaultValues(schema, languagesConfig.ToResolver()); Assert.Equal(456, ((JsonNumber)data["my-number"]!["iv"]).Value);