Browse Source

Fix list fields comparison.

pull/484/head
Sebastian 6 years ago
parent
commit
f12449d6f4
  1. 8
      backend/src/Squidex.Domain.Apps.Core.Model/Schemas/Json/JsonSchemaModel.cs
  2. 23
      backend/src/Squidex.Domain.Apps.Core.Model/Schemas/Schema.cs
  3. 4
      backend/src/Squidex.Domain.Apps.Core.Model/Schemas/SchemaExtensions.cs
  4. 2
      backend/src/Squidex.Domain.Apps.Core.Operations/ExtractReferenceIds/ContentReferencesExtensions.cs
  5. 2
      backend/src/Squidex.Domain.Apps.Entities/Contents/Queries/Steps/EnrichWithSchema.cs
  6. 8
      backend/src/Squidex.Domain.Apps.Entities/Schemas/Commands/UpsertCommand.cs
  7. 8
      backend/src/Squidex.Domain.Apps.Entities/Schemas/State/SchemaState.cs
  8. 54
      backend/tests/Squidex.Domain.Apps.Core.Tests/Model/Schemas/SchemaTests.cs
  9. 12
      backend/tests/Squidex.Domain.Apps.Core.Tests/Operations/EventSynchronization/SchemaSynchronizerTests.cs
  10. 2
      backend/tests/Squidex.Domain.Apps.Core.Tests/Operations/ExtractReferenceIds/ReferenceFormattingTests.cs
  11. 2
      backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentDomainObjectTests.cs
  12. 2
      backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/GraphQL/GraphQLTestBase.cs
  13. 2
      backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/Queries/ContentQueryServiceTests.cs
  14. 2
      backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/Queries/ResolveAssetsTests.cs
  15. 4
      backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/Queries/ResolveReferencesTests.cs
  16. 8
      backend/tests/Squidex.Domain.Apps.Entities.Tests/Schemas/SchemaCommandsTests.cs

8
backend/src/Squidex.Domain.Apps.Core.Model/Schemas/Json/JsonSchemaModel.cs

@ -105,22 +105,22 @@ namespace Squidex.Domain.Apps.Core.Schemas.Json
if (Scripts != null) if (Scripts != null)
{ {
schema = schema.ConfigureScripts(Scripts); schema = schema.SetScripts(Scripts);
} }
if (FieldsInLists?.Count > 0) if (FieldsInLists?.Count > 0)
{ {
schema = schema.ConfigureFieldsInLists(FieldsInLists); schema = schema.SetFieldsInLists(FieldsInLists);
} }
if (FieldsInReferences?.Count > 0) if (FieldsInReferences?.Count > 0)
{ {
schema = schema.ConfigureFieldsInReferences(FieldsInReferences); schema = schema.SetFieldsInReferences(FieldsInReferences);
} }
if (PreviewUrls?.Count > 0) if (PreviewUrls?.Count > 0)
{ {
schema = schema.ConfigurePreviewUrls(PreviewUrls); schema = schema.SetPreviewUrls(PreviewUrls);
} }
return schema; return schema;

23
backend/src/Squidex.Domain.Apps.Core.Model/Schemas/Schema.cs

@ -8,6 +8,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics.Contracts; using System.Diagnostics.Contracts;
using System.Linq;
using Squidex.Infrastructure; using Squidex.Infrastructure;
namespace Squidex.Domain.Apps.Core.Schemas namespace Squidex.Domain.Apps.Core.Schemas
@ -118,7 +119,7 @@ namespace Squidex.Domain.Apps.Core.Schemas
{ {
newProperties ??= new SchemaProperties(); newProperties ??= new SchemaProperties();
if (properties.DeepEquals(newProperties)) if (properties.Equals(newProperties))
{ {
return this; return this;
} }
@ -131,7 +132,7 @@ namespace Squidex.Domain.Apps.Core.Schemas
} }
[Pure] [Pure]
public Schema ConfigureScripts(SchemaScripts newScripts) public Schema SetScripts(SchemaScripts newScripts)
{ {
newScripts ??= new SchemaScripts(); newScripts ??= new SchemaScripts();
@ -148,11 +149,11 @@ namespace Squidex.Domain.Apps.Core.Schemas
} }
[Pure] [Pure]
public Schema ConfigureFieldsInLists(FieldNames names) public Schema SetFieldsInLists(FieldNames names)
{ {
names ??= FieldNames.Empty; names ??= FieldNames.Empty;
if (fieldsInLists.SetEquals(names)) if (fieldsInLists.SequenceEqual(names))
{ {
return this; return this;
} }
@ -164,17 +165,17 @@ namespace Squidex.Domain.Apps.Core.Schemas
} }
[Pure] [Pure]
public Schema ConfigureFieldsInLists(params string[] names) public Schema SetFieldsInLists(params string[] names)
{ {
return ConfigureFieldsInLists(new FieldNames(names)); return SetFieldsInLists(new FieldNames(names));
} }
[Pure] [Pure]
public Schema ConfigureFieldsInReferences(FieldNames names) public Schema SetFieldsInReferences(FieldNames names)
{ {
names ??= FieldNames.Empty; names ??= FieldNames.Empty;
if (fieldsInReferences.SetEquals(names)) if (fieldsInReferences.SequenceEqual(names))
{ {
return this; return this;
} }
@ -186,9 +187,9 @@ namespace Squidex.Domain.Apps.Core.Schemas
} }
[Pure] [Pure]
public Schema ConfigureFieldsInReferences(params string[] names) public Schema SetFieldsInReferences(params string[] names)
{ {
return ConfigureFieldsInReferences(new FieldNames(names)); return SetFieldsInReferences(new FieldNames(names));
} }
[Pure] [Pure]
@ -234,7 +235,7 @@ namespace Squidex.Domain.Apps.Core.Schemas
} }
[Pure] [Pure]
public Schema ConfigurePreviewUrls(IReadOnlyDictionary<string, string> newPreviewUrls) public Schema SetPreviewUrls(IReadOnlyDictionary<string, string> newPreviewUrls)
{ {
previewUrls ??= EmptyPreviewUrls; previewUrls ??= EmptyPreviewUrls;

4
backend/src/Squidex.Domain.Apps.Core.Model/Schemas/SchemaExtensions.cs

@ -64,12 +64,12 @@ namespace Squidex.Domain.Apps.Core.Schemas
return properties.SchemaIds?.Count == 1 ? properties.SchemaIds[0] : Guid.Empty; return properties.SchemaIds?.Count == 1 ? properties.SchemaIds[0] : Guid.Empty;
} }
public static IEnumerable<RootField> ReferencesFields(this Schema schema) public static IEnumerable<RootField> ReferenceFields(this Schema schema)
{ {
return schema.RootFields(schema.FieldsInReferences); return schema.RootFields(schema.FieldsInReferences);
} }
public static IEnumerable<RootField> ListsFields(this Schema schema) public static IEnumerable<RootField> ListFields(this Schema schema)
{ {
return schema.RootFields(schema.FieldsInLists); return schema.RootFields(schema.FieldsInLists);
} }

2
backend/src/Squidex.Domain.Apps.Core.Operations/ExtractReferenceIds/ContentReferencesExtensions.cs

@ -123,7 +123,7 @@ namespace Squidex.Domain.Apps.Core.ExtractReferenceIds
sb.Append(value); sb.Append(value);
} }
var referenceFields = schema.ReferencesFields(); var referenceFields = schema.ReferenceFields();
foreach (var referenceField in referenceFields) foreach (var referenceField in referenceFields)
{ {

2
backend/src/Squidex.Domain.Apps.Entities/Contents/Queries/Steps/EnrichWithSchema.cs

@ -31,7 +31,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.Queries.Steps
if (context.IsFrontendClient) if (context.IsFrontendClient)
{ {
var referenceFields = schema.SchemaDef.ReferencesFields().ToArray(); var referenceFields = schema.SchemaDef.ReferenceFields().ToArray();
foreach (var content in group) foreach (var content in group)
{ {

8
backend/src/Squidex.Domain.Apps.Entities/Schemas/Commands/UpsertCommand.cs

@ -41,22 +41,22 @@ namespace Squidex.Domain.Apps.Entities.Schemas.Commands
if (Scripts != null) if (Scripts != null)
{ {
schema = schema.ConfigureScripts(Scripts); schema = schema.SetScripts(Scripts);
} }
if (PreviewUrls != null) if (PreviewUrls != null)
{ {
schema = schema.ConfigurePreviewUrls(PreviewUrls); schema = schema.SetPreviewUrls(PreviewUrls);
} }
if (FieldsInLists != null) if (FieldsInLists != null)
{ {
schema = schema.ConfigureFieldsInLists(FieldsInLists); schema = schema.SetFieldsInLists(FieldsInLists);
} }
if (FieldsInReferences != null) if (FieldsInReferences != null)
{ {
schema = schema.ConfigureFieldsInReferences(FieldsInReferences); schema = schema.SetFieldsInReferences(FieldsInReferences);
} }
if (!string.IsNullOrWhiteSpace(Category)) if (!string.IsNullOrWhiteSpace(Category))

8
backend/src/Squidex.Domain.Apps.Entities/Schemas/State/SchemaState.cs

@ -76,12 +76,12 @@ namespace Squidex.Domain.Apps.Entities.Schemas.State
{ {
if (e.FieldsInLists != null) if (e.FieldsInLists != null)
{ {
SchemaDef = SchemaDef.ConfigureFieldsInLists(e.FieldsInLists); SchemaDef = SchemaDef.SetFieldsInLists(e.FieldsInLists);
} }
if (e.FieldsInReferences != null) if (e.FieldsInReferences != null)
{ {
SchemaDef = SchemaDef.ConfigureFieldsInReferences(e.FieldsInReferences); SchemaDef = SchemaDef.SetFieldsInReferences(e.FieldsInReferences);
} }
break; break;
@ -96,14 +96,14 @@ namespace Squidex.Domain.Apps.Entities.Schemas.State
case SchemaPreviewUrlsConfigured e: case SchemaPreviewUrlsConfigured e:
{ {
SchemaDef = SchemaDef.ConfigurePreviewUrls(e.PreviewUrls); SchemaDef = SchemaDef.SetPreviewUrls(e.PreviewUrls);
break; break;
} }
case SchemaScriptsConfigured e: case SchemaScriptsConfigured e:
{ {
SchemaDef = SchemaDef.ConfigureScripts(e.Scripts); SchemaDef = SchemaDef.SetScripts(e.Scripts);
break; break;
} }

54
backend/tests/Squidex.Domain.Apps.Core.Tests/Model/Schemas/SchemaTests.cs

@ -258,8 +258,8 @@ namespace Squidex.Domain.Apps.Core.Model.Schemas
var schema_1 = schema_0 var schema_1 = schema_0
.AddField(field) .AddField(field)
.ConfigureFieldsInLists(field.Name) .SetFieldsInLists(field.Name)
.ConfigureFieldsInReferences(field.Name); .SetFieldsInReferences(field.Name);
var schema_2 = schema_1.DeleteField(1); var schema_2 = schema_1.DeleteField(1);
Assert.Empty(schema_2.FieldsById); Assert.Empty(schema_2.FieldsById);
@ -356,19 +356,30 @@ namespace Squidex.Domain.Apps.Core.Model.Schemas
[Fact] [Fact]
public void Should_set_list_fields() public void Should_set_list_fields()
{ {
var schema_1 = schema_0.ConfigureFieldsInLists("2"); var schema_1 = schema_0.SetFieldsInLists("2");
var schema_2 = schema_1.ConfigureFieldsInLists("2"); var schema_2 = schema_1.SetFieldsInLists("2");
Assert.Equal(new[] { "2" }, schema_1.FieldsInLists); Assert.Equal(new[] { "2" }, schema_1.FieldsInLists);
Assert.Equal(new[] { "2" }, schema_2.FieldsInLists); Assert.Equal(new[] { "2" }, schema_2.FieldsInLists);
Assert.Same(schema_1, schema_2); Assert.Same(schema_1, schema_2);
} }
[Fact]
public void Should_also_set_list_fields_when_reordered()
{
var schema_1 = schema_0.SetFieldsInLists("2", "1");
var schema_2 = schema_1.SetFieldsInLists("1", "2");
Assert.Equal(new[] { "2", "1" }, schema_1.FieldsInLists);
Assert.Equal(new[] { "1", "2" }, schema_2.FieldsInLists);
Assert.NotSame(schema_1, schema_2);
}
[Fact] [Fact]
public void Should_set_reference_fields() public void Should_set_reference_fields()
{ {
var schema_1 = schema_0.ConfigureFieldsInReferences("2"); var schema_1 = schema_0.SetFieldsInReferences("2");
var schema_2 = schema_1.ConfigureFieldsInReferences("2"); var schema_2 = schema_1.SetFieldsInReferences("2");
Assert.Equal(new[] { "2" }, schema_1.FieldsInReferences); Assert.Equal(new[] { "2" }, schema_1.FieldsInReferences);
Assert.Equal(new[] { "2" }, schema_2.FieldsInReferences); Assert.Equal(new[] { "2" }, schema_2.FieldsInReferences);
@ -376,7 +387,18 @@ namespace Squidex.Domain.Apps.Core.Model.Schemas
} }
[Fact] [Fact]
public void Should_configure_scripts() public void Should_also_set_reference_fields_when_reordered()
{
var schema_1 = schema_0.SetFieldsInReferences("2", "1");
var schema_2 = schema_1.SetFieldsInReferences("1", "2");
Assert.Equal(new[] { "2", "1" }, schema_1.FieldsInReferences);
Assert.Equal(new[] { "1", "2" }, schema_2.FieldsInReferences);
Assert.NotSame(schema_1, schema_2);
}
[Fact]
public void Should_set_scripts()
{ {
var scripts1 = new SchemaScripts var scripts1 = new SchemaScripts
{ {
@ -387,8 +409,8 @@ namespace Squidex.Domain.Apps.Core.Model.Schemas
Query = "<query-script>" Query = "<query-script>"
}; };
var schema_1 = schema_0.ConfigureScripts(scripts1); var schema_1 = schema_0.SetScripts(scripts1);
var schema_2 = schema_1.ConfigureScripts(scripts2); var schema_2 = schema_1.SetScripts(scripts2);
Assert.Equal("<query-script>", schema_1.Scripts.Query); Assert.Equal("<query-script>", schema_1.Scripts.Query);
@ -398,7 +420,7 @@ namespace Squidex.Domain.Apps.Core.Model.Schemas
} }
[Fact] [Fact]
public void Should_configure_preview_urls() public void Should_set_preview_urls()
{ {
var urls1 = new Dictionary<string, string> var urls1 = new Dictionary<string, string>
{ {
@ -409,8 +431,8 @@ namespace Squidex.Domain.Apps.Core.Model.Schemas
["web"] = "Url" ["web"] = "Url"
}; };
var schema_1 = schema_0.ConfigurePreviewUrls(urls1); var schema_1 = schema_0.SetPreviewUrls(urls1);
var schema_2 = schema_1.ConfigurePreviewUrls(urls2); var schema_2 = schema_1.SetPreviewUrls(urls2);
Assert.Equal("Url", schema_1.PreviewUrls["web"]); Assert.Equal("Url", schema_1.PreviewUrls["web"]);
@ -425,13 +447,13 @@ namespace Squidex.Domain.Apps.Core.Model.Schemas
var schemaSource = var schemaSource =
TestUtils.MixedSchema(true) TestUtils.MixedSchema(true)
.ChangeCategory("Category") .ChangeCategory("Category")
.ConfigureFieldsInLists("field2") .SetFieldsInLists("field2")
.ConfigureFieldsInReferences("field1") .SetFieldsInReferences("field1")
.ConfigurePreviewUrls(new Dictionary<string, string> .SetPreviewUrls(new Dictionary<string, string>
{ {
["web"] = "Url" ["web"] = "Url"
}) })
.ConfigureScripts(new SchemaScripts .SetScripts(new SchemaScripts
{ {
Create = "<create-script>" Create = "<create-script>"
}); });

12
backend/tests/Squidex.Domain.Apps.Core.Tests/Operations/EventSynchronization/SchemaSynchronizerTests.cs

@ -73,7 +73,7 @@ namespace Squidex.Domain.Apps.Core.Operations.EventSynchronization
new Schema("source"); new Schema("source");
var targetSchema = var targetSchema =
new Schema("target").ConfigureScripts(scripts); new Schema("target").SetScripts(scripts);
var events = sourceSchema.Synchronize(targetSchema, idGenerator); var events = sourceSchema.Synchronize(targetSchema, idGenerator);
@ -95,7 +95,7 @@ namespace Squidex.Domain.Apps.Core.Operations.EventSynchronization
var targetSchema = var targetSchema =
new Schema("target") new Schema("target")
.ConfigurePreviewUrls(previewUrls); .SetPreviewUrls(previewUrls);
var events = sourceSchema.Synchronize(targetSchema, idGenerator); var events = sourceSchema.Synchronize(targetSchema, idGenerator);
@ -143,11 +143,11 @@ namespace Squidex.Domain.Apps.Core.Operations.EventSynchronization
{ {
var sourceSchema = var sourceSchema =
new Schema("source") new Schema("source")
.ConfigureFieldsInLists("1", "2"); .SetFieldsInLists("1", "2");
var targetSchema = var targetSchema =
new Schema("target") new Schema("target")
.ConfigureFieldsInLists("2", "1"); .SetFieldsInLists("2", "1");
var events = sourceSchema.Synchronize(targetSchema, idGenerator); var events = sourceSchema.Synchronize(targetSchema, idGenerator);
@ -161,11 +161,11 @@ namespace Squidex.Domain.Apps.Core.Operations.EventSynchronization
{ {
var sourceSchema = var sourceSchema =
new Schema("source") new Schema("source")
.ConfigureFieldsInReferences("1", "2"); .SetFieldsInReferences("1", "2");
var targetSchema = var targetSchema =
new Schema("target") new Schema("target")
.ConfigureFieldsInReferences("2", "1"); .SetFieldsInReferences("2", "1");
var events = sourceSchema.Synchronize(targetSchema, idGenerator); var events = sourceSchema.Synchronize(targetSchema, idGenerator);

2
backend/tests/Squidex.Domain.Apps.Core.Tests/Operations/ExtractReferenceIds/ReferenceFormattingTests.cs

@ -31,7 +31,7 @@ namespace Squidex.Domain.Apps.Core.Operations.ExtractReferenceIds
.AddString(2, "ref2", Partitioning.Invariant, .AddString(2, "ref2", Partitioning.Invariant,
new StringFieldProperties()) new StringFieldProperties())
.AddString(3, "non-ref", Partitioning.Invariant) .AddString(3, "non-ref", Partitioning.Invariant)
.ConfigureFieldsInReferences("ref1", "ref2"); .SetFieldsInReferences("ref1", "ref2");
var formatted = data.FormatReferences(schema, languages); var formatted = data.FormatReferences(schema, languages);

2
backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentDomainObjectTests.cs

@ -91,7 +91,7 @@ namespace Squidex.Domain.Apps.Entities.Contents
new NumberFieldProperties { IsRequired = true }) new NumberFieldProperties { IsRequired = true })
.AddNumber(2, "my-field2", Partitioning.Invariant, .AddNumber(2, "my-field2", Partitioning.Invariant,
new NumberFieldProperties { IsRequired = false }) new NumberFieldProperties { IsRequired = false })
.ConfigureScripts(scripts); .SetScripts(scripts);
schema = Mocks.Schema(AppNamedId, SchemaNamedId, schemaDef); schema = Mocks.Schema(AppNamedId, SchemaNamedId, schemaDef);

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

@ -88,7 +88,7 @@ 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"))
.ConfigureScripts(new SchemaScripts { Query = "<query-script>" }); .SetScripts(new SchemaScripts { Query = "<query-script>" });
schema = Mocks.Schema(appId, schemaId, schemaDef); schema = Mocks.Schema(appId, schemaId, schemaDef);

2
backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/Queries/ContentQueryServiceTests.cs

@ -66,7 +66,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.Queries
var schemaDef = var schemaDef =
new Schema(schemaId.Name) new Schema(schemaId.Name)
.ConfigureScripts(new SchemaScripts { Query = "<query-script>" }); .SetScripts(new SchemaScripts { Query = "<query-script>" });
schema = Mocks.Schema(appId, schemaId, schemaDef); schema = Mocks.Schema(appId, schemaId, schemaDef);

2
backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/Queries/ResolveAssetsTests.cs

@ -54,7 +54,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.Queries
MinItems = 1, MinItems = 1,
MaxItems = 1 MaxItems = 1
}) })
.ConfigureFieldsInLists("asset1", "asset2"); .SetFieldsInLists("asset1", "asset2");
A.CallTo(() => assetUrlGenerator.GenerateUrl(A<string>.Ignored)) A.CallTo(() => assetUrlGenerator.GenerateUrl(A<string>.Ignored))
.ReturnsLazily(new Func<string, string>(id => $"url/to/{id}")); .ReturnsLazily(new Func<string, string>(id => $"url/to/{id}"));

4
backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/Queries/ResolveReferencesTests.cs

@ -45,7 +45,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.Queries
new StringFieldProperties()) new StringFieldProperties())
.AddNumber(2, "number", Partitioning.Invariant, .AddNumber(2, "number", Partitioning.Invariant,
new NumberFieldProperties()) new NumberFieldProperties())
.ConfigureFieldsInReferences("name", "number"); .SetFieldsInReferences("name", "number");
var schemaDef = var schemaDef =
new Schema(schemaId.Name) new Schema(schemaId.Name)
@ -63,7 +63,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.Queries
MaxItems = 1, MaxItems = 1,
SchemaId = refSchemaId2.Id SchemaId = refSchemaId2.Id
}) })
.ConfigureFieldsInLists("ref1", "ref2"); .SetFieldsInLists("ref1", "ref2");
schemaProvider = x => schemaProvider = x =>
{ {

8
backend/tests/Squidex.Domain.Apps.Entities.Tests/Schemas/SchemaCommandsTests.cs

@ -60,13 +60,13 @@ namespace Squidex.Domain.Apps.Entities.Schemas
}) })
.HideField(1).DisableField(1).LockField(1) .HideField(1).DisableField(1).LockField(1)
.ChangeCategory("myCategory") .ChangeCategory("myCategory")
.ConfigureFieldsInLists(new FieldNames("meta.id", "myString")) .SetFieldsInLists(new FieldNames("meta.id", "myString"))
.ConfigureFieldsInReferences(new FieldNames("myString")) .SetFieldsInReferences(new FieldNames("myString"))
.ConfigureScripts(new SchemaScripts .SetScripts(new SchemaScripts
{ {
Change = "change-script" Change = "change-script"
}) })
.ConfigurePreviewUrls(new Dictionary<string, string> .SetPreviewUrls(new Dictionary<string, string>
{ {
["mobile"] = "http://mobile" ["mobile"] = "http://mobile"
}) })

Loading…
Cancel
Save