Browse Source

Fix for JSONNull in GraphQL.

pull/657/head
Sebastian 5 years ago
parent
commit
b93d830d19
  1. 5
      backend/src/Squidex.Domain.Apps.Entities/Contents/GraphQL/Types/Contents/FieldVisitor.cs
  2. 32
      backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/GraphQL/GraphQLTestBase.cs
  3. 26
      backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/GraphQL/TestContent.cs

5
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 (source.TryGetValue(key, out var value))
{ {
if (value is JsonNull)
{
return null;
}
return valueResolver(value, fieldContext, context); return valueResolver(value, fieldContext, context);
} }

32
backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/GraphQL/GraphQLTestBase.cs

@ -69,35 +69,37 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL
new JsonFieldProperties()) new JsonFieldProperties())
.AddString(2, "my-string", Partitioning.Language, .AddString(2, "my-string", Partitioning.Language,
new StringFieldProperties()) 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()) new NumberFieldProperties())
.AddNumber(4, "my_number", Partitioning.Invariant, .AddNumber(6, "my_number", Partitioning.Invariant,
new NumberFieldProperties()) new NumberFieldProperties())
.AddAssets(5, "my-assets", Partitioning.Invariant, .AddAssets(7, "my-assets", Partitioning.Invariant,
new AssetsFieldProperties()) new AssetsFieldProperties())
.AddBoolean(6, "my-boolean", Partitioning.Invariant, .AddBoolean(8, "my-boolean", Partitioning.Invariant,
new BooleanFieldProperties()) new BooleanFieldProperties())
.AddDateTime(7, "my-datetime", Partitioning.Invariant, .AddDateTime(9, "my-datetime", Partitioning.Invariant,
new DateTimeFieldProperties()) new DateTimeFieldProperties())
.AddReferences(8, "my-references", Partitioning.Invariant, .AddReferences(10, "my-references", Partitioning.Invariant,
new ReferencesFieldProperties { SchemaId = schemaRefId1.Id }) new ReferencesFieldProperties { SchemaId = schemaRefId1.Id })
.AddReferences(81, "my-union", Partitioning.Invariant, .AddReferences(11, "my-union", Partitioning.Invariant,
new ReferencesFieldProperties()) new ReferencesFieldProperties())
.AddReferences(9, "my-invalid", Partitioning.Invariant, .AddReferences(12, "my-invalid", Partitioning.Invariant,
new ReferencesFieldProperties { SchemaId = DomainId.NewGuid() }) new ReferencesFieldProperties { SchemaId = DomainId.NewGuid() })
.AddGeolocation(10, "my-geolocation", Partitioning.Invariant, .AddGeolocation(13, "my-geolocation", Partitioning.Invariant,
new GeolocationFieldProperties()) new GeolocationFieldProperties())
.AddTags(11, "my-tags", Partitioning.Invariant, .AddTags(14, "my-tags", Partitioning.Invariant,
new TagsFieldProperties()) new TagsFieldProperties())
.AddString(12, "my-localized", Partitioning.Language, .AddArray(15, "my-array", Partitioning.Invariant, f => f
new StringFieldProperties())
.AddArray(13, "my-array", Partitioning.Invariant, f => f
.AddBoolean(121, "nested-boolean") .AddBoolean(121, "nested-boolean")
.AddNumber(122, "nested-number") .AddNumber(122, "nested-number")
.AddNumber(123, "nested_number")) .AddNumber(123, "nested_number"))
.AddNumber(14, "2_numbers", Partitioning.Invariant, .AddNumber(16, "2_numbers", Partitioning.Invariant,
new NumberFieldProperties()) new NumberFieldProperties())
.AddNumber(15, "2-numbers", Partitioning.Invariant, .AddNumber(17, "2-numbers", Partitioning.Invariant,
new NumberFieldProperties()) new NumberFieldProperties())
.SetScripts(new SchemaScripts { Query = "<query-script>" }); .SetScripts(new SchemaScripts { Query = "<query-script>" });

26
backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/GraphQL/TestContent.cs

@ -35,6 +35,9 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL
myString { myString {
de de
} }
myString2 {
iv
}
myNumber { myNumber {
iv iv
} }
@ -77,6 +80,9 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL
.AddField("my-string", .AddField("my-string",
new ContentFieldData() new ContentFieldData()
.AddLocalized("de", "value")) .AddLocalized("de", "value"))
.AddField("my-string2",
new ContentFieldData()
.AddInvariant(null))
.AddField("my-assets", .AddField("my-assets",
new ContentFieldData() new ContentFieldData()
.AddInvariant(JsonValue.Array(assetId.ToString()))) .AddInvariant(JsonValue.Array(assetId.ToString())))
@ -91,7 +97,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL
.AddInvariant(1.0)) .AddInvariant(1.0))
.AddField("my_number", .AddField("my_number",
new ContentFieldData() new ContentFieldData()
.AddInvariant(2.0)) .AddInvariant(null))
.AddField("my-boolean", .AddField("my-boolean",
new ContentFieldData() new ContentFieldData()
.AddInvariant(true)) .AddInvariant(true))
@ -120,13 +126,13 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL
new ContentFieldData() new ContentFieldData()
.AddInvariant(JsonValue.Array( .AddInvariant(JsonValue.Array(
JsonValue.Object() JsonValue.Object()
.Add("nested-boolean", true)
.Add("nested-number", 10) .Add("nested-number", 10)
.Add("nested_number", 11), .Add("nested_number", null)
.Add("nested-boolean", true),
JsonValue.Object() JsonValue.Object()
.Add("nested-boolean", false)
.Add("nested-number", 20) .Add("nested-number", 20)
.Add("nested_number", 21)))); .Add("nested_number", null)
.Add("nested-boolean", false))));
var content = new ContentEntity var content = new ContentEntity
{ {
@ -206,13 +212,17 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL
{ {
de = "value" de = "value"
}, },
["myString2"] = new
{
iv = (object?)null
},
["myNumber"] = new ["myNumber"] = new
{ {
iv = 1.0 iv = 1.0
}, },
["myNumber2"] = new ["myNumber2"] = new
{ {
iv = 2.0 iv = (object?)null
}, },
["myBoolean"] = new ["myBoolean"] = new
{ {
@ -256,13 +266,13 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL
new new
{ {
nestedNumber = 10.0, nestedNumber = 10.0,
nestedNumber2 = 11.0, nestedNumber2 = (object?)null,
nestedBoolean = true nestedBoolean = true
}, },
new new
{ {
nestedNumber = 20.0, nestedNumber = 20.0,
nestedNumber2 = 21.0, nestedNumber2 = (object?)null,
nestedBoolean = false nestedBoolean = false
} }
} }

Loading…
Cancel
Save