Browse Source

Schema synchronizer fixed.

pull/419/head
Sebastian Stehle 6 years ago
parent
commit
8b2670e04d
  1. 12
      src/Squidex.Domain.Apps.Core.Operations/EventSynchronization/SchemaSynchronizer.cs
  2. 5
      src/Squidex/Areas/Api/Controllers/Schemas/Models/FieldPropertiesDto.cs
  3. 23
      tests/Squidex.Domain.Apps.Core.Tests/Operations/EventSynchronization/SchemaSynchronizerTests.cs

12
src/Squidex.Domain.Apps.Core.Operations/EventSynchronization/SchemaSynchronizer.cs

@ -65,7 +65,7 @@ namespace Squidex.Domain.Apps.Core.EventSynchronization
E(new SchemaUnpublished());
}
var events = SyncFields(source.FieldCollection, target.FieldCollection, serializer, idGenerator, null, options);
var events = SyncFields(source.FieldCollection, target.FieldCollection, serializer, idGenerator, CanUpdateRoot, null, options);
foreach (var @event in events)
{
@ -79,6 +79,7 @@ namespace Squidex.Domain.Apps.Core.EventSynchronization
FieldCollection<T> target,
IJsonSerializer serializer,
Func<long> idGenerator,
Func<T, T, bool> canUpdate,
NamedId<long> parentId, SchemaSynchronizationOptions options) where T : class, IField
{
FieldEvent E(FieldEvent @event)
@ -119,7 +120,7 @@ namespace Squidex.Domain.Apps.Core.EventSynchronization
id = sourceField.NamedId();
if (CanUpdate(sourceField, targetField))
if (canUpdate(sourceField, targetField))
{
if (!sourceField.RawProperties.EqualsJson(targetField.RawProperties, serializer))
{
@ -186,7 +187,7 @@ namespace Squidex.Domain.Apps.Core.EventSynchronization
{
var fields = ((IArrayField)sourceField)?.FieldCollection ?? FieldCollection<NestedField>.Empty;
var events = SyncFields(fields, targetArrayField.FieldCollection, serializer, idGenerator, id, options);
var events = SyncFields(fields, targetArrayField.FieldCollection, serializer, idGenerator, CanUpdate, id, options);
foreach (var @event in events)
{
@ -207,6 +208,11 @@ namespace Squidex.Domain.Apps.Core.EventSynchronization
}
}
private static bool CanUpdateRoot(IRootField source, IRootField target)
{
return CanUpdate(source, target) && source.Partitioning == target.Partitioning;
}
private static bool CanUpdate(IField source, IField target)
{
return !source.IsLocked && source.Name == target.Name && source.RawProperties.TypeEquals(target.RawProperties);

5
src/Squidex/Areas/Api/Controllers/Schemas/Models/FieldPropertiesDto.cs

@ -57,11 +57,6 @@ namespace Squidex.Areas.Api.Controllers.Schemas.Models
/// </summary>
public string EditorUrl { get; set; }
/// <summary>
/// Gets the partitioning of the language, e.g. invariant or language.
/// </summary>
public string Partitioning { get; set; }
public abstract FieldProperties ToProperties();
public static Type[] Subtypes()

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

@ -407,7 +407,7 @@ namespace Squidex.Domain.Apps.Core.Operations.EventSynchronization
}
[Fact]
public void Should_create_events_if_field_recreated()
public void Should_create_events_if_field_type_has_changed()
{
var sourceSchema =
new Schema("source")
@ -427,6 +427,27 @@ namespace Squidex.Domain.Apps.Core.Operations.EventSynchronization
);
}
[Fact]
public void Should_create_events_if_field_partitioning_has_changed()
{
var sourceSchema =
new Schema("source")
.AddString(stringId.Id, stringId.Name, Partitioning.Invariant);
var targetSchema =
new Schema("target")
.AddString(stringId.Id, stringId.Name, Partitioning.Language);
var events = sourceSchema.Synchronize(targetSchema, jsonSerializer, idGenerator);
var createdId = NamedId.Of(50L, stringId.Name);
events.ShouldHaveSameEvents(
new FieldDeleted { FieldId = stringId },
new FieldAdded { FieldId = createdId, Name = stringId.Name, Partitioning = Partitioning.Language.Key, Properties = new StringFieldProperties() }
);
}
[Fact]
public void Should_create_events_if_nested_field_created()
{

Loading…
Cancel
Save