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 (value is JsonNull)
{
return null;
}
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())
.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 = "<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 {
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
}
}

Loading…
Cancel
Save