Browse Source

Partially fixed.

pull/502/head
Sebastian 6 years ago
parent
commit
41a8248db2
  1. 19
      backend/src/Squidex.Domain.Apps.Entities/Contents/GraphQL/Types/Extensions.cs
  2. 16
      backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/GraphQL/GraphQLQueriesTests.cs
  3. 10
      backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/GraphQL/GraphQLTestBase.cs

19
backend/src/Squidex.Domain.Apps.Entities/Contents/GraphQL/Types/Extensions.cs

@ -19,19 +19,26 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL.Types
public static IEnumerable<(T Field, string Name, string Type)> SafeFields<T>(this IEnumerable<T> fields) where T : IField public static IEnumerable<(T Field, string Name, string Type)> SafeFields<T>(this IEnumerable<T> fields) where T : IField
{ {
var allFields = var allFields =
fields.ForApi() fields.FieldNames()
.Select(f => (Field: f, Name: f.Name.ToCamelCase(), Type: f.TypeName())).GroupBy(x => x.Name) .GroupBy(x => x.Name)
.Select(g => .Select(g => g.Select((f, i) => (f.Field, f.Name.SafeString(i), f.Type.SafeString(i))))
{
return g.Select((f, i) => (f.Field, f.Name.SafeString(i), f.Type.SafeString(i)));
})
.SelectMany(x => x); .SelectMany(x => x);
return allFields; return allFields;
} }
private static IEnumerable<(T Field, string Name, string Type)> FieldNames<T>(this IEnumerable<T> fields) where T : IField
{
return fields.ForApi().Select(field => (field, field.Name.ToCamelCase(), field.TypeName()));
}
private static string SafeString(this string value, int index) private static string SafeString(this string value, int index)
{ {
if (value.Length > 0 && !char.IsLetter(value[0]))
{
value = "gql_" + value;
}
if (index > 0) if (index > 0)
{ {
return value + (index + 1); return value + (index + 1);

16
backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/GraphQL/GraphQLQueriesTests.cs

@ -784,7 +784,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL
} }
[Fact] [Fact]
public async Task Should_return_single_content_with_duplicate_names() public async Task Should_return_single_content_with_fixed_names()
{ {
var contentId = Guid.NewGuid(); var contentId = Guid.NewGuid();
var content = CreateContent(contentId, Guid.Empty, Guid.Empty); var content = CreateContent(contentId, Guid.Empty, Guid.Empty);
@ -793,6 +793,12 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL
query { query {
findMySchemaContent(id: ""<ID>"") { findMySchemaContent(id: ""<ID>"") {
data { data {
gql_2Numbers {
iv
}
gql_2Numbers2 {
iv
}
myNumber { myNumber {
iv iv
} }
@ -822,6 +828,14 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL
{ {
data = new data = new
{ {
gql_2Numbers = new
{
iv = 22
},
gql_2Numbers2 = new
{
iv = 23
},
myNumber = new myNumber = new
{ {
iv = 1 iv = 1

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

@ -88,6 +88,10 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL
.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,
new NumberFieldProperties())
.AddNumber(15, "2-numbers", Partitioning.Invariant,
new NumberFieldProperties())
.SetScripts(new SchemaScripts { Query = "<query-script>" }); .SetScripts(new SchemaScripts { Query = "<query-script>" });
schema = Mocks.Schema(appId, schemaId, schemaDef); schema = Mocks.Schema(appId, schemaId, schemaDef);
@ -123,6 +127,12 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL
.AddField("my-assets", .AddField("my-assets",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", JsonValue.Array(assetId.ToString()))) .AddValue("iv", JsonValue.Array(assetId.ToString())))
.AddField("2_numbers",
new ContentFieldData()
.AddValue("iv", 22))
.AddField("2-numbers",
new ContentFieldData()
.AddValue("iv", 23))
.AddField("my-number", .AddField("my-number",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", 1.0)) .AddValue("iv", 1.0))

Loading…
Cancel
Save