diff --git a/src/Squidex.Domain.Apps.Core/Contents/IdContentData.cs b/src/Squidex.Domain.Apps.Core/Contents/IdContentData.cs index 495621ef4..99fe99242 100644 --- a/src/Squidex.Domain.Apps.Core/Contents/IdContentData.cs +++ b/src/Squidex.Domain.Apps.Core/Contents/IdContentData.cs @@ -39,7 +39,7 @@ namespace Squidex.Domain.Apps.Core.Contents return Clean(this, new IdContentData()); } - public IdContentData AddField(long id, ContentFieldData data) + public IdContentData Add(long id, ContentFieldData data) { Guard.GreaterThan(id, 0, nameof(id)); diff --git a/src/Squidex.Domain.Apps.Core/Contents/NamedContentData.cs b/src/Squidex.Domain.Apps.Core/Contents/NamedContentData.cs index 35c4047be..129e7fe15 100644 --- a/src/Squidex.Domain.Apps.Core/Contents/NamedContentData.cs +++ b/src/Squidex.Domain.Apps.Core/Contents/NamedContentData.cs @@ -34,7 +34,7 @@ namespace Squidex.Domain.Apps.Core.Contents return Clean(this, new NamedContentData()); } - public NamedContentData AddField(string name, ContentFieldData data) + public NamedContentData Add(string name, ContentFieldData data) { Guard.NotNullOrEmpty(name, nameof(name)); diff --git a/src/Squidex.Domain.Apps.Core/Schemas/Schema.cs b/src/Squidex.Domain.Apps.Core/Schemas/Schema.cs index ac34bf838..649195cdc 100644 --- a/src/Squidex.Domain.Apps.Core/Schemas/Schema.cs +++ b/src/Squidex.Domain.Apps.Core/Schemas/Schema.cs @@ -16,7 +16,7 @@ using Squidex.Infrastructure; namespace Squidex.Domain.Apps.Core.Schemas { - public sealed class Schema : CloneableBase + public sealed class Schema { private readonly string name; private readonly SchemaProperties properties; @@ -116,11 +116,6 @@ namespace Squidex.Domain.Apps.Core.Schemas return UpdateField(fieldId, field => field.Show()); } - public Schema RenameField(long fieldId, string newName) - { - return UpdateField(fieldId, field => field.Rename(newName)); - } - public Schema Publish() { return new Schema(name, true, properties, fields); @@ -133,38 +128,35 @@ namespace Squidex.Domain.Apps.Core.Schemas public Schema DeleteField(long fieldId) { - return new Schema(name, isPublished, properties, fields.Where(x => x.Id != fieldId).ToImmutableList()); + var newFields = fields.Where(x => x.Id != fieldId).ToImmutableList(); + + return new Schema(name, isPublished, properties, newFields); } - public Schema ReorderFields(List ids) + public Schema UpdateField(long fieldId, Func updater) { - Guard.NotNull(ids, nameof(ids)); - - if (ids.Count != fields.Count || ids.Any(x => !fieldsById.ContainsKey(x))) - { - throw new ArgumentException("Ids must cover all fields.", nameof(ids)); - } + Guard.NotNull(updater, nameof(updater)); - var newFields = fields.OrderBy(f => ids.IndexOf(f.Id)).ToImmutableList(); + var newFields = fields.Select(f => f.Id == fieldId ? updater(f) ?? f : f).ToImmutableList(); return new Schema(name, isPublished, properties, newFields); } - public Schema UpdateField(long fieldId, Func updater) + public Schema ReorderFields(List ids) { - Guard.NotNull(updater, nameof(updater)); + Guard.NotNull(ids, nameof(ids)); - if (!fieldsById.TryGetValue(fieldId, out var field)) + if (ids.Count != fields.Count || ids.Any(x => !fieldsById.ContainsKey(x))) { - throw new DomainObjectNotFoundException(fieldId.ToString(), "Fields", typeof(Field)); + throw new ArgumentException("Ids must cover all fields.", nameof(ids)); } - var newField = updater(field); + var newFields = fields.OrderBy(f => ids.IndexOf(f.Id)).ToImmutableList(); - return AddOrUpdateField(newField); + return new Schema(name, isPublished, properties, newFields); } - public Schema AddOrUpdateField(Field field) + public Schema Add(Field field) { Guard.NotNull(field, nameof(field)); diff --git a/src/Squidex.Domain.Apps.Events/Schemas/Utils/SchemaEventDispatcher.cs b/src/Squidex.Domain.Apps.Events/Schemas/Utils/SchemaEventDispatcher.cs index 528e3b17a..0bae7adfa 100644 --- a/src/Squidex.Domain.Apps.Events/Schemas/Utils/SchemaEventDispatcher.cs +++ b/src/Squidex.Domain.Apps.Events/Schemas/Utils/SchemaEventDispatcher.cs @@ -46,7 +46,7 @@ namespace Squidex.Domain.Apps.Events.Schemas.Utils field = field.Lock(); } - schema = schema.AddOrUpdateField(field); + schema = schema.Add(field); fieldId++; } @@ -62,7 +62,7 @@ namespace Squidex.Domain.Apps.Events.Schemas.Utils Partitioning.Language : Partitioning.Invariant; - return schema.AddOrUpdateField(registry.CreateField(@event.FieldId.Id, @event.Name, partitioning, @event.Properties)); + return schema.Add(registry.CreateField(@event.FieldId.Id, @event.Name, partitioning, @event.Properties)); } public static Schema Dispatch(FieldUpdated @event, Schema schema) diff --git a/src/Squidex.Domain.Apps.Read/Contents/GraphQL/Types/AssetGraphType.cs b/src/Squidex.Domain.Apps.Read/Contents/GraphQL/Types/AssetGraphType.cs index 4d2b04e26..720d15693 100644 --- a/src/Squidex.Domain.Apps.Read/Contents/GraphQL/Types/AssetGraphType.cs +++ b/src/Squidex.Domain.Apps.Read/Contents/GraphQL/Types/AssetGraphType.cs @@ -20,7 +20,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL.Types { Name = "AssetDto"; - AddField(new FieldType + Add(new FieldType { Name = "id", Resolver = Resolver(x => x.Id.ToString()), @@ -28,7 +28,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL.Types Description = "The id of the asset." }); - AddField(new FieldType + Add(new FieldType { Name = "version", Resolver = Resolver(x => x.Version), @@ -36,7 +36,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL.Types Description = "The version of the asset." }); - AddField(new FieldType + Add(new FieldType { Name = "created", Resolver = Resolver(x => x.Created.ToDateTimeUtc()), @@ -44,7 +44,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL.Types Description = "The date and time when the asset has been created." }); - AddField(new FieldType + Add(new FieldType { Name = "createdBy", Resolver = Resolver(x => x.CreatedBy.ToString()), @@ -52,7 +52,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL.Types Description = "The user that has created the asset." }); - AddField(new FieldType + Add(new FieldType { Name = "lastModified", Resolver = Resolver(x => x.LastModified.ToDateTimeUtc()), @@ -60,7 +60,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL.Types Description = "The date and time when the asset has been modified last." }); - AddField(new FieldType + Add(new FieldType { Name = "lastModifiedBy", Resolver = Resolver(x => x.LastModifiedBy.ToString()), @@ -68,7 +68,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL.Types Description = "The user that has updated the asset last." }); - AddField(new FieldType + Add(new FieldType { Name = "mimeType", Resolver = Resolver(x => x.MimeType), @@ -76,7 +76,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL.Types Description = "The mime type." }); - AddField(new FieldType + Add(new FieldType { Name = "url", Resolver = context.ResolveAssetUrl(), @@ -84,7 +84,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL.Types Description = "The url to the asset." }); - AddField(new FieldType + Add(new FieldType { Name = "thumbnailUrl", Resolver = context.ResolveAssetThumbnailUrl(), @@ -92,7 +92,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL.Types Description = "The thumbnail url to the asset." }); - AddField(new FieldType + Add(new FieldType { Name = "fileName", Resolver = Resolver(x => x.FileName), @@ -100,7 +100,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL.Types Description = "The file name." }); - AddField(new FieldType + Add(new FieldType { Name = "fileType", Resolver = Resolver(x => x.FileName.FileType()), @@ -108,7 +108,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL.Types Description = "The file type." }); - AddField(new FieldType + Add(new FieldType { Name = "fileSize", Resolver = Resolver(x => x.FileSize), @@ -116,7 +116,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL.Types Description = "The size of the file in bytes." }); - AddField(new FieldType + Add(new FieldType { Name = "fileVersion", Resolver = Resolver(x => x.FileVersion), @@ -124,7 +124,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL.Types Description = "The version of the file." }); - AddField(new FieldType + Add(new FieldType { Name = "isImage", Resolver = Resolver(x => x.IsImage), @@ -132,7 +132,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL.Types Description = "Determines of the created file is an image." }); - AddField(new FieldType + Add(new FieldType { Name = "pixelWidth", Resolver = Resolver(x => x.PixelWidth), @@ -140,7 +140,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL.Types Description = "The width of the image in pixels if the asset is an image." }); - AddField(new FieldType + Add(new FieldType { Name = "pixelHeight", Resolver = Resolver(x => x.PixelHeight), @@ -150,7 +150,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL.Types if (context.CanGenerateAssetSourceUrl) { - AddField(new FieldType + Add(new FieldType { Name = "sourceUrl", Resolver = context.ResolveAssetSourceUrl(), diff --git a/src/Squidex.Domain.Apps.Read/Contents/GraphQL/Types/ContentDataGraphType.cs b/src/Squidex.Domain.Apps.Read/Contents/GraphQL/Types/ContentDataGraphType.cs index acfcf32d9..be397cf01 100644 --- a/src/Squidex.Domain.Apps.Read/Contents/GraphQL/Types/ContentDataGraphType.cs +++ b/src/Squidex.Domain.Apps.Read/Contents/GraphQL/Types/ContentDataGraphType.cs @@ -40,7 +40,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL.Types foreach (var partitionItem in partition) { - fieldGraphType.AddField(new FieldType + fieldGraphType.Add(new FieldType { Name = partitionItem.Key, Resolver = fieldInfo.Resolver, @@ -53,7 +53,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL.Types var fieldResolver = new FuncFieldResolver(c => c.Source.GetOrDefault(field.Name)); - AddField(new FieldType + Add(new FieldType { Name = field.Name.ToCamelCase(), Resolver = fieldResolver, diff --git a/src/Squidex.Domain.Apps.Read/Contents/GraphQL/Types/ContentGraphType.cs b/src/Squidex.Domain.Apps.Read/Contents/GraphQL/Types/ContentGraphType.cs index 93019e19d..f1935f213 100644 --- a/src/Squidex.Domain.Apps.Read/Contents/GraphQL/Types/ContentGraphType.cs +++ b/src/Squidex.Domain.Apps.Read/Contents/GraphQL/Types/ContentGraphType.cs @@ -32,7 +32,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL.Types { var schemaName = schema.SchemaDef.Properties.Label.WithFallback(schema.Name); - AddField(new FieldType + Add(new FieldType { Name = "id", Resolver = Resolver(x => x.Id.ToString()), @@ -40,7 +40,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL.Types Description = $"The id of the {schemaName} content." }); - AddField(new FieldType + Add(new FieldType { Name = "version", Resolver = Resolver(x => x.Version), @@ -48,7 +48,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL.Types Description = $"The version of the {schemaName} content." }); - AddField(new FieldType + Add(new FieldType { Name = "created", Resolver = Resolver(x => x.Created.ToDateTimeUtc()), @@ -56,7 +56,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL.Types Description = $"The date and time when the {schemaName} content has been created." }); - AddField(new FieldType + Add(new FieldType { Name = "createdBy", Resolver = Resolver(x => x.CreatedBy.ToString()), @@ -64,7 +64,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL.Types Description = $"The user that has created the {schemaName} content." }); - AddField(new FieldType + Add(new FieldType { Name = "lastModified", Resolver = Resolver(x => x.LastModified.ToDateTimeUtc()), @@ -72,7 +72,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL.Types Description = $"The date and time when the {schemaName} content has been modified last." }); - AddField(new FieldType + Add(new FieldType { Name = "lastModifiedBy", Resolver = Resolver(x => x.LastModifiedBy.ToString()), @@ -80,7 +80,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL.Types Description = $"The user that has updated the {schemaName} content last." }); - AddField(new FieldType + Add(new FieldType { Name = "url", Resolver = context.ResolveContentUrl(schema), @@ -92,7 +92,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL.Types if (dataType.Fields.Any()) { - AddField(new FieldType + Add(new FieldType { Name = "data", Resolver = Resolver(x => x.Data), diff --git a/src/Squidex.Domain.Apps.Read/Contents/GraphQL/Types/ContentQueryGraphType.cs b/src/Squidex.Domain.Apps.Read/Contents/GraphQL/Types/ContentQueryGraphType.cs index b0e3fb5ba..13c20f8c8 100644 --- a/src/Squidex.Domain.Apps.Read/Contents/GraphQL/Types/ContentQueryGraphType.cs +++ b/src/Squidex.Domain.Apps.Read/Contents/GraphQL/Types/ContentQueryGraphType.cs @@ -37,7 +37,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL.Types private void AddAssetFind(IGraphQLContext graphQLContext) { - AddField(new FieldType + Add(new FieldType { Name = "findAsset", Arguments = new QueryArguments @@ -63,7 +63,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL.Types private void AddContentFind(ISchemaEntity schema, IGraphType schemaType, string schemaName) { - AddField(new FieldType + Add(new FieldType { Name = $"find{schema.Name.ToPascalCase()}Content", Arguments = new QueryArguments @@ -89,7 +89,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL.Types private void AddAssetsQuery(IGraphQLContext graphQLContext) { - AddField(new FieldType + Add(new FieldType { Name = "queryAssets", Arguments = new QueryArguments @@ -130,7 +130,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL.Types private void AddContentQuery(ISchemaEntity schema, IGraphType schemaType, string schemaName) { - AddField(new FieldType + Add(new FieldType { Name = $"query{schema.Name.ToPascalCase()}Contents", Arguments = new QueryArguments diff --git a/src/Squidex.Domain.Apps.Write/Schemas/Commands/AddField.cs b/src/Squidex.Domain.Apps.Write/Schemas/Commands/AddField.cs index 0bcfb726c..d721119e4 100644 --- a/src/Squidex.Domain.Apps.Write/Schemas/Commands/AddField.cs +++ b/src/Squidex.Domain.Apps.Write/Schemas/Commands/AddField.cs @@ -1,5 +1,5 @@ // ========================================================================== -// AddField.cs +// Add.cs // Squidex Headless CMS // ========================================================================== // Copyright (c) Squidex Group @@ -13,7 +13,7 @@ using Squidex.Infrastructure; namespace Squidex.Domain.Apps.Write.Schemas.Commands { - public sealed class AddField : FieldCommand, IValidatable + public sealed class Add : FieldCommand, IValidatable { public string Name { get; set; } diff --git a/src/Squidex.Domain.Apps.Write/Schemas/Guards/SchemaFieldGuard.cs b/src/Squidex.Domain.Apps.Write/Schemas/Guards/SchemaFieldGuard.cs new file mode 100644 index 000000000..03834c62e --- /dev/null +++ b/src/Squidex.Domain.Apps.Write/Schemas/Guards/SchemaFieldGuard.cs @@ -0,0 +1,277 @@ +// ========================================================================== +// SchemaFieldGuard.cs +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex Group +// All rights reserved. +// ========================================================================== + +using System.Collections.Generic; +using Squidex.Domain.Apps.Core.Schemas; +using Squidex.Infrastructure; + +namespace Squidex.Domain.Apps.Write.Schemas.Guards +{ + public static class SchemaFieldGuard + { + public static void GuardValidSchemaFieldName(string name) + { + if (!name.IsSlug()) + { + var error = new ValidationError("Name must be a valid slug", "Name"); + + throw new ValidationException("Cannot add a new field.", error); + } + } + + public static void GuardCanDelete(Schema schema, long fieldId) + { + var field = GetFieldOrThrow(schema, fieldId); + + if (field.IsLocked) + { + throw new DomainException("Schema field is locked."); + } + } + + public static void GuardCanHide(Schema schema, long fieldId) + { + var field = GetFieldOrThrow(schema, fieldId); + + if (field.IsHidden) + { + throw new DomainException("Schema field is already hidden."); + } + } + + public static void GuardCanShow(Schema schema, long fieldId) + { + var field = GetFieldOrThrow(schema, fieldId); + + if (!field.IsHidden) + { + throw new DomainException("Schema field is already visible."); + } + } + + public static void GuardCanDisable(Schema schema, long fieldId) + { + var field = GetFieldOrThrow(schema, fieldId); + + if (field.IsDisabled) + { + throw new DomainException("Schema field is already disabled."); + } + } + + public static void GuardCanEnable(Schema schema, long fieldId) + { + var field = GetFieldOrThrow(schema, fieldId); + + if (!field.IsDisabled) + { + throw new DomainException("Schema field is already enabled."); + } + } + + public static void GuardCanLock(Schema schema, long fieldId) + { + var field = GetFieldOrThrow(schema, fieldId); + + if (field.IsLocked) + { + throw new DomainException("Schema field is already locked."); + } + } + + private static Field GetFieldOrThrow(Schema schema, long fieldId) + { + if (!schema.FieldsById.TryGetValue(fieldId, out var field)) + { + throw new DomainObjectNotFoundException(fieldId.ToString(), "Fields", typeof(Field)); + } + + return field; + } + + private static IEnumerable ValidateProperties(FieldProperties properties) + { + switch (properties) + { + case AssetsFieldProperties a: + { + if (a.MaxItems.HasValue && a.MinItems.HasValue && a.MinItems.Value >= a.MaxItems.Value) + { + yield return new ValidationError("Max items must be greater than min items", + nameof(a.MinItems), + nameof(a.MaxItems)); + } + + break; + } + + case BooleanFieldProperties b: + { + if (!b.Editor.IsEnumValue()) + { + yield return new ValidationError("Editor is not a valid value", + nameof(b.Editor)); + } + + break; + } + + case GeolocationFieldProperties g: + { + if (!g.Editor.IsEnumValue()) + { + yield return new ValidationError("Editor is not a valid value", + nameof(g.Editor)); + } + + break; + } + + case ReferencesFieldProperties r: + { + if (r.MaxItems.HasValue && r.MinItems.HasValue && r.MinItems.Value >= r.MaxItems.Value) + { + yield return new ValidationError("Max items must be greater than min items", + nameof(r.MinItems), + nameof(r.MaxItems)); + } + + break; + } + + case DateTimeFieldProperties d: + { + if (!d.Editor.IsEnumValue()) + { + yield return new ValidationError("Editor is not a valid value", + nameof(d.Editor)); + } + + if (d.DefaultValue.HasValue && d.MinValue.HasValue && d.DefaultValue.Value < d.MinValue.Value) + { + yield return new ValidationError("Default value must be greater than min value", + nameof(d.DefaultValue)); + } + + if (d.DefaultValue.HasValue && d.MaxValue.HasValue && d.DefaultValue.Value > d.MaxValue.Value) + { + yield return new ValidationError("Default value must be less than max value", + nameof(d.DefaultValue)); + } + + if (d.MaxValue.HasValue && d.MinValue.HasValue && d.MinValue.Value >= d.MaxValue.Value) + { + yield return new ValidationError("Max value must be greater than min value", + nameof(d.MinValue), + nameof(d.MaxValue)); + } + + if (d.CalculatedDefaultValue.HasValue) + { + if (!d.CalculatedDefaultValue.Value.IsEnumValue()) + { + yield return new ValidationError("Calculated default value is not valid", + nameof(d.CalculatedDefaultValue)); + } + + if (d.DefaultValue.HasValue) + { + yield return new ValidationError("Calculated default value and default value cannot be used together", + nameof(d.CalculatedDefaultValue), + nameof(d.DefaultValue)); + } + } + + break; + } + + case NumberFieldProperties n: + { + if (!n.Editor.IsEnumValue()) + { + yield return new ValidationError("Editor is not a valid value", + nameof(n.Editor)); + } + + if ((n.Editor == NumberFieldEditor.Radio || n.Editor == NumberFieldEditor.Dropdown) && (n.AllowedValues == null || n.AllowedValues.Count == 0)) + { + yield return new ValidationError("Radio buttons or dropdown list need allowed values", + nameof(n.AllowedValues)); + } + + if (n.DefaultValue.HasValue && n.MinValue.HasValue && n.DefaultValue.Value < n.MinValue.Value) + { + yield return new ValidationError("Default value must be greater than min value", + nameof(n.DefaultValue)); + } + + if (n.DefaultValue.HasValue && n.MaxValue.HasValue && n.DefaultValue.Value > n.MaxValue.Value) + { + yield return new ValidationError("Default value must be less than max value", + nameof(n.DefaultValue)); + } + + if (n.MaxValue.HasValue && n.MinValue.HasValue && n.MinValue.Value >= n.MaxValue.Value) + { + yield return new ValidationError("Max value must be greater than min value", + nameof(n.MinValue), + nameof(n.MaxValue)); + } + + if (n.AllowedValues != null && n.AllowedValues.Count > 0 && (n.MinValue.HasValue || n.MaxValue.HasValue)) + { + yield return new ValidationError("Either allowed values or min and max value can be defined", + nameof(n.AllowedValues), + nameof(n.MinValue), + nameof(n.MaxValue)); + } + + break; + } + + case StringFieldProperties s: + { + if (!s.Editor.IsEnumValue()) + { + yield return new ValidationError("Editor is not a valid value", + nameof(s.Editor)); + } + + if ((s.Editor == StringFieldEditor.Radio || s.Editor == StringFieldEditor.Dropdown) && (s.AllowedValues == null || s.AllowedValues.Count == 0)) + { + yield return new ValidationError("Radio buttons or dropdown list need allowed values", + nameof(s.AllowedValues)); + } + + if (s.Pattern != null && !s.Pattern.IsValidRegex()) + { + yield return new ValidationError("Pattern is not a valid expression", + nameof(s.Pattern)); + } + + if (s.MaxLength.HasValue && s.MinLength.HasValue && s.MinLength.Value >= s.MaxLength.Value) + { + yield return new ValidationError("Max length must be greater than min length", + nameof(s.MinLength), + nameof(s.MaxLength)); + } + + if (s.AllowedValues != null && s.AllowedValues.Count > 0 && (s.MinLength.HasValue || s.MaxLength.HasValue)) + { + yield return new ValidationError("Either allowed values or min and max length can be defined", + nameof(s.AllowedValues), + nameof(s.MinLength), + nameof(s.MaxLength)); + } + + break; + } + } + } + } +} diff --git a/src/Squidex.Domain.Apps.Write/Schemas/Guards/SchemaGuard.cs b/src/Squidex.Domain.Apps.Write/Schemas/Guards/SchemaGuard.cs new file mode 100644 index 000000000..6b1d1f43f --- /dev/null +++ b/src/Squidex.Domain.Apps.Write/Schemas/Guards/SchemaGuard.cs @@ -0,0 +1,42 @@ +// ========================================================================== +// SchemaGuard.cs +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex Group +// All rights reserved. +// ========================================================================== + +using Squidex.Domain.Apps.Core.Schemas; +using Squidex.Infrastructure; + +namespace Squidex.Domain.Apps.Write.Schemas.Guards +{ + public static class SchemaGuard + { + public static void GuardValidSchemaName(string name) + { + if (!name.IsSlug()) + { + var error = new ValidationError("Name must be a valid slug", "Name"); + + throw new ValidationException("Cannot create a new schema", error); + } + } + + public static void GuardCanPublish(Schema schema) + { + if (schema.IsPublished) + { + throw new DomainException("Schema is already published"); + } + } + + public static void GuardCanUnpublish(Schema schema) + { + if (!schema.IsPublished) + { + throw new DomainException("Schema is not published"); + } + } + } +} diff --git a/src/Squidex.Domain.Apps.Write/Schemas/SchemaCommandMiddleware.cs b/src/Squidex.Domain.Apps.Write/Schemas/SchemaCommandMiddleware.cs index 39f9c925e..0e1616a86 100644 --- a/src/Squidex.Domain.Apps.Write/Schemas/SchemaCommandMiddleware.cs +++ b/src/Squidex.Domain.Apps.Write/Schemas/SchemaCommandMiddleware.cs @@ -50,11 +50,11 @@ namespace Squidex.Domain.Apps.Write.Schemas }); } - protected Task On(AddField command, CommandContext context) + protected Task On(Add command, CommandContext context) { return handler.UpdateAsync(context, s => { - s.AddField(command); + s.Add(command); context.Complete(EntityCreatedResult.Create(s.Schema.FieldsById.Values.First(x => x.Name == command.Name).Id, s.Version)); }); diff --git a/src/Squidex.Domain.Apps.Write/Schemas/SchemaDomainObject.cs b/src/Squidex.Domain.Apps.Write/Schemas/SchemaDomainObject.cs index 163d07413..33c924edf 100644 --- a/src/Squidex.Domain.Apps.Write/Schemas/SchemaDomainObject.cs +++ b/src/Squidex.Domain.Apps.Write/Schemas/SchemaDomainObject.cs @@ -144,7 +144,7 @@ namespace Squidex.Domain.Apps.Write.Schemas return this; } - public SchemaDomainObject AddField(AddField command) + public SchemaDomainObject Add(Add command) { Guard.Valid(command, nameof(command), () => $"Cannot add field to schema {Id}"); diff --git a/src/Squidex/Controllers/Api/Schemas/Models/AddFieldDto.cs b/src/Squidex/Controllers/Api/Schemas/Models/AddFieldDto.cs index 5b8672050..27d19ab91 100644 --- a/src/Squidex/Controllers/Api/Schemas/Models/AddFieldDto.cs +++ b/src/Squidex/Controllers/Api/Schemas/Models/AddFieldDto.cs @@ -1,5 +1,5 @@ // ========================================================================== -// AddFieldDto.cs +// AddDto.cs // Squidex Headless CMS // ========================================================================== // Copyright (c) Squidex Group @@ -10,7 +10,7 @@ using System.ComponentModel.DataAnnotations; namespace Squidex.Controllers.Api.Schemas.Models { - public sealed class AddFieldDto + public sealed class AddDto { /// /// The name of the field. Must be unique within the schema. diff --git a/src/Squidex/Controllers/Api/Schemas/SchemaFieldsController.cs b/src/Squidex/Controllers/Api/Schemas/SchemaFieldsController.cs index de164be3b..41e89d600 100644 --- a/src/Squidex/Controllers/Api/Schemas/SchemaFieldsController.cs +++ b/src/Squidex/Controllers/Api/Schemas/SchemaFieldsController.cs @@ -48,9 +48,9 @@ namespace Squidex.Controllers.Api.Schemas [ProducesResponseType(typeof(ErrorDto), 409)] [ProducesResponseType(typeof(ErrorDto), 400)] [ApiCosts(1)] - public async Task PostField(string app, string name, [FromBody] AddFieldDto request) + public async Task PostField(string app, string name, [FromBody] AddDto request) { - var command = new AddField + var command = new Add { Name = request.Name, Partitioning = request.Partitioning, diff --git a/tests/Squidex.Domain.Apps.Core.Tests/ContentEnrichmentTests.cs b/tests/Squidex.Domain.Apps.Core.Tests/ContentEnrichmentTests.cs index fd51c4d45..064c259e0 100644 --- a/tests/Squidex.Domain.Apps.Core.Tests/ContentEnrichmentTests.cs +++ b/tests/Squidex.Domain.Apps.Core.Tests/ContentEnrichmentTests.cs @@ -22,21 +22,21 @@ namespace Squidex.Domain.Apps.Core private readonly LanguagesConfig languagesConfig = LanguagesConfig.Create(Language.DE, Language.EN); private readonly Schema schema = Schema.Create("my-schema", new SchemaProperties()) - .AddOrUpdateField(new JsonField(1, "my-json", Partitioning.Invariant, + .Add(new JsonField(1, "my-json", Partitioning.Invariant, new JsonFieldProperties())) - .AddOrUpdateField(new StringField(2, "my-string", Partitioning.Language, + .Add(new StringField(2, "my-string", Partitioning.Language, new StringFieldProperties { DefaultValue = "en-string" })) - .AddOrUpdateField(new NumberField(3, "my-number", Partitioning.Invariant, + .Add(new NumberField(3, "my-number", Partitioning.Invariant, new NumberFieldProperties { DefaultValue = 123 })) - .AddOrUpdateField(new AssetsField(4, "my-assets", Partitioning.Invariant, + .Add(new AssetsField(4, "my-assets", Partitioning.Invariant, new AssetsFieldProperties())) - .AddOrUpdateField(new BooleanField(5, "my-boolean", Partitioning.Invariant, + .Add(new BooleanField(5, "my-boolean", Partitioning.Invariant, new BooleanFieldProperties { DefaultValue = true })) - .AddOrUpdateField(new DateTimeField(6, "my-datetime", Partitioning.Invariant, + .Add(new DateTimeField(6, "my-datetime", Partitioning.Invariant, new DateTimeFieldProperties { DefaultValue = Now })) - .AddOrUpdateField(new ReferencesField(7, "my-references", Partitioning.Invariant, + .Add(new ReferencesField(7, "my-references", Partitioning.Invariant, new ReferencesFieldProperties { SchemaId = Guid.NewGuid() })) - .AddOrUpdateField(new GeolocationField(8, "my-geolocation", Partitioning.Invariant, + .Add(new GeolocationField(8, "my-geolocation", Partitioning.Invariant, new GeolocationFieldProperties())); [Fact] @@ -44,10 +44,10 @@ namespace Squidex.Domain.Apps.Core { var data = new NamedContentData() - .AddField("my-string", + .Add("my-string", new ContentFieldData() .AddValue("de", "de-string")) - .AddField("my-number", + .Add("my-number", new ContentFieldData() .AddValue("iv", 456)); @@ -70,10 +70,10 @@ namespace Squidex.Domain.Apps.Core var data = new NamedContentData() - .AddField("my-string", + .Add("my-string", new ContentFieldData() .AddValue("de", string.Empty)) - .AddField("my-number", + .Add("my-number", new ContentFieldData() .AddValue("iv", 456)); diff --git a/tests/Squidex.Domain.Apps.Core.Tests/ContentValidationTests.cs b/tests/Squidex.Domain.Apps.Core.Tests/ContentValidationTests.cs index d5dca8567..020b7cd1c 100644 --- a/tests/Squidex.Domain.Apps.Core.Tests/ContentValidationTests.cs +++ b/tests/Squidex.Domain.Apps.Core.Tests/ContentValidationTests.cs @@ -28,7 +28,7 @@ namespace Squidex.Domain.Apps.Core { var data = new NamedContentData() - .AddField("unknown", + .Add("unknown", new ContentFieldData()); await data.ValidateAsync(context, schema, languagesConfig.ToResolver(), errors); @@ -43,11 +43,11 @@ namespace Squidex.Domain.Apps.Core [Fact] public async Task Should_add_error_if_validating_data_with_invalid_field() { - schema = schema.AddOrUpdateField(new NumberField(1, "my-field", Partitioning.Invariant, new NumberFieldProperties { MaxValue = 100 })); + schema = schema.Add(new NumberField(1, "my-field", Partitioning.Invariant, new NumberFieldProperties { MaxValue = 100 })); var data = new NamedContentData() - .AddField("my-field", + .Add("my-field", new ContentFieldData() .SetValue(1000)); @@ -63,11 +63,11 @@ namespace Squidex.Domain.Apps.Core [Fact] public async Task Should_add_error_if_non_localizable_data_field_contains_language() { - schema = schema.AddOrUpdateField(new NumberField(1, "my-field", Partitioning.Invariant)); + schema = schema.Add(new NumberField(1, "my-field", Partitioning.Invariant)); var data = new NamedContentData() - .AddField("my-field", + .Add("my-field", new ContentFieldData() .AddValue("es", 1) .AddValue("it", 1)); @@ -85,7 +85,7 @@ namespace Squidex.Domain.Apps.Core [Fact] public async Task Should_add_error_if_validating_data_with_invalid_localizable_field() { - schema = schema.AddOrUpdateField(new NumberField(1, "my-field", Partitioning.Language, new NumberFieldProperties { IsRequired = true })); + schema = schema.Add(new NumberField(1, "my-field", Partitioning.Language, new NumberFieldProperties { IsRequired = true })); var data = new NamedContentData(); @@ -103,7 +103,7 @@ namespace Squidex.Domain.Apps.Core [Fact] public async Task Should_add_error_if_required_data_field_is_not_in_bag() { - schema = schema.AddOrUpdateField(new NumberField(1, "my-field", Partitioning.Invariant, new NumberFieldProperties { IsRequired = true })); + schema = schema.Add(new NumberField(1, "my-field", Partitioning.Invariant, new NumberFieldProperties { IsRequired = true })); var data = new NamedContentData(); @@ -120,11 +120,11 @@ namespace Squidex.Domain.Apps.Core [Fact] public async Task Should_add_error_if_data_contains_invalid_language() { - schema = schema.AddOrUpdateField(new NumberField(1, "my-field", Partitioning.Language)); + schema = schema.Add(new NumberField(1, "my-field", Partitioning.Language)); var data = new NamedContentData() - .AddField("my-field", + .Add("my-field", new ContentFieldData() .AddValue("de", 1) .AddValue("xx", 1)); @@ -144,11 +144,11 @@ namespace Squidex.Domain.Apps.Core var optionalConfig = LanguagesConfig.Create(Language.ES, Language.IT).Update(Language.IT, true, false, null); - schema = schema.AddOrUpdateField(new StringField(1, "my-field", Partitioning.Language, new StringFieldProperties { IsRequired = true })); + schema = schema.Add(new StringField(1, "my-field", Partitioning.Language, new StringFieldProperties { IsRequired = true })); var data = new NamedContentData() - .AddField("my-field", + .Add("my-field", new ContentFieldData() .AddValue("es", "value")); @@ -160,11 +160,11 @@ namespace Squidex.Domain.Apps.Core [Fact] public async Task Should_add_error_if_data_contains_unsupported_language() { - schema = schema.AddOrUpdateField(new NumberField(1, "my-field", Partitioning.Language)); + schema = schema.Add(new NumberField(1, "my-field", Partitioning.Language)); var data = new NamedContentData() - .AddField("my-field", + .Add("my-field", new ContentFieldData() .AddValue("es", 1) .AddValue("it", 1)); @@ -184,7 +184,7 @@ namespace Squidex.Domain.Apps.Core { var data = new NamedContentData() - .AddField("unknown", + .Add("unknown", new ContentFieldData()); await data.ValidatePartialAsync(context, schema, languagesConfig.ToResolver(), errors); @@ -199,11 +199,11 @@ namespace Squidex.Domain.Apps.Core [Fact] public async Task Should_add_error_if_validating_partial_data_with_invalid_field() { - schema = schema.AddOrUpdateField(new NumberField(1, "my-field", Partitioning.Invariant, new NumberFieldProperties { MaxValue = 100 })); + schema = schema.Add(new NumberField(1, "my-field", Partitioning.Invariant, new NumberFieldProperties { MaxValue = 100 })); var data = new NamedContentData() - .AddField("my-field", + .Add("my-field", new ContentFieldData() .SetValue(1000)); @@ -219,11 +219,11 @@ namespace Squidex.Domain.Apps.Core [Fact] public async Task Should_add_error_if_non_localizable_partial_data_field_contains_language() { - schema = schema.AddOrUpdateField(new NumberField(1, "my-field", Partitioning.Invariant)); + schema = schema.Add(new NumberField(1, "my-field", Partitioning.Invariant)); var data = new NamedContentData() - .AddField("my-field", + .Add("my-field", new ContentFieldData() .AddValue("es", 1) .AddValue("it", 1)); @@ -241,7 +241,7 @@ namespace Squidex.Domain.Apps.Core [Fact] public async Task Should_not_add_error_if_validating_partial_data_with_invalid_localizable_field() { - schema = schema.AddOrUpdateField(new NumberField(1, "my-field", Partitioning.Language, new NumberFieldProperties { IsRequired = true })); + schema = schema.Add(new NumberField(1, "my-field", Partitioning.Language, new NumberFieldProperties { IsRequired = true })); var data = new NamedContentData(); @@ -254,7 +254,7 @@ namespace Squidex.Domain.Apps.Core [Fact] public async Task Should_not_add_error_if_required_partial_data_field_is_not_in_bag() { - schema = schema.AddOrUpdateField(new NumberField(1, "my-field", Partitioning.Invariant, new NumberFieldProperties { IsRequired = true })); + schema = schema.Add(new NumberField(1, "my-field", Partitioning.Invariant, new NumberFieldProperties { IsRequired = true })); var data = new NamedContentData(); @@ -267,11 +267,11 @@ namespace Squidex.Domain.Apps.Core [Fact] public async Task Should_add_error_if_partial_data_contains_invalid_language() { - schema = schema.AddOrUpdateField(new NumberField(1, "my-field", Partitioning.Language)); + schema = schema.Add(new NumberField(1, "my-field", Partitioning.Language)); var data = new NamedContentData() - .AddField("my-field", + .Add("my-field", new ContentFieldData() .AddValue("de", 1) .AddValue("xx", 1)); @@ -288,11 +288,11 @@ namespace Squidex.Domain.Apps.Core [Fact] public async Task Should_add_error_if_partial_data_contains_unsupported_language() { - schema = schema.AddOrUpdateField(new NumberField(1, "my-field", Partitioning.Language)); + schema = schema.Add(new NumberField(1, "my-field", Partitioning.Language)); var data = new NamedContentData() - .AddField("my-field", + .Add("my-field", new ContentFieldData() .AddValue("es", 1) .AddValue("it", 1)); diff --git a/tests/Squidex.Domain.Apps.Core.Tests/Contents/ContentDataTests.cs b/tests/Squidex.Domain.Apps.Core.Tests/Contents/ContentDataTests.cs index 700c39757..fd419649c 100644 --- a/tests/Squidex.Domain.Apps.Core.Tests/Contents/ContentDataTests.cs +++ b/tests/Squidex.Domain.Apps.Core.Tests/Contents/ContentDataTests.cs @@ -22,12 +22,12 @@ namespace Squidex.Domain.Apps.Core.Contents { private readonly Schema schema = Schema.Create("schema", new SchemaProperties()) - .AddOrUpdateField(new NumberField(1, "field1", Partitioning.Language)) - .AddOrUpdateField(new NumberField(2, "field2", Partitioning.Invariant)) - .AddOrUpdateField(new NumberField(3, "field3", Partitioning.Invariant).Hide()) - .AddOrUpdateField(new AssetsField(5, "assets1", Partitioning.Invariant)) - .AddOrUpdateField(new AssetsField(6, "assets2", Partitioning.Invariant)) - .AddOrUpdateField(new JsonField(4, "json", Partitioning.Language)); + .Add(new NumberField(1, "field1", Partitioning.Language)) + .Add(new NumberField(2, "field2", Partitioning.Invariant)) + .Add(new NumberField(3, "field3", Partitioning.Invariant).Hide()) + .Add(new AssetsField(5, "assets1", Partitioning.Invariant)) + .Add(new AssetsField(6, "assets2", Partitioning.Invariant)) + .Add(new JsonField(4, "json", Partitioning.Language)); private readonly LanguagesConfig languagesConfig = LanguagesConfig.Create(Language.EN, Language.DE); [Fact] @@ -35,14 +35,14 @@ namespace Squidex.Domain.Apps.Core.Contents { var input = new NamedContentData() - .AddField("field1", + .Add("field1", new ContentFieldData() .AddValue("en", "en_string") .AddValue("de", "de_string")) - .AddField("field2", + .Add("field2", new ContentFieldData() .AddValue("iv", 3)) - .AddField("invalid", + .Add("invalid", new ContentFieldData() .AddValue("iv", 3)); @@ -50,11 +50,11 @@ namespace Squidex.Domain.Apps.Core.Contents var expected = new IdContentData() - .AddField(1, + .Add(1, new ContentFieldData() .AddValue("en", "en_string") .AddValue("de", "de_string")) - .AddField(2, + .Add(2, new ContentFieldData() .AddValue("iv", 3)); @@ -66,7 +66,7 @@ namespace Squidex.Domain.Apps.Core.Contents { var input = new NamedContentData() - .AddField("json", + .Add("json", new ContentFieldData() .AddValue("en", new JObject()) .AddValue("de", null) @@ -76,7 +76,7 @@ namespace Squidex.Domain.Apps.Core.Contents var expected = new IdContentData() - .AddField(4, + .Add(4, new ContentFieldData() .AddValue("en", "e30=") .AddValue("de", null) @@ -90,14 +90,14 @@ namespace Squidex.Domain.Apps.Core.Contents { var input = new IdContentData() - .AddField(1, + .Add(1, new ContentFieldData() .AddValue("en", "en_string") .AddValue("de", "de_string")) - .AddField(2, + .Add(2, new ContentFieldData() .AddValue("iv", 3)) - .AddField(99, + .Add(99, new ContentFieldData() .AddValue("iv", 3)); @@ -105,11 +105,11 @@ namespace Squidex.Domain.Apps.Core.Contents var expected = new NamedContentData() - .AddField("field1", + .Add("field1", new ContentFieldData() .AddValue("en", "en_string") .AddValue("de", "de_string")) - .AddField("field2", + .Add("field2", new ContentFieldData() .AddValue("iv", 3)); @@ -121,7 +121,7 @@ namespace Squidex.Domain.Apps.Core.Contents { var input = new IdContentData() - .AddField(4, + .Add(4, new ContentFieldData() .AddValue("en", "e30=") .AddValue("de", null) @@ -137,10 +137,10 @@ namespace Squidex.Domain.Apps.Core.Contents { var input = new NamedContentData() - .AddField("field0", + .Add("field0", new ContentFieldData() .AddValue("en", "en_string")) - .AddField("field1", + .Add("field1", new ContentFieldData() .AddValue("en", "en_string") .AddValue("de", "de_string")); @@ -149,7 +149,7 @@ namespace Squidex.Domain.Apps.Core.Contents var expected = new NamedContentData() - .AddField("field1", + .Add("field1", new ContentFieldData() .AddValue("en", "en_string") .AddValue("de", "de_string")); @@ -162,7 +162,7 @@ namespace Squidex.Domain.Apps.Core.Contents { var input = new NamedContentData() - .AddField("field1", + .Add("field1", new ContentFieldData() .AddValue("en", "en_string") .AddValue("de", "de_string") @@ -172,7 +172,7 @@ namespace Squidex.Domain.Apps.Core.Contents var expected = new NamedContentData() - .AddField("field1", + .Add("field1", new ContentFieldData() .AddValue("en", "en_string") .AddValue("de", "de_string")); @@ -185,7 +185,7 @@ namespace Squidex.Domain.Apps.Core.Contents { var input = new NamedContentData() - .AddField("field2", + .Add("field2", new ContentFieldData() .AddValue("de", 2) .AddValue("en", 3)); @@ -194,7 +194,7 @@ namespace Squidex.Domain.Apps.Core.Contents var expected = new NamedContentData() - .AddField("field2", + .Add("field2", new ContentFieldData() .AddValue("iv", 3)); @@ -206,7 +206,7 @@ namespace Squidex.Domain.Apps.Core.Contents { var input = new NamedContentData() - .AddField("field1", + .Add("field1", new ContentFieldData() .AddValue("iv", 3)); @@ -214,7 +214,7 @@ namespace Squidex.Domain.Apps.Core.Contents var expected = new NamedContentData() - .AddField("field1", + .Add("field1", new ContentFieldData() .AddValue("en", 3)); @@ -226,8 +226,8 @@ namespace Squidex.Domain.Apps.Core.Contents { var input = new NamedContentData() - .AddField("field1", null) - .AddField("field2", + .Add("field1", null) + .Add("field2", new ContentFieldData() .AddValue("en", 2) .AddValue("it", null)); @@ -236,7 +236,7 @@ namespace Squidex.Domain.Apps.Core.Contents var expected = new NamedContentData() - .AddField("field2", + .Add("field2", new ContentFieldData() .AddValue("en", 2)); @@ -248,8 +248,8 @@ namespace Squidex.Domain.Apps.Core.Contents { var input = new IdContentData() - .AddField(1, null) - .AddField(2, + .Add(1, null) + .Add(2, new ContentFieldData() .AddValue("en", 2) .AddValue("it", null)); @@ -258,7 +258,7 @@ namespace Squidex.Domain.Apps.Core.Contents var expected = new IdContentData() - .AddField(2, + .Add(2, new ContentFieldData() .AddValue("en", 2)); @@ -270,7 +270,7 @@ namespace Squidex.Domain.Apps.Core.Contents { var input = new NamedContentData() - .AddField("field2", + .Add("field2", new ContentFieldData() .AddValue("de", 2) .AddValue("it", 3)); @@ -279,7 +279,7 @@ namespace Squidex.Domain.Apps.Core.Contents var expected = new NamedContentData() - .AddField("field2", + .Add("field2", new ContentFieldData() .AddValue("iv", 2)); @@ -291,10 +291,10 @@ namespace Squidex.Domain.Apps.Core.Contents { var input = new NamedContentData() - .AddField("field2", + .Add("field2", new ContentFieldData() .AddValue("iv", 5)) - .AddField("field3", + .Add("field3", new ContentFieldData() .AddValue("iv", 2)); @@ -302,7 +302,7 @@ namespace Squidex.Domain.Apps.Core.Contents var expected = new NamedContentData() - .AddField("field2", + .Add("field2", new ContentFieldData() .AddValue("iv", 5)); @@ -314,7 +314,7 @@ namespace Squidex.Domain.Apps.Core.Contents { var data = new NamedContentData() - .AddField("field1", + .Add("field1", new ContentFieldData() .AddValue("iv", 1)); @@ -326,18 +326,18 @@ namespace Squidex.Domain.Apps.Core.Contents { var data = new NamedContentData() - .AddField("field1", + .Add("field1", new ContentFieldData() .AddValue("de", 1) .AddValue("en", 2)) - .AddField("field2", + .Add("field2", new ContentFieldData() .AddValue("de", null) .AddValue("en", 4)) - .AddField("field3", + .Add("field3", new ContentFieldData() .AddValue("en", 6)) - .AddField("field4", + .Add("field4", new ContentFieldData() .AddValue("it", 7)); @@ -362,18 +362,18 @@ namespace Squidex.Domain.Apps.Core.Contents { var data = new NamedContentData() - .AddField("field1", + .Add("field1", new ContentFieldData() .AddValue("de", 1) .AddValue("en", 2)) - .AddField("field2", + .Add("field2", new ContentFieldData() .AddValue("de", null) .AddValue("en", 4)) - .AddField("field3", + .Add("field3", new ContentFieldData() .AddValue("en", 6)) - .AddField("field4", + .Add("field4", new ContentFieldData() .AddValue("it", 7)); @@ -394,32 +394,32 @@ namespace Squidex.Domain.Apps.Core.Contents { var lhs = new NamedContentData() - .AddField("field1", + .Add("field1", new ContentFieldData() .AddValue("iv", 1)) - .AddField("field2", + .Add("field2", new ContentFieldData() .AddValue("de", 2)); var rhs = new NamedContentData() - .AddField("field2", + .Add("field2", new ContentFieldData() .AddValue("en", 3)) - .AddField("field3", + .Add("field3", new ContentFieldData() .AddValue("iv", 4)); var expected = new NamedContentData() - .AddField("field1", + .Add("field1", new ContentFieldData() .AddValue("iv", 1)) - .AddField("field2", + .Add("field2", new ContentFieldData() .AddValue("de", 2) .AddValue("en", 3)) - .AddField("field3", + .Add("field3", new ContentFieldData() .AddValue("iv", 4)); @@ -433,32 +433,32 @@ namespace Squidex.Domain.Apps.Core.Contents { var lhs = new IdContentData() - .AddField(1, + .Add(1, new ContentFieldData() .AddValue("iv", 1)) - .AddField(2, + .Add(2, new ContentFieldData() .AddValue("de", 2)); var rhs = new IdContentData() - .AddField(2, + .Add(2, new ContentFieldData() .AddValue("en", 3)) - .AddField(3, + .Add(3, new ContentFieldData() .AddValue("iv", 4)); var expected = new IdContentData() - .AddField(1, + .Add(1, new ContentFieldData() .AddValue("iv", 1)) - .AddField(2, + .Add(2, new ContentFieldData() .AddValue("de", 2) .AddValue("en", 3)) - .AddField(3, + .Add(3, new ContentFieldData() .AddValue("iv", 4)); @@ -472,19 +472,19 @@ namespace Squidex.Domain.Apps.Core.Contents { var lhs = new NamedContentData() - .AddField("field1", + .Add("field1", new ContentFieldData() .AddValue("iv", 2)) - .AddField("field2", + .Add("field2", new ContentFieldData() .AddValue("iv", 2)); var rhs = new NamedContentData() - .AddField("field1", + .Add("field1", new ContentFieldData() .AddValue("iv", 2)) - .AddField("field2", + .Add("field2", new ContentFieldData() .AddValue("iv", 2)); @@ -498,19 +498,19 @@ namespace Squidex.Domain.Apps.Core.Contents { var lhs = new NamedContentData() - .AddField("field1", + .Add("field1", new ContentFieldData() .AddValue("iv", 2)) - .AddField("field2", + .Add("field2", new ContentFieldData() .AddValue("iv", 2)); var rhs = new NamedContentData() - .AddField("field1", + .Add("field1", new ContentFieldData() .AddValue("en", 2)) - .AddField("field3", + .Add("field3", new ContentFieldData() .AddValue("iv", 2)); @@ -527,7 +527,7 @@ namespace Squidex.Domain.Apps.Core.Contents var input = new NamedContentData() - .AddField("assets1", + .Add("assets1", new ContentFieldData() .AddValue("iv", new JArray(id1.ToString(), id2.ToString()))); @@ -544,7 +544,7 @@ namespace Squidex.Domain.Apps.Core.Contents var input = new IdContentData() - .AddField(5, + .Add(5, new ContentFieldData() .AddValue("iv", new JArray(id1.ToString(), id2.ToString()))); diff --git a/tests/Squidex.Domain.Apps.Core.Tests/Schemas/Json/JsonSerializerTests.cs b/tests/Squidex.Domain.Apps.Core.Tests/Schemas/Json/JsonSerializerTests.cs index af6444ead..009d9f70b 100644 --- a/tests/Squidex.Domain.Apps.Core.Tests/Schemas/Json/JsonSerializerTests.cs +++ b/tests/Squidex.Domain.Apps.Core.Tests/Schemas/Json/JsonSerializerTests.cs @@ -35,25 +35,25 @@ namespace Squidex.Domain.Apps.Core.Schemas.Json { var schema = Schema.Create("user", new SchemaProperties { Hints = "The User" }) - .AddOrUpdateField(new JsonField(1, "my-json", Partitioning.Invariant, + .Add(new JsonField(1, "my-json", Partitioning.Invariant, new JsonFieldProperties())) - .AddOrUpdateField(new AssetsField(2, "my-assets", Partitioning.Invariant, + .Add(new AssetsField(2, "my-assets", Partitioning.Invariant, new AssetsFieldProperties())) - .AddOrUpdateField(new StringField(3, "my-string1", Partitioning.Language, + .Add(new StringField(3, "my-string1", Partitioning.Language, new StringFieldProperties { Label = "My String1", IsRequired = true, AllowedValues = ImmutableList.Create("a", "b") })) - .AddOrUpdateField(new StringField(4, "my-string2", Partitioning.Invariant, + .Add(new StringField(4, "my-string2", Partitioning.Invariant, new StringFieldProperties { Hints = "My String1" })) - .AddOrUpdateField(new NumberField(5, "my-number", Partitioning.Invariant, + .Add(new NumberField(5, "my-number", Partitioning.Invariant, new NumberFieldProperties { MinValue = 1, MaxValue = 10 })) - .AddOrUpdateField(new BooleanField(6, "my-boolean", Partitioning.Invariant, + .Add(new BooleanField(6, "my-boolean", Partitioning.Invariant, new BooleanFieldProperties())) - .AddOrUpdateField(new DateTimeField(7, "my-datetime", Partitioning.Invariant, + .Add(new DateTimeField(7, "my-datetime", Partitioning.Invariant, new DateTimeFieldProperties { Editor = DateTimeFieldEditor.DateTime })) - .AddOrUpdateField(new DateTimeField(8, "my-date", Partitioning.Invariant, + .Add(new DateTimeField(8, "my-date", Partitioning.Invariant, new DateTimeFieldProperties { Editor = DateTimeFieldEditor.Date })) - .AddOrUpdateField(new ReferencesField(9, "my-references", Partitioning.Invariant, + .Add(new ReferencesField(9, "my-references", Partitioning.Invariant, new ReferencesFieldProperties { SchemaId = Guid.NewGuid() })) - .AddOrUpdateField(new GeolocationField(10, "my-geolocation", Partitioning.Invariant, + .Add(new GeolocationField(10, "my-geolocation", Partitioning.Invariant, new GeolocationFieldProperties())) .HideField(1) .LockField(2) diff --git a/tests/Squidex.Domain.Apps.Core.Tests/Schemas/SchemaTests.cs b/tests/Squidex.Domain.Apps.Core.Tests/Schemas/SchemaTests.cs index 52a09139e..68652bf76 100644 --- a/tests/Squidex.Domain.Apps.Core.Tests/Schemas/SchemaTests.cs +++ b/tests/Squidex.Domain.Apps.Core.Tests/Schemas/SchemaTests.cs @@ -64,7 +64,7 @@ namespace Squidex.Domain.Apps.Core.Schemas [Fact] public void Should_add_field() { - var field = AddField(); + var field = Add(); Assert.Equal(field, sut.FieldsById[1]); } @@ -72,15 +72,15 @@ namespace Squidex.Domain.Apps.Core.Schemas [Fact] public void Should_throw_exception_if_adding_field_with_name_that_already_exists() { - AddField(); + Add(); - Assert.Throws(() => sut.AddOrUpdateField(new NumberField(2, "my-field", Partitioning.Invariant))); + Assert.Throws(() => sut.Add(new NumberField(2, "my-field", Partitioning.Invariant))); } [Fact] public void Should_hide_field() { - AddField(); + Add(); sut = sut.HideField(1); sut = sut.HideField(1); @@ -97,7 +97,7 @@ namespace Squidex.Domain.Apps.Core.Schemas [Fact] public void Should_show_field() { - AddField(); + Add(); sut = sut.HideField(1); sut = sut.ShowField(1); @@ -115,7 +115,7 @@ namespace Squidex.Domain.Apps.Core.Schemas [Fact] public void Should_disable_field() { - AddField(); + Add(); sut = sut.DisableField(1); sut = sut.DisableField(1); @@ -132,7 +132,7 @@ namespace Squidex.Domain.Apps.Core.Schemas [Fact] public void Should_enable_field() { - AddField(); + Add(); sut = sut.DisableField(1); sut = sut.EnableField(1); @@ -150,7 +150,7 @@ namespace Squidex.Domain.Apps.Core.Schemas [Fact] public void Should_lock_field() { - AddField(); + Add(); sut = sut.LockField(1); @@ -166,7 +166,7 @@ namespace Squidex.Domain.Apps.Core.Schemas [Fact] public void Should_throw_exception_if_updating_locked_field() { - AddField(); + Add(); sut = sut.LockField(1); @@ -176,7 +176,7 @@ namespace Squidex.Domain.Apps.Core.Schemas [Fact] public void Should_throw_exception_if_renaming_locked_field() { - AddField(); + Add(); sut = sut.LockField(1); @@ -186,7 +186,7 @@ namespace Squidex.Domain.Apps.Core.Schemas [Fact] public void Should_throw_exception_if_deleting_locked_field() { - AddField(); + Add(); sut = sut.LockField(1); @@ -196,7 +196,7 @@ namespace Squidex.Domain.Apps.Core.Schemas [Fact] public void Should_rename_field() { - AddField(); + Add(); sut = sut.RenameField(1, "new-name"); @@ -206,9 +206,9 @@ namespace Squidex.Domain.Apps.Core.Schemas [Fact] public void Should_throw_exception_if_new_field_already_exists() { - AddField(); + Add(); - sut = sut.AddOrUpdateField(new NumberField(2, "other-field", Partitioning.Invariant)); + sut = sut.Add(new NumberField(2, "other-field", Partitioning.Invariant)); Assert.Throws(() => sut.RenameField(2, "my-field")); } @@ -216,7 +216,7 @@ namespace Squidex.Domain.Apps.Core.Schemas [Fact] public void Should_throw_exception_if_new_field_name_is_not_valid() { - AddField(); + Add(); Assert.Throws(() => sut.RenameField(1, "new name")); } @@ -230,7 +230,7 @@ namespace Squidex.Domain.Apps.Core.Schemas [Fact] public void Should_delete_field() { - AddField(); + Add(); sut = sut.DeleteField(1); @@ -246,7 +246,7 @@ namespace Squidex.Domain.Apps.Core.Schemas [Fact] public void Should_update_field() { - AddField(); + Add(); sut = sut.UpdateField(1, new NumberFieldProperties { Hints = "my-hints" }); @@ -256,7 +256,7 @@ namespace Squidex.Domain.Apps.Core.Schemas [Fact] public void Should_throw_exception_if_updating_field_with_invalid_property_type() { - AddField(); + Add(); Assert.Throws(() => sut.UpdateField(1, new InvalidProperties())); } @@ -305,9 +305,9 @@ namespace Squidex.Domain.Apps.Core.Schemas var field2 = new StringField(2, "2", Partitioning.Invariant); var field3 = new StringField(3, "3", Partitioning.Invariant); - sut = sut.AddOrUpdateField(field1); - sut = sut.AddOrUpdateField(field2); - sut = sut.AddOrUpdateField(field3); + sut = sut.Add(field1); + sut = sut.Add(field2); + sut = sut.Add(field3); sut = sut.ReorderFields(new List { 3, 2, 1 }); Assert.Equal(new List { field3, field2, field1 }, sut.Fields.ToList()); @@ -319,8 +319,8 @@ namespace Squidex.Domain.Apps.Core.Schemas var field1 = new StringField(1, "1", Partitioning.Invariant); var field2 = new StringField(2, "2", Partitioning.Invariant); - sut = sut.AddOrUpdateField(field1); - sut = sut.AddOrUpdateField(field2); + sut = sut.Add(field1); + sut = sut.Add(field2); Assert.Throws(() => sut.ReorderFields(new List { 1 })); } @@ -331,8 +331,8 @@ namespace Squidex.Domain.Apps.Core.Schemas var field1 = new StringField(1, "1", Partitioning.Invariant); var field2 = new StringField(2, "2", Partitioning.Invariant); - sut = sut.AddOrUpdateField(field1); - sut = sut.AddOrUpdateField(field2); + sut = sut.Add(field1); + sut = sut.Add(field2); Assert.Throws(() => sut.ReorderFields(new List { 1, 4 })); } @@ -361,35 +361,35 @@ namespace Squidex.Domain.Apps.Core.Schemas { var schema = Schema.Create("user", new SchemaProperties { Hints = "The User" }) - .AddOrUpdateField(new JsonField(1, "my-json", Partitioning.Invariant, + .Add(new JsonField(1, "my-json", Partitioning.Invariant, new JsonFieldProperties())) - .AddOrUpdateField(new AssetsField(2, "my-assets", Partitioning.Invariant, + .Add(new AssetsField(2, "my-assets", Partitioning.Invariant, new AssetsFieldProperties())) - .AddOrUpdateField(new StringField(3, "my-string1", Partitioning.Language, + .Add(new StringField(3, "my-string1", Partitioning.Language, new StringFieldProperties { Label = "My String1", IsRequired = true, AllowedValues = ImmutableList.Create("a", "b") })) - .AddOrUpdateField(new StringField(4, "my-string2", Partitioning.Invariant, + .Add(new StringField(4, "my-string2", Partitioning.Invariant, new StringFieldProperties { Hints = "My String1" })) - .AddOrUpdateField(new NumberField(5, "my-number", Partitioning.Invariant, + .Add(new NumberField(5, "my-number", Partitioning.Invariant, new NumberFieldProperties { MinValue = 1, MaxValue = 10 })) - .AddOrUpdateField(new BooleanField(6, "my-boolean", Partitioning.Invariant, + .Add(new BooleanField(6, "my-boolean", Partitioning.Invariant, new BooleanFieldProperties())) - .AddOrUpdateField(new DateTimeField(7, "my-datetime", Partitioning.Invariant, + .Add(new DateTimeField(7, "my-datetime", Partitioning.Invariant, new DateTimeFieldProperties { Editor = DateTimeFieldEditor.DateTime })) - .AddOrUpdateField(new DateTimeField(8, "my-date", Partitioning.Invariant, + .Add(new DateTimeField(8, "my-date", Partitioning.Invariant, new DateTimeFieldProperties { Editor = DateTimeFieldEditor.Date })) - .AddOrUpdateField(new GeolocationField(9, "my-geolocation", Partitioning.Invariant, + .Add(new GeolocationField(9, "my-geolocation", Partitioning.Invariant, new GeolocationFieldProperties())) - .AddOrUpdateField(new ReferencesField(10, "my-references", Partitioning.Invariant, + .Add(new ReferencesField(10, "my-references", Partitioning.Invariant, new ReferencesFieldProperties())); return schema; } - private NumberField AddField() + private NumberField Add() { var field = new NumberField(1, "my-field", Partitioning.Invariant); - sut = sut.AddOrUpdateField(field); + sut = sut.Add(field); return field; } diff --git a/tests/Squidex.Domain.Apps.Core.Tests/Scripting/ContentDataObjectTests.cs b/tests/Squidex.Domain.Apps.Core.Tests/Scripting/ContentDataObjectTests.cs index 6b1f265e9..19a4152a1 100644 --- a/tests/Squidex.Domain.Apps.Core.Tests/Scripting/ContentDataObjectTests.cs +++ b/tests/Squidex.Domain.Apps.Core.Tests/Scripting/ContentDataObjectTests.cs @@ -24,7 +24,7 @@ namespace Squidex.Domain.Apps.Core.Scripting var expected = new NamedContentData() - .AddField("number", + .Add("number", new ContentFieldData() .AddValue("iv", 1.0)); @@ -40,7 +40,7 @@ namespace Squidex.Domain.Apps.Core.Scripting var expected = new NamedContentData() - .AddField("number", + .Add("number", new ContentFieldData() .AddValue("iv", 1.0)); @@ -62,7 +62,7 @@ namespace Squidex.Domain.Apps.Core.Scripting { var original = new NamedContentData() - .AddField("number", + .Add("number", new ContentFieldData() .AddValue("iv", 1.0)); @@ -78,13 +78,13 @@ namespace Squidex.Domain.Apps.Core.Scripting { var original = new NamedContentData() - .AddField("string", + .Add("string", new ContentFieldData() .AddValue("iv", "1")); var expected = new NamedContentData() - .AddField("string", + .Add("string", new ContentFieldData() .AddValue("iv", "1new")); @@ -98,13 +98,13 @@ namespace Squidex.Domain.Apps.Core.Scripting { var original = new NamedContentData() - .AddField("number", + .Add("number", new ContentFieldData() .AddValue("iv", 1.0)); var expected = new NamedContentData() - .AddField("number", + .Add("number", new ContentFieldData() .AddValue("iv", 3.0)); @@ -118,13 +118,13 @@ namespace Squidex.Domain.Apps.Core.Scripting { var original = new NamedContentData() - .AddField("boolean", + .Add("boolean", new ContentFieldData() .AddValue("iv", false)); var expected = new NamedContentData() - .AddField("boolean", + .Add("boolean", new ContentFieldData() .AddValue("iv", true)); @@ -138,13 +138,13 @@ namespace Squidex.Domain.Apps.Core.Scripting { var original = new NamedContentData() - .AddField("number", + .Add("number", new ContentFieldData() .AddValue("iv", new JArray(1.0, 2.0))); var expected = new NamedContentData() - .AddField("number", + .Add("number", new ContentFieldData() .AddValue("iv", new JArray(1.0, 4.0, 5.0))); @@ -158,13 +158,13 @@ namespace Squidex.Domain.Apps.Core.Scripting { var original = new NamedContentData() - .AddField("number", + .Add("number", new ContentFieldData() .AddValue("iv", new JObject(new JProperty("lat", 1.0)))); var expected = new NamedContentData() - .AddField("number", + .Add("number", new ContentFieldData() .AddValue("iv", new JObject(new JProperty("lat", 1.0), new JProperty("lon", 4.0)))); @@ -178,12 +178,12 @@ namespace Squidex.Domain.Apps.Core.Scripting { var original = new NamedContentData() - .AddField("number", + .Add("number", new ContentFieldData()); var expected = new NamedContentData() - .AddField("number", + .Add("number", new ContentFieldData() .AddValue("iv", 1.0)); @@ -197,13 +197,13 @@ namespace Squidex.Domain.Apps.Core.Scripting { var original = new NamedContentData() - .AddField("string", + .Add("string", new ContentFieldData() .AddValue("iv", "hello")); var expected = new NamedContentData() - .AddField("string", + .Add("string", new ContentFieldData()); var result = ExecuteScript(original, @"delete data.string.iv"); @@ -216,11 +216,11 @@ namespace Squidex.Domain.Apps.Core.Scripting { var content = new NamedContentData() - .AddField("f1", + .Add("f1", new ContentFieldData() .AddValue("v11", "1") .AddValue("v12", "2")) - .AddField("f2", + .Add("f2", new ContentFieldData() .AddValue("v21", "3") .AddValue("v22", "4")); @@ -248,7 +248,7 @@ namespace Squidex.Domain.Apps.Core.Scripting { var original = new NamedContentData() - .AddField("obj", + .Add("obj", new ContentFieldData() .AddValue("iv", new JObject(new JProperty("readonly", 1)))); @@ -261,7 +261,7 @@ namespace Squidex.Domain.Apps.Core.Scripting { var original = new NamedContentData() - .AddField("obj", + .Add("obj", new ContentFieldData() .AddValue("iv", new JArray())); diff --git a/tests/Squidex.Domain.Apps.Core.Tests/Scripting/JintScriptEngineTests.cs b/tests/Squidex.Domain.Apps.Core.Tests/Scripting/JintScriptEngineTests.cs index ec13177e4..f3ec0ee2a 100644 --- a/tests/Squidex.Domain.Apps.Core.Tests/Scripting/JintScriptEngineTests.cs +++ b/tests/Squidex.Domain.Apps.Core.Tests/Scripting/JintScriptEngineTests.cs @@ -87,7 +87,7 @@ namespace Squidex.Domain.Apps.Core.Scripting var expected = new NamedContentData() - .AddField("operation", + .Add("operation", new ContentFieldData() .AddValue("iv", "MyOperation")); @@ -108,18 +108,18 @@ namespace Squidex.Domain.Apps.Core.Scripting { var content = new NamedContentData() - .AddField("number0", + .Add("number0", new ContentFieldData() .AddValue("iv", 1.0)) - .AddField("number1", + .Add("number1", new ContentFieldData() .AddValue("iv", 1.0)); var expected = new NamedContentData() - .AddField("number1", + .Add("number1", new ContentFieldData() .AddValue("iv", 2.0)) - .AddField("number2", + .Add("number2", new ContentFieldData() .AddValue("iv", 10.0)); @@ -143,18 +143,18 @@ namespace Squidex.Domain.Apps.Core.Scripting { var content = new NamedContentData() - .AddField("number0", + .Add("number0", new ContentFieldData() .AddValue("iv", 1.0)) - .AddField("number1", + .Add("number1", new ContentFieldData() .AddValue("iv", 1.0)); var expected = new NamedContentData() - .AddField("number1", + .Add("number1", new ContentFieldData() .AddValue("iv", 2.0)) - .AddField("number2", + .Add("number2", new ContentFieldData() .AddValue("iv", 10.0)); diff --git a/tests/Squidex.Domain.Apps.Read.Tests/Contents/GraphQLTests.cs b/tests/Squidex.Domain.Apps.Read.Tests/Contents/GraphQLTests.cs index 460f983c0..dba7120e3 100644 --- a/tests/Squidex.Domain.Apps.Read.Tests/Contents/GraphQLTests.cs +++ b/tests/Squidex.Domain.Apps.Read.Tests/Contents/GraphQLTests.cs @@ -40,23 +40,23 @@ namespace Squidex.Domain.Apps.Read.Contents private readonly Schema schemaDef = Schema.Create("my-schema", new SchemaProperties()) - .AddOrUpdateField(new JsonField(1, "my-json", Partitioning.Invariant, + .Add(new JsonField(1, "my-json", Partitioning.Invariant, new JsonFieldProperties())) - .AddOrUpdateField(new StringField(2, "my-string", Partitioning.Language, + .Add(new StringField(2, "my-string", Partitioning.Language, new StringFieldProperties())) - .AddOrUpdateField(new NumberField(3, "my-number", Partitioning.Invariant, + .Add(new NumberField(3, "my-number", Partitioning.Invariant, new NumberFieldProperties())) - .AddOrUpdateField(new AssetsField(4, "my-assets", Partitioning.Invariant, + .Add(new AssetsField(4, "my-assets", Partitioning.Invariant, new AssetsFieldProperties())) - .AddOrUpdateField(new BooleanField(5, "my-boolean", Partitioning.Invariant, + .Add(new BooleanField(5, "my-boolean", Partitioning.Invariant, new BooleanFieldProperties())) - .AddOrUpdateField(new DateTimeField(6, "my-datetime", Partitioning.Invariant, + .Add(new DateTimeField(6, "my-datetime", Partitioning.Invariant, new DateTimeFieldProperties())) - .AddOrUpdateField(new ReferencesField(7, "my-references", Partitioning.Invariant, + .Add(new ReferencesField(7, "my-references", Partitioning.Invariant, new ReferencesFieldProperties { SchemaId = schemaId })) - .AddOrUpdateField(new ReferencesField(9, "my-invalid", Partitioning.Invariant, + .Add(new ReferencesField(9, "my-invalid", Partitioning.Invariant, new ReferencesFieldProperties { SchemaId = Guid.NewGuid() })) - .AddOrUpdateField(new GeolocationField(9, "my-geolocation", Partitioning.Invariant, + .Add(new GeolocationField(9, "my-geolocation", Partitioning.Invariant, new GeolocationFieldProperties())); private readonly IContentQueryService contentQuery = A.Fake(); @@ -611,21 +611,21 @@ namespace Squidex.Domain.Apps.Read.Contents data = data ?? new NamedContentData() - .AddField("my-json", + .Add("my-json", new ContentFieldData().AddValue("iv", JToken.FromObject(new { value = 1 }))) - .AddField("my-string", + .Add("my-string", new ContentFieldData().AddValue("iv", "value")) - .AddField("my-assets", + .Add("my-assets", new ContentFieldData().AddValue("iv", JToken.FromObject(new[] { assetId }))) - .AddField("my-number", + .Add("my-number", new ContentFieldData().AddValue("iv", 1)) - .AddField("my-boolean", + .Add("my-boolean", new ContentFieldData().AddValue("iv", true)) - .AddField("my-datetime", + .Add("my-datetime", new ContentFieldData().AddValue("iv", now.ToDateTimeUtc())) - .AddField("my-references", + .Add("my-references", new ContentFieldData().AddValue("iv", JToken.FromObject(new[] { refId }))) - .AddField("my-geolocation", + .Add("my-geolocation", new ContentFieldData().AddValue("iv", JToken.FromObject(new { latitude = 10, longitude = 20 }))); var content = new FakeContentEntity diff --git a/tests/Squidex.Domain.Apps.Read.Tests/Contents/ODataQueryTests.cs b/tests/Squidex.Domain.Apps.Read.Tests/Contents/ODataQueryTests.cs index fcea312cd..4cef51e1b 100644 --- a/tests/Squidex.Domain.Apps.Read.Tests/Contents/ODataQueryTests.cs +++ b/tests/Squidex.Domain.Apps.Read.Tests/Contents/ODataQueryTests.cs @@ -31,21 +31,21 @@ namespace Squidex.Domain.Apps.Read.Contents { private readonly Schema schemaDef = Schema.Create("user", new SchemaProperties { Hints = "The User" }) - .AddOrUpdateField(new StringField(1, "firstName", Partitioning.Language, + .Add(new StringField(1, "firstName", Partitioning.Language, new StringFieldProperties { Label = "FirstName", IsRequired = true, AllowedValues = new[] { "1", "2" }.ToImmutableList() })) - .AddOrUpdateField(new StringField(2, "lastName", Partitioning.Language, + .Add(new StringField(2, "lastName", Partitioning.Language, new StringFieldProperties { Hints = "Last Name", Editor = StringFieldEditor.Input })) - .AddOrUpdateField(new BooleanField(3, "isAdmin", Partitioning.Invariant, + .Add(new BooleanField(3, "isAdmin", Partitioning.Invariant, new BooleanFieldProperties())) - .AddOrUpdateField(new NumberField(4, "age", Partitioning.Invariant, + .Add(new NumberField(4, "age", Partitioning.Invariant, new NumberFieldProperties { MinValue = 1, MaxValue = 10 })) - .AddOrUpdateField(new DateTimeField(5, "birthday", Partitioning.Invariant, + .Add(new DateTimeField(5, "birthday", Partitioning.Invariant, new DateTimeFieldProperties())) - .AddOrUpdateField(new AssetsField(6, "pictures", Partitioning.Invariant, + .Add(new AssetsField(6, "pictures", Partitioning.Invariant, new AssetsFieldProperties())) - .AddOrUpdateField(new ReferencesField(7, "friends", Partitioning.Invariant, + .Add(new ReferencesField(7, "friends", Partitioning.Invariant, new ReferencesFieldProperties())) - .AddOrUpdateField(new StringField(8, "dashed-field", Partitioning.Invariant, + .Add(new StringField(8, "dashed-field", Partitioning.Invariant, new StringFieldProperties())); private readonly IBsonSerializerRegistry registry = BsonSerializer.SerializerRegistry; diff --git a/tests/Squidex.Domain.Apps.Write.Tests/Contents/ContentCommandMiddlewareTests.cs b/tests/Squidex.Domain.Apps.Write.Tests/Contents/ContentCommandMiddlewareTests.cs index eaf922e6d..97fc70475 100644 --- a/tests/Squidex.Domain.Apps.Write.Tests/Contents/ContentCommandMiddlewareTests.cs +++ b/tests/Squidex.Domain.Apps.Write.Tests/Contents/ContentCommandMiddlewareTests.cs @@ -38,8 +38,8 @@ namespace Squidex.Domain.Apps.Write.Contents private readonly IAppProvider appProvider = A.Fake(); private readonly IAppEntity app = A.Fake(); private readonly ClaimsPrincipal user = new ClaimsPrincipal(); - private readonly NamedContentData invalidData = new NamedContentData().AddField("my-field", new ContentFieldData().SetValue(null)); - private readonly NamedContentData data = new NamedContentData().AddField("my-field", new ContentFieldData().SetValue(1)); + private readonly NamedContentData invalidData = new NamedContentData().Add("my-field", new ContentFieldData().SetValue(null)); + private readonly NamedContentData data = new NamedContentData().Add("my-field", new ContentFieldData().SetValue(1)); private readonly LanguagesConfig languagesConfig = LanguagesConfig.Create(Language.DE); private readonly Guid contentId = Guid.NewGuid(); @@ -47,7 +47,7 @@ namespace Squidex.Domain.Apps.Write.Contents { var schemaDef = Schema.Create("my-schema", new SchemaProperties()) - .AddOrUpdateField(new NumberField(1, "my-field", Partitioning.Invariant, + .Add(new NumberField(1, "my-field", Partitioning.Invariant, new NumberFieldProperties { IsRequired = true })); content = new ContentDomainObject(contentId, -1); @@ -177,7 +177,7 @@ namespace Squidex.Domain.Apps.Write.Contents A.CallTo(() => scriptEngine.ExecuteAndTransform(A.Ignored, A.Ignored)) .Returns(data); - var patch = new NamedContentData().AddField("my-field", new ContentFieldData().SetValue(3)); + var patch = new NamedContentData().Add("my-field", new ContentFieldData().SetValue(3)); A.CallTo(() => scriptEngine.ExecuteAndTransform(A.Ignored, A.Ignored)).Returns(patch); diff --git a/tests/Squidex.Domain.Apps.Write.Tests/Contents/ContentDomainObjectTests.cs b/tests/Squidex.Domain.Apps.Write.Tests/Contents/ContentDomainObjectTests.cs index d0551cecb..03fe48213 100644 --- a/tests/Squidex.Domain.Apps.Write.Tests/Contents/ContentDomainObjectTests.cs +++ b/tests/Squidex.Domain.Apps.Write.Tests/Contents/ContentDomainObjectTests.cs @@ -23,12 +23,12 @@ namespace Squidex.Domain.Apps.Write.Contents private readonly ContentDomainObject sut; private readonly NamedContentData data = new NamedContentData() - .AddField("field1", + .Add("field1", new ContentFieldData() .AddValue("iv", 1)); private readonly NamedContentData otherData = new NamedContentData() - .AddField("field2", + .Add("field2", new ContentFieldData() .AddValue("iv", 2)); diff --git a/tests/Squidex.Domain.Apps.Write.Tests/Schemas/SchemaCommandMiddlewareTests.cs b/tests/Squidex.Domain.Apps.Write.Tests/Schemas/SchemaCommandMiddlewareTests.cs index cbe5ffb9c..8bae62b23 100644 --- a/tests/Squidex.Domain.Apps.Write.Tests/Schemas/SchemaCommandMiddlewareTests.cs +++ b/tests/Squidex.Domain.Apps.Write.Tests/Schemas/SchemaCommandMiddlewareTests.cs @@ -150,11 +150,11 @@ namespace Squidex.Domain.Apps.Write.Schemas } [Fact] - public async Task AddField_should_update_domain_object() + public async Task Add_should_update_domain_object() { CreateSchema(); - var context = CreateContextForCommand(new AddField { Name = fieldName, Properties = new NumberFieldProperties() }); + var context = CreateContextForCommand(new Add { Name = fieldName, Properties = new NumberFieldProperties() }); await TestUpdate(schema, async _ => { @@ -274,7 +274,7 @@ namespace Squidex.Domain.Apps.Write.Schemas private void CreateField() { - schema.AddField(CreateCommand(new AddField { Name = fieldName, Properties = new NumberFieldProperties() })); + schema.Add(CreateCommand(new Add { Name = fieldName, Properties = new NumberFieldProperties() })); } } } diff --git a/tests/Squidex.Domain.Apps.Write.Tests/Schemas/SchemaDomainObjectTests.cs b/tests/Squidex.Domain.Apps.Write.Tests/Schemas/SchemaDomainObjectTests.cs index e7932c539..2b53af529 100644 --- a/tests/Squidex.Domain.Apps.Write.Tests/Schemas/SchemaDomainObjectTests.cs +++ b/tests/Squidex.Domain.Apps.Write.Tests/Schemas/SchemaDomainObjectTests.cs @@ -244,8 +244,8 @@ namespace Squidex.Domain.Apps.Write.Schemas CreateSchema(); - sut.AddField(new AddField { Name = "field1", Properties = new StringFieldProperties() }); - sut.AddField(new AddField { Name = "field2", Properties = new StringFieldProperties() }); + sut.Add(new Add { Name = "field1", Properties = new StringFieldProperties() }); + sut.Add(new Add { Name = "field2", Properties = new StringFieldProperties() }); ((IAggregate)sut).ClearUncommittedEvents(); @@ -367,52 +367,52 @@ namespace Squidex.Domain.Apps.Write.Schemas } [Fact] - public void AddField_should_throw_exception_if_not_created() + public void Add_should_throw_exception_if_not_created() { Assert.Throws(() => { - sut.AddField(CreateCommand(new AddField { Name = fieldName, Properties = new NumberFieldProperties() })); + sut.Add(CreateCommand(new Add { Name = fieldName, Properties = new NumberFieldProperties() })); }); } [Fact] - public void AddField_should_throw_exception_if_command_is_not_valid() + public void Add_should_throw_exception_if_command_is_not_valid() { Assert.Throws(() => { - sut.AddField(CreateCommand(new AddField())); + sut.Add(CreateCommand(new Add())); }); } [Fact] - public void AddField_should_throw_exception_if_command_contains_invalid_partitioning() + public void Add_should_throw_exception_if_command_contains_invalid_partitioning() { Assert.Throws(() => { - sut.AddField(CreateCommand(new AddField { Name = fieldName, Partitioning = "invalid", Properties = new NumberFieldProperties() })); + sut.Add(CreateCommand(new Add { Name = fieldName, Partitioning = "invalid", Properties = new NumberFieldProperties() })); }); } [Fact] - public void AddField_should_throw_exception_if_schema_is_deleted() + public void Add_should_throw_exception_if_schema_is_deleted() { CreateSchema(); DeleteSchema(); Assert.Throws(() => { - sut.AddField(CreateCommand(new AddField { Name = fieldName, Properties = new NumberFieldProperties() })); + sut.Add(CreateCommand(new Add { Name = fieldName, Properties = new NumberFieldProperties() })); }); } [Fact] - public void AddField_should_update_schema_and_create_events() + public void Add_should_update_schema_and_create_events() { var properties = new NumberFieldProperties(); CreateSchema(); - sut.AddField(CreateCommand(new AddField { Name = fieldName, Properties = properties })); + sut.Add(CreateCommand(new Add { Name = fieldName, Properties = properties })); Assert.Equal(properties, sut.Schema.FieldsById[1].RawProperties); @@ -762,7 +762,7 @@ namespace Squidex.Domain.Apps.Write.Schemas private void CreateField() { - sut.AddField(new AddField { Name = fieldName, Properties = new NumberFieldProperties() }); + sut.Add(new Add { Name = fieldName, Properties = new NumberFieldProperties() }); ((IAggregate)sut).ClearUncommittedEvents(); }