From cb0384d9a7c394ed6a4791a309bbfa13b2a18311 Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Thu, 25 Oct 2018 17:20:49 +0200 Subject: [PATCH] Escape languages in graphql. --- .../GraphQL/Types/ContentDataGraphType.cs | 8 ++++--- .../Schemas/SchemaExtensions.cs | 5 +++++ .../Contents/GraphQL/GraphQLQueriesTests.cs | 21 +++++++++++++++++++ .../Contents/GraphQL/GraphQLTestBase.cs | 9 ++++++-- 4 files changed, 38 insertions(+), 5 deletions(-) diff --git a/src/Squidex.Domain.Apps.Entities/Contents/GraphQL/Types/ContentDataGraphType.cs b/src/Squidex.Domain.Apps.Entities/Contents/GraphQL/Types/ContentDataGraphType.cs index ab748e37a..cb77d343d 100644 --- a/src/Squidex.Domain.Apps.Entities/Contents/GraphQL/Types/ContentDataGraphType.cs +++ b/src/Squidex.Domain.Apps.Entities/Contents/GraphQL/Types/ContentDataGraphType.cs @@ -43,21 +43,23 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL.Types foreach (var partitionItem in partition) { + var key = partitionItem.Key; + var resolver = new FuncFieldResolver(c => { - if (((ContentFieldData)c.Source).TryGetValue(c.FieldName, out var value)) + if (((ContentFieldData)c.Source).TryGetValue(key, out var value)) { return fieldInfo.Resolver(value, c); } else { - return fieldInfo; + return null; } }); fieldGraphType.AddField(new FieldType { - Name = partitionItem.Key, + Name = key.EscapePartition(), Resolver = resolver, ResolvedType = fieldInfo.ResolveType, Description = field.RawProperties.Hints diff --git a/src/Squidex.Domain.Apps.Entities/Schemas/SchemaExtensions.cs b/src/Squidex.Domain.Apps.Entities/Schemas/SchemaExtensions.cs index 4d45ac893..3a44a25f9 100644 --- a/src/Squidex.Domain.Apps.Entities/Schemas/SchemaExtensions.cs +++ b/src/Squidex.Domain.Apps.Entities/Schemas/SchemaExtensions.cs @@ -18,6 +18,11 @@ namespace Squidex.Domain.Apps.Entities.Schemas return new NamedId(schema.Id, schema.Name); } + public static string EscapePartition(this string value) + { + return value.Replace('-', '_'); + } + public static string TypeName(this IField field) { return field.Name.ToPascalCase(); diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Contents/GraphQL/GraphQLQueriesTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Contents/GraphQL/GraphQLQueriesTests.cs index 1276393df..c9c197dab 100644 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Contents/GraphQL/GraphQLQueriesTests.cs +++ b/tests/Squidex.Domain.Apps.Entities.Tests/Contents/GraphQL/GraphQLQueriesTests.cs @@ -268,6 +268,9 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL myTags { iv } + myLocalized { + de_DE + } myArray { iv { nestedNumber @@ -342,6 +345,10 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL "tag2" } }, + myLocalized = new + { + de_DE = "de-DE" + }, myArray = new { iv = new[] @@ -405,6 +412,9 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL myTags { iv } + myLocalized { + de_DE + } } } } @@ -476,6 +486,10 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL "tag1", "tag2" } + }, + myLocalized = new + { + de_DE = "de-DE" } } } @@ -526,6 +540,9 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL myTags {{ iv }} + myLocalized {{ + de_DE + }} }} }} }}"; @@ -589,6 +606,10 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL "tag1", "tag2" } + }, + myLocalized = new + { + de_DE = "de-DE" } } } diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Contents/GraphQL/GraphQLTestBase.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Contents/GraphQL/GraphQLTestBase.cs index b91ee3f4e..d46676a0e 100644 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Contents/GraphQL/GraphQLTestBase.cs +++ b/tests/Squidex.Domain.Apps.Entities.Tests/Contents/GraphQL/GraphQLTestBase.cs @@ -70,13 +70,15 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL new GeolocationFieldProperties()) .AddTags(11, "my-tags", Partitioning.Invariant, new TagsFieldProperties()) - .AddArray(12, "my-array", Partitioning.Invariant, f => f + .AddString(12, "my-localized", Partitioning.Language, + new StringFieldProperties()) + .AddArray(13, "my-array", Partitioning.Invariant, f => f .AddBoolean(121, "nested-boolean") .AddNumber(122, "nested-number")); A.CallTo(() => app.Id).Returns(appId); A.CallTo(() => app.Name).Returns(appName); - A.CallTo(() => app.LanguagesConfig).Returns(LanguagesConfig.Build(Language.DE)); + A.CallTo(() => app.LanguagesConfig).Returns(LanguagesConfig.Build(Language.DE, Language.GermanGermany)); context = QueryContext.Create(app, user); @@ -126,6 +128,9 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL .AddField("my-json", new ContentFieldData() .AddValue("iv", JToken.FromObject(new { value = 1 }))) + .AddField("my-localized", + new ContentFieldData() + .AddValue("de-DE", "de-DE")) .AddField("my-array", new ContentFieldData() .AddValue("iv", new JArray(