diff --git a/backend/src/Squidex.Domain.Apps.Entities/Contents/GraphQL/Types/Contents/FieldVisitor.cs b/backend/src/Squidex.Domain.Apps.Entities/Contents/GraphQL/Types/Contents/FieldVisitor.cs index 1eb3fb55e..4d412f37b 100644 --- a/backend/src/Squidex.Domain.Apps.Entities/Contents/GraphQL/Types/Contents/FieldVisitor.cs +++ b/backend/src/Squidex.Domain.Apps.Entities/Contents/GraphQL/Types/Contents/FieldVisitor.cs @@ -128,6 +128,11 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL.Types.Contents if (source.TryGetValue(key, out var value)) { + if (value is JsonNull) + { + return null; + } + return valueResolver(value, fieldContext, context); } diff --git a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/GraphQL/GraphQLTestBase.cs b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/GraphQL/GraphQLTestBase.cs index df1bf7151..a6968bb47 100644 --- a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/GraphQL/GraphQLTestBase.cs +++ b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/GraphQL/GraphQLTestBase.cs @@ -69,35 +69,37 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL new JsonFieldProperties()) .AddString(2, "my-string", Partitioning.Language, new StringFieldProperties()) - .AddNumber(3, "my-number", Partitioning.Invariant, + .AddString(3, "my-string2", Partitioning.Invariant, + new StringFieldProperties()) + .AddString(4, "my-localized", Partitioning.Language, + new StringFieldProperties()) + .AddNumber(5, "my-number", Partitioning.Invariant, new NumberFieldProperties()) - .AddNumber(4, "my_number", Partitioning.Invariant, + .AddNumber(6, "my_number", Partitioning.Invariant, new NumberFieldProperties()) - .AddAssets(5, "my-assets", Partitioning.Invariant, + .AddAssets(7, "my-assets", Partitioning.Invariant, new AssetsFieldProperties()) - .AddBoolean(6, "my-boolean", Partitioning.Invariant, + .AddBoolean(8, "my-boolean", Partitioning.Invariant, new BooleanFieldProperties()) - .AddDateTime(7, "my-datetime", Partitioning.Invariant, + .AddDateTime(9, "my-datetime", Partitioning.Invariant, new DateTimeFieldProperties()) - .AddReferences(8, "my-references", Partitioning.Invariant, + .AddReferences(10, "my-references", Partitioning.Invariant, new ReferencesFieldProperties { SchemaId = schemaRefId1.Id }) - .AddReferences(81, "my-union", Partitioning.Invariant, + .AddReferences(11, "my-union", Partitioning.Invariant, new ReferencesFieldProperties()) - .AddReferences(9, "my-invalid", Partitioning.Invariant, + .AddReferences(12, "my-invalid", Partitioning.Invariant, new ReferencesFieldProperties { SchemaId = DomainId.NewGuid() }) - .AddGeolocation(10, "my-geolocation", Partitioning.Invariant, + .AddGeolocation(13, "my-geolocation", Partitioning.Invariant, new GeolocationFieldProperties()) - .AddTags(11, "my-tags", Partitioning.Invariant, + .AddTags(14, "my-tags", Partitioning.Invariant, new TagsFieldProperties()) - .AddString(12, "my-localized", Partitioning.Language, - new StringFieldProperties()) - .AddArray(13, "my-array", Partitioning.Invariant, f => f + .AddArray(15, "my-array", Partitioning.Invariant, f => f .AddBoolean(121, "nested-boolean") .AddNumber(122, "nested-number") .AddNumber(123, "nested_number")) - .AddNumber(14, "2_numbers", Partitioning.Invariant, + .AddNumber(16, "2_numbers", Partitioning.Invariant, new NumberFieldProperties()) - .AddNumber(15, "2-numbers", Partitioning.Invariant, + .AddNumber(17, "2-numbers", Partitioning.Invariant, new NumberFieldProperties()) .SetScripts(new SchemaScripts { Query = "" }); diff --git a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/GraphQL/TestContent.cs b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/GraphQL/TestContent.cs index 771041ca2..eb4e4cccc 100644 --- a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/GraphQL/TestContent.cs +++ b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/GraphQL/TestContent.cs @@ -35,6 +35,9 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL myString { de } + myString2 { + iv + } myNumber { iv } @@ -77,6 +80,9 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL .AddField("my-string", new ContentFieldData() .AddLocalized("de", "value")) + .AddField("my-string2", + new ContentFieldData() + .AddInvariant(null)) .AddField("my-assets", new ContentFieldData() .AddInvariant(JsonValue.Array(assetId.ToString()))) @@ -91,7 +97,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL .AddInvariant(1.0)) .AddField("my_number", new ContentFieldData() - .AddInvariant(2.0)) + .AddInvariant(null)) .AddField("my-boolean", new ContentFieldData() .AddInvariant(true)) @@ -120,13 +126,13 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL new ContentFieldData() .AddInvariant(JsonValue.Array( JsonValue.Object() - .Add("nested-boolean", true) .Add("nested-number", 10) - .Add("nested_number", 11), + .Add("nested_number", null) + .Add("nested-boolean", true), JsonValue.Object() - .Add("nested-boolean", false) .Add("nested-number", 20) - .Add("nested_number", 21)))); + .Add("nested_number", null) + .Add("nested-boolean", false)))); var content = new ContentEntity { @@ -206,13 +212,17 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL { de = "value" }, + ["myString2"] = new + { + iv = (object?)null + }, ["myNumber"] = new { iv = 1.0 }, ["myNumber2"] = new { - iv = 2.0 + iv = (object?)null }, ["myBoolean"] = new { @@ -256,13 +266,13 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL new { nestedNumber = 10.0, - nestedNumber2 = 11.0, + nestedNumber2 = (object?)null, nestedBoolean = true }, new { nestedNumber = 20.0, - nestedNumber2 = 21.0, + nestedNumber2 = (object?)null, nestedBoolean = false } }