diff --git a/backend/src/Squidex.Domain.Apps.Core.Model/Schemas/SchemaExtensions.cs b/backend/src/Squidex.Domain.Apps.Core.Model/Schemas/SchemaExtensions.cs index 7a10558ca..74e53d876 100644 --- a/backend/src/Squidex.Domain.Apps.Core.Model/Schemas/SchemaExtensions.cs +++ b/backend/src/Squidex.Domain.Apps.Core.Model/Schemas/SchemaExtensions.cs @@ -62,18 +62,18 @@ public static class SchemaExtensions return schema.RootFields(schema.FieldsInReferences); } - public static IEnumerable ListFields(this Schema schema) - { - return schema.RootFields(schema.FieldsInLists); - } - public static IEnumerable RootFields(this Schema schema, FieldNames names) { var hasField = false; foreach (var name in names) { - if (schema.FieldsByName.TryGetValue(name, out var field)) + if (!FieldNames.IsDataField(name, out var dataField)) + { + continue; + } + + if (schema.FieldsByName.TryGetValue(dataField, out var field)) { hasField = true; diff --git a/backend/tests/Squidex.Domain.Apps.Core.Tests/Model/Schemas/SchemaTests.cs b/backend/tests/Squidex.Domain.Apps.Core.Tests/Model/Schemas/SchemaTests.cs index 6fbfa38ed..a1710bf3d 100644 --- a/backend/tests/Squidex.Domain.Apps.Core.Tests/Model/Schemas/SchemaTests.cs +++ b/backend/tests/Squidex.Domain.Apps.Core.Tests/Model/Schemas/SchemaTests.cs @@ -480,6 +480,36 @@ public class SchemaTests deserialized.Should().BeEquivalentTo(original); } + [Fact] + public void Should_get_reference_fields() + { + var field1 = CreateField(1); + var field2 = CreateField(2); + + var schema_1 = schema_0.AddField(field1); + var schema_2 = schema_1.AddField(field2); + var schema_3 = schema_2.SetFieldsInReferences(FieldNames.Create($"data.{field1.Name}", $"data.{field2.Name}")); + + var referenceFields = schema_3.ReferenceFields(); + + Assert.Equal(new RootField[] { field1, field2 }, referenceFields.ToArray()); + } + + [Fact] + public void Should_get_reference_fields_with_fallback() + { + var field1 = CreateField(1); + var field2 = CreateField(2); + + var schema_1 = schema_0.AddField(field1); + var schema_2 = schema_1.AddField(field2); + var schema_3 = schema_2.SetFieldsInReferences(FieldNames.Create("data.invalid")); + + var referenceFields = schema_3.ReferenceFields(); + + Assert.Equal(new RootField[] { field1 }, referenceFields.ToArray()); + } + [Fact] public void Should_deserialize_state() {