Browse Source

Renamings.

pull/141/head
Sebastian Stehle 9 years ago
parent
commit
b36d47b1cf
  1. 2
      src/Squidex.Domain.Apps.Core/Contents/IdContentData.cs
  2. 2
      src/Squidex.Domain.Apps.Core/Contents/NamedContentData.cs
  3. 36
      src/Squidex.Domain.Apps.Core/Schemas/Schema.cs
  4. 4
      src/Squidex.Domain.Apps.Events/Schemas/Utils/SchemaEventDispatcher.cs
  5. 34
      src/Squidex.Domain.Apps.Read/Contents/GraphQL/Types/AssetGraphType.cs
  6. 4
      src/Squidex.Domain.Apps.Read/Contents/GraphQL/Types/ContentDataGraphType.cs
  7. 16
      src/Squidex.Domain.Apps.Read/Contents/GraphQL/Types/ContentGraphType.cs
  8. 8
      src/Squidex.Domain.Apps.Read/Contents/GraphQL/Types/ContentQueryGraphType.cs
  9. 4
      src/Squidex.Domain.Apps.Write/Schemas/Commands/AddField.cs
  10. 277
      src/Squidex.Domain.Apps.Write/Schemas/Guards/SchemaFieldGuard.cs
  11. 42
      src/Squidex.Domain.Apps.Write/Schemas/Guards/SchemaGuard.cs
  12. 4
      src/Squidex.Domain.Apps.Write/Schemas/SchemaCommandMiddleware.cs
  13. 2
      src/Squidex.Domain.Apps.Write/Schemas/SchemaDomainObject.cs
  14. 4
      src/Squidex/Controllers/Api/Schemas/Models/AddFieldDto.cs
  15. 4
      src/Squidex/Controllers/Api/Schemas/SchemaFieldsController.cs
  16. 24
      tests/Squidex.Domain.Apps.Core.Tests/ContentEnrichmentTests.cs
  17. 48
      tests/Squidex.Domain.Apps.Core.Tests/ContentValidationTests.cs
  18. 144
      tests/Squidex.Domain.Apps.Core.Tests/Contents/ContentDataTests.cs
  19. 20
      tests/Squidex.Domain.Apps.Core.Tests/Schemas/Json/JsonSerializerTests.cs
  20. 74
      tests/Squidex.Domain.Apps.Core.Tests/Schemas/SchemaTests.cs
  21. 42
      tests/Squidex.Domain.Apps.Core.Tests/Scripting/ContentDataObjectTests.cs
  22. 18
      tests/Squidex.Domain.Apps.Core.Tests/Scripting/JintScriptEngineTests.cs
  23. 34
      tests/Squidex.Domain.Apps.Read.Tests/Contents/GraphQLTests.cs
  24. 16
      tests/Squidex.Domain.Apps.Read.Tests/Contents/ODataQueryTests.cs
  25. 8
      tests/Squidex.Domain.Apps.Write.Tests/Contents/ContentCommandMiddlewareTests.cs
  26. 4
      tests/Squidex.Domain.Apps.Write.Tests/Contents/ContentDomainObjectTests.cs
  27. 6
      tests/Squidex.Domain.Apps.Write.Tests/Schemas/SchemaCommandMiddlewareTests.cs
  28. 26
      tests/Squidex.Domain.Apps.Write.Tests/Schemas/SchemaDomainObjectTests.cs

2
src/Squidex.Domain.Apps.Core/Contents/IdContentData.cs

@ -39,7 +39,7 @@ namespace Squidex.Domain.Apps.Core.Contents
return Clean(this, new IdContentData()); 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)); Guard.GreaterThan(id, 0, nameof(id));

2
src/Squidex.Domain.Apps.Core/Contents/NamedContentData.cs

@ -34,7 +34,7 @@ namespace Squidex.Domain.Apps.Core.Contents
return Clean(this, new NamedContentData()); return Clean(this, new NamedContentData());
} }
public NamedContentData AddField(string name, ContentFieldData data) public NamedContentData Add(string name, ContentFieldData data)
{ {
Guard.NotNullOrEmpty(name, nameof(name)); Guard.NotNullOrEmpty(name, nameof(name));

36
src/Squidex.Domain.Apps.Core/Schemas/Schema.cs

@ -16,7 +16,7 @@ using Squidex.Infrastructure;
namespace Squidex.Domain.Apps.Core.Schemas namespace Squidex.Domain.Apps.Core.Schemas
{ {
public sealed class Schema : CloneableBase public sealed class Schema
{ {
private readonly string name; private readonly string name;
private readonly SchemaProperties properties; private readonly SchemaProperties properties;
@ -116,11 +116,6 @@ namespace Squidex.Domain.Apps.Core.Schemas
return UpdateField(fieldId, field => field.Show()); return UpdateField(fieldId, field => field.Show());
} }
public Schema RenameField(long fieldId, string newName)
{
return UpdateField(fieldId, field => field.Rename(newName));
}
public Schema Publish() public Schema Publish()
{ {
return new Schema(name, true, properties, fields); return new Schema(name, true, properties, fields);
@ -133,38 +128,35 @@ namespace Squidex.Domain.Apps.Core.Schemas
public Schema DeleteField(long fieldId) 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<long> ids) public Schema UpdateField(long fieldId, Func<Field, Field> updater)
{ {
Guard.NotNull(ids, nameof(ids)); Guard.NotNull(updater, nameof(updater));
if (ids.Count != fields.Count || ids.Any(x => !fieldsById.ContainsKey(x)))
{
throw new ArgumentException("Ids must cover all fields.", nameof(ids));
}
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); return new Schema(name, isPublished, properties, newFields);
} }
public Schema UpdateField(long fieldId, Func<Field, Field> updater) public Schema ReorderFields(List<long> 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)); Guard.NotNull(field, nameof(field));

4
src/Squidex.Domain.Apps.Events/Schemas/Utils/SchemaEventDispatcher.cs

@ -46,7 +46,7 @@ namespace Squidex.Domain.Apps.Events.Schemas.Utils
field = field.Lock(); field = field.Lock();
} }
schema = schema.AddOrUpdateField(field); schema = schema.Add(field);
fieldId++; fieldId++;
} }
@ -62,7 +62,7 @@ namespace Squidex.Domain.Apps.Events.Schemas.Utils
Partitioning.Language : Partitioning.Language :
Partitioning.Invariant; 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) public static Schema Dispatch(FieldUpdated @event, Schema schema)

34
src/Squidex.Domain.Apps.Read/Contents/GraphQL/Types/AssetGraphType.cs

@ -20,7 +20,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL.Types
{ {
Name = "AssetDto"; Name = "AssetDto";
AddField(new FieldType Add(new FieldType
{ {
Name = "id", Name = "id",
Resolver = Resolver(x => x.Id.ToString()), Resolver = Resolver(x => x.Id.ToString()),
@ -28,7 +28,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL.Types
Description = "The id of the asset." Description = "The id of the asset."
}); });
AddField(new FieldType Add(new FieldType
{ {
Name = "version", Name = "version",
Resolver = Resolver(x => x.Version), Resolver = Resolver(x => x.Version),
@ -36,7 +36,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL.Types
Description = "The version of the asset." Description = "The version of the asset."
}); });
AddField(new FieldType Add(new FieldType
{ {
Name = "created", Name = "created",
Resolver = Resolver(x => x.Created.ToDateTimeUtc()), 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." Description = "The date and time when the asset has been created."
}); });
AddField(new FieldType Add(new FieldType
{ {
Name = "createdBy", Name = "createdBy",
Resolver = Resolver(x => x.CreatedBy.ToString()), 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." Description = "The user that has created the asset."
}); });
AddField(new FieldType Add(new FieldType
{ {
Name = "lastModified", Name = "lastModified",
Resolver = Resolver(x => x.LastModified.ToDateTimeUtc()), 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." Description = "The date and time when the asset has been modified last."
}); });
AddField(new FieldType Add(new FieldType
{ {
Name = "lastModifiedBy", Name = "lastModifiedBy",
Resolver = Resolver(x => x.LastModifiedBy.ToString()), 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." Description = "The user that has updated the asset last."
}); });
AddField(new FieldType Add(new FieldType
{ {
Name = "mimeType", Name = "mimeType",
Resolver = Resolver(x => x.MimeType), Resolver = Resolver(x => x.MimeType),
@ -76,7 +76,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL.Types
Description = "The mime type." Description = "The mime type."
}); });
AddField(new FieldType Add(new FieldType
{ {
Name = "url", Name = "url",
Resolver = context.ResolveAssetUrl(), Resolver = context.ResolveAssetUrl(),
@ -84,7 +84,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL.Types
Description = "The url to the asset." Description = "The url to the asset."
}); });
AddField(new FieldType Add(new FieldType
{ {
Name = "thumbnailUrl", Name = "thumbnailUrl",
Resolver = context.ResolveAssetThumbnailUrl(), Resolver = context.ResolveAssetThumbnailUrl(),
@ -92,7 +92,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL.Types
Description = "The thumbnail url to the asset." Description = "The thumbnail url to the asset."
}); });
AddField(new FieldType Add(new FieldType
{ {
Name = "fileName", Name = "fileName",
Resolver = Resolver(x => x.FileName), Resolver = Resolver(x => x.FileName),
@ -100,7 +100,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL.Types
Description = "The file name." Description = "The file name."
}); });
AddField(new FieldType Add(new FieldType
{ {
Name = "fileType", Name = "fileType",
Resolver = Resolver(x => x.FileName.FileType()), Resolver = Resolver(x => x.FileName.FileType()),
@ -108,7 +108,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL.Types
Description = "The file type." Description = "The file type."
}); });
AddField(new FieldType Add(new FieldType
{ {
Name = "fileSize", Name = "fileSize",
Resolver = Resolver(x => x.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." Description = "The size of the file in bytes."
}); });
AddField(new FieldType Add(new FieldType
{ {
Name = "fileVersion", Name = "fileVersion",
Resolver = Resolver(x => x.FileVersion), Resolver = Resolver(x => x.FileVersion),
@ -124,7 +124,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL.Types
Description = "The version of the file." Description = "The version of the file."
}); });
AddField(new FieldType Add(new FieldType
{ {
Name = "isImage", Name = "isImage",
Resolver = Resolver(x => x.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." Description = "Determines of the created file is an image."
}); });
AddField(new FieldType Add(new FieldType
{ {
Name = "pixelWidth", Name = "pixelWidth",
Resolver = Resolver(x => x.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." Description = "The width of the image in pixels if the asset is an image."
}); });
AddField(new FieldType Add(new FieldType
{ {
Name = "pixelHeight", Name = "pixelHeight",
Resolver = Resolver(x => x.PixelHeight), Resolver = Resolver(x => x.PixelHeight),
@ -150,7 +150,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL.Types
if (context.CanGenerateAssetSourceUrl) if (context.CanGenerateAssetSourceUrl)
{ {
AddField(new FieldType Add(new FieldType
{ {
Name = "sourceUrl", Name = "sourceUrl",
Resolver = context.ResolveAssetSourceUrl(), Resolver = context.ResolveAssetSourceUrl(),

4
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) foreach (var partitionItem in partition)
{ {
fieldGraphType.AddField(new FieldType fieldGraphType.Add(new FieldType
{ {
Name = partitionItem.Key, Name = partitionItem.Key,
Resolver = fieldInfo.Resolver, Resolver = fieldInfo.Resolver,
@ -53,7 +53,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL.Types
var fieldResolver = new FuncFieldResolver<NamedContentData, ContentFieldData>(c => c.Source.GetOrDefault(field.Name)); var fieldResolver = new FuncFieldResolver<NamedContentData, ContentFieldData>(c => c.Source.GetOrDefault(field.Name));
AddField(new FieldType Add(new FieldType
{ {
Name = field.Name.ToCamelCase(), Name = field.Name.ToCamelCase(),
Resolver = fieldResolver, Resolver = fieldResolver,

16
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); var schemaName = schema.SchemaDef.Properties.Label.WithFallback(schema.Name);
AddField(new FieldType Add(new FieldType
{ {
Name = "id", Name = "id",
Resolver = Resolver(x => x.Id.ToString()), 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." Description = $"The id of the {schemaName} content."
}); });
AddField(new FieldType Add(new FieldType
{ {
Name = "version", Name = "version",
Resolver = Resolver(x => x.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." Description = $"The version of the {schemaName} content."
}); });
AddField(new FieldType Add(new FieldType
{ {
Name = "created", Name = "created",
Resolver = Resolver(x => x.Created.ToDateTimeUtc()), 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." Description = $"The date and time when the {schemaName} content has been created."
}); });
AddField(new FieldType Add(new FieldType
{ {
Name = "createdBy", Name = "createdBy",
Resolver = Resolver(x => x.CreatedBy.ToString()), 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." Description = $"The user that has created the {schemaName} content."
}); });
AddField(new FieldType Add(new FieldType
{ {
Name = "lastModified", Name = "lastModified",
Resolver = Resolver(x => x.LastModified.ToDateTimeUtc()), 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." Description = $"The date and time when the {schemaName} content has been modified last."
}); });
AddField(new FieldType Add(new FieldType
{ {
Name = "lastModifiedBy", Name = "lastModifiedBy",
Resolver = Resolver(x => x.LastModifiedBy.ToString()), 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." Description = $"The user that has updated the {schemaName} content last."
}); });
AddField(new FieldType Add(new FieldType
{ {
Name = "url", Name = "url",
Resolver = context.ResolveContentUrl(schema), Resolver = context.ResolveContentUrl(schema),
@ -92,7 +92,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL.Types
if (dataType.Fields.Any()) if (dataType.Fields.Any())
{ {
AddField(new FieldType Add(new FieldType
{ {
Name = "data", Name = "data",
Resolver = Resolver(x => x.Data), Resolver = Resolver(x => x.Data),

8
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) private void AddAssetFind(IGraphQLContext graphQLContext)
{ {
AddField(new FieldType Add(new FieldType
{ {
Name = "findAsset", Name = "findAsset",
Arguments = new QueryArguments Arguments = new QueryArguments
@ -63,7 +63,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL.Types
private void AddContentFind(ISchemaEntity schema, IGraphType schemaType, string schemaName) private void AddContentFind(ISchemaEntity schema, IGraphType schemaType, string schemaName)
{ {
AddField(new FieldType Add(new FieldType
{ {
Name = $"find{schema.Name.ToPascalCase()}Content", Name = $"find{schema.Name.ToPascalCase()}Content",
Arguments = new QueryArguments Arguments = new QueryArguments
@ -89,7 +89,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL.Types
private void AddAssetsQuery(IGraphQLContext graphQLContext) private void AddAssetsQuery(IGraphQLContext graphQLContext)
{ {
AddField(new FieldType Add(new FieldType
{ {
Name = "queryAssets", Name = "queryAssets",
Arguments = new QueryArguments Arguments = new QueryArguments
@ -130,7 +130,7 @@ namespace Squidex.Domain.Apps.Read.Contents.GraphQL.Types
private void AddContentQuery(ISchemaEntity schema, IGraphType schemaType, string schemaName) private void AddContentQuery(ISchemaEntity schema, IGraphType schemaType, string schemaName)
{ {
AddField(new FieldType Add(new FieldType
{ {
Name = $"query{schema.Name.ToPascalCase()}Contents", Name = $"query{schema.Name.ToPascalCase()}Contents",
Arguments = new QueryArguments Arguments = new QueryArguments

4
src/Squidex.Domain.Apps.Write/Schemas/Commands/AddField.cs

@ -1,5 +1,5 @@
// ========================================================================== // ==========================================================================
// AddField.cs // Add.cs
// Squidex Headless CMS // Squidex Headless CMS
// ========================================================================== // ==========================================================================
// Copyright (c) Squidex Group // Copyright (c) Squidex Group
@ -13,7 +13,7 @@ using Squidex.Infrastructure;
namespace Squidex.Domain.Apps.Write.Schemas.Commands namespace Squidex.Domain.Apps.Write.Schemas.Commands
{ {
public sealed class AddField : FieldCommand, IValidatable public sealed class Add : FieldCommand, IValidatable
{ {
public string Name { get; set; } public string Name { get; set; }

277
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<ValidationError> 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;
}
}
}
}
}

42
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");
}
}
}
}

4
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<SchemaDomainObject>(context, s => return handler.UpdateAsync<SchemaDomainObject>(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)); context.Complete(EntityCreatedResult.Create(s.Schema.FieldsById.Values.First(x => x.Name == command.Name).Id, s.Version));
}); });

2
src/Squidex.Domain.Apps.Write/Schemas/SchemaDomainObject.cs

@ -144,7 +144,7 @@ namespace Squidex.Domain.Apps.Write.Schemas
return this; return this;
} }
public SchemaDomainObject AddField(AddField command) public SchemaDomainObject Add(Add command)
{ {
Guard.Valid(command, nameof(command), () => $"Cannot add field to schema {Id}"); Guard.Valid(command, nameof(command), () => $"Cannot add field to schema {Id}");

4
src/Squidex/Controllers/Api/Schemas/Models/AddFieldDto.cs

@ -1,5 +1,5 @@
// ========================================================================== // ==========================================================================
// AddFieldDto.cs // AddDto.cs
// Squidex Headless CMS // Squidex Headless CMS
// ========================================================================== // ==========================================================================
// Copyright (c) Squidex Group // Copyright (c) Squidex Group
@ -10,7 +10,7 @@ using System.ComponentModel.DataAnnotations;
namespace Squidex.Controllers.Api.Schemas.Models namespace Squidex.Controllers.Api.Schemas.Models
{ {
public sealed class AddFieldDto public sealed class AddDto
{ {
/// <summary> /// <summary>
/// The name of the field. Must be unique within the schema. /// The name of the field. Must be unique within the schema.

4
src/Squidex/Controllers/Api/Schemas/SchemaFieldsController.cs

@ -48,9 +48,9 @@ namespace Squidex.Controllers.Api.Schemas
[ProducesResponseType(typeof(ErrorDto), 409)] [ProducesResponseType(typeof(ErrorDto), 409)]
[ProducesResponseType(typeof(ErrorDto), 400)] [ProducesResponseType(typeof(ErrorDto), 400)]
[ApiCosts(1)] [ApiCosts(1)]
public async Task<IActionResult> PostField(string app, string name, [FromBody] AddFieldDto request) public async Task<IActionResult> PostField(string app, string name, [FromBody] AddDto request)
{ {
var command = new AddField var command = new Add
{ {
Name = request.Name, Name = request.Name,
Partitioning = request.Partitioning, Partitioning = request.Partitioning,

24
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 LanguagesConfig languagesConfig = LanguagesConfig.Create(Language.DE, Language.EN);
private readonly Schema schema = private readonly Schema schema =
Schema.Create("my-schema", new SchemaProperties()) Schema.Create("my-schema", new SchemaProperties())
.AddOrUpdateField(new JsonField(1, "my-json", Partitioning.Invariant, .Add(new JsonField(1, "my-json", Partitioning.Invariant,
new JsonFieldProperties())) new JsonFieldProperties()))
.AddOrUpdateField(new StringField(2, "my-string", Partitioning.Language, .Add(new StringField(2, "my-string", Partitioning.Language,
new StringFieldProperties { DefaultValue = "en-string" })) 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 })) new NumberFieldProperties { DefaultValue = 123 }))
.AddOrUpdateField(new AssetsField(4, "my-assets", Partitioning.Invariant, .Add(new AssetsField(4, "my-assets", Partitioning.Invariant,
new AssetsFieldProperties())) new AssetsFieldProperties()))
.AddOrUpdateField(new BooleanField(5, "my-boolean", Partitioning.Invariant, .Add(new BooleanField(5, "my-boolean", Partitioning.Invariant,
new BooleanFieldProperties { DefaultValue = true })) new BooleanFieldProperties { DefaultValue = true }))
.AddOrUpdateField(new DateTimeField(6, "my-datetime", Partitioning.Invariant, .Add(new DateTimeField(6, "my-datetime", Partitioning.Invariant,
new DateTimeFieldProperties { DefaultValue = Now })) 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() })) new ReferencesFieldProperties { SchemaId = Guid.NewGuid() }))
.AddOrUpdateField(new GeolocationField(8, "my-geolocation", Partitioning.Invariant, .Add(new GeolocationField(8, "my-geolocation", Partitioning.Invariant,
new GeolocationFieldProperties())); new GeolocationFieldProperties()));
[Fact] [Fact]
@ -44,10 +44,10 @@ namespace Squidex.Domain.Apps.Core
{ {
var data = var data =
new NamedContentData() new NamedContentData()
.AddField("my-string", .Add("my-string",
new ContentFieldData() new ContentFieldData()
.AddValue("de", "de-string")) .AddValue("de", "de-string"))
.AddField("my-number", .Add("my-number",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", 456)); .AddValue("iv", 456));
@ -70,10 +70,10 @@ namespace Squidex.Domain.Apps.Core
var data = var data =
new NamedContentData() new NamedContentData()
.AddField("my-string", .Add("my-string",
new ContentFieldData() new ContentFieldData()
.AddValue("de", string.Empty)) .AddValue("de", string.Empty))
.AddField("my-number", .Add("my-number",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", 456)); .AddValue("iv", 456));

48
tests/Squidex.Domain.Apps.Core.Tests/ContentValidationTests.cs

@ -28,7 +28,7 @@ namespace Squidex.Domain.Apps.Core
{ {
var data = var data =
new NamedContentData() new NamedContentData()
.AddField("unknown", .Add("unknown",
new ContentFieldData()); new ContentFieldData());
await data.ValidateAsync(context, schema, languagesConfig.ToResolver(), errors); await data.ValidateAsync(context, schema, languagesConfig.ToResolver(), errors);
@ -43,11 +43,11 @@ namespace Squidex.Domain.Apps.Core
[Fact] [Fact]
public async Task Should_add_error_if_validating_data_with_invalid_field() 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 = var data =
new NamedContentData() new NamedContentData()
.AddField("my-field", .Add("my-field",
new ContentFieldData() new ContentFieldData()
.SetValue(1000)); .SetValue(1000));
@ -63,11 +63,11 @@ namespace Squidex.Domain.Apps.Core
[Fact] [Fact]
public async Task Should_add_error_if_non_localizable_data_field_contains_language() 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 = var data =
new NamedContentData() new NamedContentData()
.AddField("my-field", .Add("my-field",
new ContentFieldData() new ContentFieldData()
.AddValue("es", 1) .AddValue("es", 1)
.AddValue("it", 1)); .AddValue("it", 1));
@ -85,7 +85,7 @@ namespace Squidex.Domain.Apps.Core
[Fact] [Fact]
public async Task Should_add_error_if_validating_data_with_invalid_localizable_field() 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 = var data =
new NamedContentData(); new NamedContentData();
@ -103,7 +103,7 @@ namespace Squidex.Domain.Apps.Core
[Fact] [Fact]
public async Task Should_add_error_if_required_data_field_is_not_in_bag() 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 = var data =
new NamedContentData(); new NamedContentData();
@ -120,11 +120,11 @@ namespace Squidex.Domain.Apps.Core
[Fact] [Fact]
public async Task Should_add_error_if_data_contains_invalid_language() 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 = var data =
new NamedContentData() new NamedContentData()
.AddField("my-field", .Add("my-field",
new ContentFieldData() new ContentFieldData()
.AddValue("de", 1) .AddValue("de", 1)
.AddValue("xx", 1)); .AddValue("xx", 1));
@ -144,11 +144,11 @@ namespace Squidex.Domain.Apps.Core
var optionalConfig = var optionalConfig =
LanguagesConfig.Create(Language.ES, Language.IT).Update(Language.IT, true, false, null); 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 = var data =
new NamedContentData() new NamedContentData()
.AddField("my-field", .Add("my-field",
new ContentFieldData() new ContentFieldData()
.AddValue("es", "value")); .AddValue("es", "value"));
@ -160,11 +160,11 @@ namespace Squidex.Domain.Apps.Core
[Fact] [Fact]
public async Task Should_add_error_if_data_contains_unsupported_language() 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 = var data =
new NamedContentData() new NamedContentData()
.AddField("my-field", .Add("my-field",
new ContentFieldData() new ContentFieldData()
.AddValue("es", 1) .AddValue("es", 1)
.AddValue("it", 1)); .AddValue("it", 1));
@ -184,7 +184,7 @@ namespace Squidex.Domain.Apps.Core
{ {
var data = var data =
new NamedContentData() new NamedContentData()
.AddField("unknown", .Add("unknown",
new ContentFieldData()); new ContentFieldData());
await data.ValidatePartialAsync(context, schema, languagesConfig.ToResolver(), errors); await data.ValidatePartialAsync(context, schema, languagesConfig.ToResolver(), errors);
@ -199,11 +199,11 @@ namespace Squidex.Domain.Apps.Core
[Fact] [Fact]
public async Task Should_add_error_if_validating_partial_data_with_invalid_field() 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 = var data =
new NamedContentData() new NamedContentData()
.AddField("my-field", .Add("my-field",
new ContentFieldData() new ContentFieldData()
.SetValue(1000)); .SetValue(1000));
@ -219,11 +219,11 @@ namespace Squidex.Domain.Apps.Core
[Fact] [Fact]
public async Task Should_add_error_if_non_localizable_partial_data_field_contains_language() 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 = var data =
new NamedContentData() new NamedContentData()
.AddField("my-field", .Add("my-field",
new ContentFieldData() new ContentFieldData()
.AddValue("es", 1) .AddValue("es", 1)
.AddValue("it", 1)); .AddValue("it", 1));
@ -241,7 +241,7 @@ namespace Squidex.Domain.Apps.Core
[Fact] [Fact]
public async Task Should_not_add_error_if_validating_partial_data_with_invalid_localizable_field() 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 = var data =
new NamedContentData(); new NamedContentData();
@ -254,7 +254,7 @@ namespace Squidex.Domain.Apps.Core
[Fact] [Fact]
public async Task Should_not_add_error_if_required_partial_data_field_is_not_in_bag() 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 = var data =
new NamedContentData(); new NamedContentData();
@ -267,11 +267,11 @@ namespace Squidex.Domain.Apps.Core
[Fact] [Fact]
public async Task Should_add_error_if_partial_data_contains_invalid_language() 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 = var data =
new NamedContentData() new NamedContentData()
.AddField("my-field", .Add("my-field",
new ContentFieldData() new ContentFieldData()
.AddValue("de", 1) .AddValue("de", 1)
.AddValue("xx", 1)); .AddValue("xx", 1));
@ -288,11 +288,11 @@ namespace Squidex.Domain.Apps.Core
[Fact] [Fact]
public async Task Should_add_error_if_partial_data_contains_unsupported_language() 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 = var data =
new NamedContentData() new NamedContentData()
.AddField("my-field", .Add("my-field",
new ContentFieldData() new ContentFieldData()
.AddValue("es", 1) .AddValue("es", 1)
.AddValue("it", 1)); .AddValue("it", 1));

144
tests/Squidex.Domain.Apps.Core.Tests/Contents/ContentDataTests.cs

@ -22,12 +22,12 @@ namespace Squidex.Domain.Apps.Core.Contents
{ {
private readonly Schema schema = private readonly Schema schema =
Schema.Create("schema", new SchemaProperties()) Schema.Create("schema", new SchemaProperties())
.AddOrUpdateField(new NumberField(1, "field1", Partitioning.Language)) .Add(new NumberField(1, "field1", Partitioning.Language))
.AddOrUpdateField(new NumberField(2, "field2", Partitioning.Invariant)) .Add(new NumberField(2, "field2", Partitioning.Invariant))
.AddOrUpdateField(new NumberField(3, "field3", Partitioning.Invariant).Hide()) .Add(new NumberField(3, "field3", Partitioning.Invariant).Hide())
.AddOrUpdateField(new AssetsField(5, "assets1", Partitioning.Invariant)) .Add(new AssetsField(5, "assets1", Partitioning.Invariant))
.AddOrUpdateField(new AssetsField(6, "assets2", Partitioning.Invariant)) .Add(new AssetsField(6, "assets2", Partitioning.Invariant))
.AddOrUpdateField(new JsonField(4, "json", Partitioning.Language)); .Add(new JsonField(4, "json", Partitioning.Language));
private readonly LanguagesConfig languagesConfig = LanguagesConfig.Create(Language.EN, Language.DE); private readonly LanguagesConfig languagesConfig = LanguagesConfig.Create(Language.EN, Language.DE);
[Fact] [Fact]
@ -35,14 +35,14 @@ namespace Squidex.Domain.Apps.Core.Contents
{ {
var input = var input =
new NamedContentData() new NamedContentData()
.AddField("field1", .Add("field1",
new ContentFieldData() new ContentFieldData()
.AddValue("en", "en_string") .AddValue("en", "en_string")
.AddValue("de", "de_string")) .AddValue("de", "de_string"))
.AddField("field2", .Add("field2",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", 3)) .AddValue("iv", 3))
.AddField("invalid", .Add("invalid",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", 3)); .AddValue("iv", 3));
@ -50,11 +50,11 @@ namespace Squidex.Domain.Apps.Core.Contents
var expected = var expected =
new IdContentData() new IdContentData()
.AddField(1, .Add(1,
new ContentFieldData() new ContentFieldData()
.AddValue("en", "en_string") .AddValue("en", "en_string")
.AddValue("de", "de_string")) .AddValue("de", "de_string"))
.AddField(2, .Add(2,
new ContentFieldData() new ContentFieldData()
.AddValue("iv", 3)); .AddValue("iv", 3));
@ -66,7 +66,7 @@ namespace Squidex.Domain.Apps.Core.Contents
{ {
var input = var input =
new NamedContentData() new NamedContentData()
.AddField("json", .Add("json",
new ContentFieldData() new ContentFieldData()
.AddValue("en", new JObject()) .AddValue("en", new JObject())
.AddValue("de", null) .AddValue("de", null)
@ -76,7 +76,7 @@ namespace Squidex.Domain.Apps.Core.Contents
var expected = var expected =
new IdContentData() new IdContentData()
.AddField(4, .Add(4,
new ContentFieldData() new ContentFieldData()
.AddValue("en", "e30=") .AddValue("en", "e30=")
.AddValue("de", null) .AddValue("de", null)
@ -90,14 +90,14 @@ namespace Squidex.Domain.Apps.Core.Contents
{ {
var input = var input =
new IdContentData() new IdContentData()
.AddField(1, .Add(1,
new ContentFieldData() new ContentFieldData()
.AddValue("en", "en_string") .AddValue("en", "en_string")
.AddValue("de", "de_string")) .AddValue("de", "de_string"))
.AddField(2, .Add(2,
new ContentFieldData() new ContentFieldData()
.AddValue("iv", 3)) .AddValue("iv", 3))
.AddField(99, .Add(99,
new ContentFieldData() new ContentFieldData()
.AddValue("iv", 3)); .AddValue("iv", 3));
@ -105,11 +105,11 @@ namespace Squidex.Domain.Apps.Core.Contents
var expected = var expected =
new NamedContentData() new NamedContentData()
.AddField("field1", .Add("field1",
new ContentFieldData() new ContentFieldData()
.AddValue("en", "en_string") .AddValue("en", "en_string")
.AddValue("de", "de_string")) .AddValue("de", "de_string"))
.AddField("field2", .Add("field2",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", 3)); .AddValue("iv", 3));
@ -121,7 +121,7 @@ namespace Squidex.Domain.Apps.Core.Contents
{ {
var input = var input =
new IdContentData() new IdContentData()
.AddField(4, .Add(4,
new ContentFieldData() new ContentFieldData()
.AddValue("en", "e30=") .AddValue("en", "e30=")
.AddValue("de", null) .AddValue("de", null)
@ -137,10 +137,10 @@ namespace Squidex.Domain.Apps.Core.Contents
{ {
var input = var input =
new NamedContentData() new NamedContentData()
.AddField("field0", .Add("field0",
new ContentFieldData() new ContentFieldData()
.AddValue("en", "en_string")) .AddValue("en", "en_string"))
.AddField("field1", .Add("field1",
new ContentFieldData() new ContentFieldData()
.AddValue("en", "en_string") .AddValue("en", "en_string")
.AddValue("de", "de_string")); .AddValue("de", "de_string"));
@ -149,7 +149,7 @@ namespace Squidex.Domain.Apps.Core.Contents
var expected = var expected =
new NamedContentData() new NamedContentData()
.AddField("field1", .Add("field1",
new ContentFieldData() new ContentFieldData()
.AddValue("en", "en_string") .AddValue("en", "en_string")
.AddValue("de", "de_string")); .AddValue("de", "de_string"));
@ -162,7 +162,7 @@ namespace Squidex.Domain.Apps.Core.Contents
{ {
var input = var input =
new NamedContentData() new NamedContentData()
.AddField("field1", .Add("field1",
new ContentFieldData() new ContentFieldData()
.AddValue("en", "en_string") .AddValue("en", "en_string")
.AddValue("de", "de_string") .AddValue("de", "de_string")
@ -172,7 +172,7 @@ namespace Squidex.Domain.Apps.Core.Contents
var expected = var expected =
new NamedContentData() new NamedContentData()
.AddField("field1", .Add("field1",
new ContentFieldData() new ContentFieldData()
.AddValue("en", "en_string") .AddValue("en", "en_string")
.AddValue("de", "de_string")); .AddValue("de", "de_string"));
@ -185,7 +185,7 @@ namespace Squidex.Domain.Apps.Core.Contents
{ {
var input = var input =
new NamedContentData() new NamedContentData()
.AddField("field2", .Add("field2",
new ContentFieldData() new ContentFieldData()
.AddValue("de", 2) .AddValue("de", 2)
.AddValue("en", 3)); .AddValue("en", 3));
@ -194,7 +194,7 @@ namespace Squidex.Domain.Apps.Core.Contents
var expected = var expected =
new NamedContentData() new NamedContentData()
.AddField("field2", .Add("field2",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", 3)); .AddValue("iv", 3));
@ -206,7 +206,7 @@ namespace Squidex.Domain.Apps.Core.Contents
{ {
var input = var input =
new NamedContentData() new NamedContentData()
.AddField("field1", .Add("field1",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", 3)); .AddValue("iv", 3));
@ -214,7 +214,7 @@ namespace Squidex.Domain.Apps.Core.Contents
var expected = var expected =
new NamedContentData() new NamedContentData()
.AddField("field1", .Add("field1",
new ContentFieldData() new ContentFieldData()
.AddValue("en", 3)); .AddValue("en", 3));
@ -226,8 +226,8 @@ namespace Squidex.Domain.Apps.Core.Contents
{ {
var input = var input =
new NamedContentData() new NamedContentData()
.AddField("field1", null) .Add("field1", null)
.AddField("field2", .Add("field2",
new ContentFieldData() new ContentFieldData()
.AddValue("en", 2) .AddValue("en", 2)
.AddValue("it", null)); .AddValue("it", null));
@ -236,7 +236,7 @@ namespace Squidex.Domain.Apps.Core.Contents
var expected = var expected =
new NamedContentData() new NamedContentData()
.AddField("field2", .Add("field2",
new ContentFieldData() new ContentFieldData()
.AddValue("en", 2)); .AddValue("en", 2));
@ -248,8 +248,8 @@ namespace Squidex.Domain.Apps.Core.Contents
{ {
var input = var input =
new IdContentData() new IdContentData()
.AddField(1, null) .Add(1, null)
.AddField(2, .Add(2,
new ContentFieldData() new ContentFieldData()
.AddValue("en", 2) .AddValue("en", 2)
.AddValue("it", null)); .AddValue("it", null));
@ -258,7 +258,7 @@ namespace Squidex.Domain.Apps.Core.Contents
var expected = var expected =
new IdContentData() new IdContentData()
.AddField(2, .Add(2,
new ContentFieldData() new ContentFieldData()
.AddValue("en", 2)); .AddValue("en", 2));
@ -270,7 +270,7 @@ namespace Squidex.Domain.Apps.Core.Contents
{ {
var input = var input =
new NamedContentData() new NamedContentData()
.AddField("field2", .Add("field2",
new ContentFieldData() new ContentFieldData()
.AddValue("de", 2) .AddValue("de", 2)
.AddValue("it", 3)); .AddValue("it", 3));
@ -279,7 +279,7 @@ namespace Squidex.Domain.Apps.Core.Contents
var expected = var expected =
new NamedContentData() new NamedContentData()
.AddField("field2", .Add("field2",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", 2)); .AddValue("iv", 2));
@ -291,10 +291,10 @@ namespace Squidex.Domain.Apps.Core.Contents
{ {
var input = var input =
new NamedContentData() new NamedContentData()
.AddField("field2", .Add("field2",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", 5)) .AddValue("iv", 5))
.AddField("field3", .Add("field3",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", 2)); .AddValue("iv", 2));
@ -302,7 +302,7 @@ namespace Squidex.Domain.Apps.Core.Contents
var expected = var expected =
new NamedContentData() new NamedContentData()
.AddField("field2", .Add("field2",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", 5)); .AddValue("iv", 5));
@ -314,7 +314,7 @@ namespace Squidex.Domain.Apps.Core.Contents
{ {
var data = var data =
new NamedContentData() new NamedContentData()
.AddField("field1", .Add("field1",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", 1)); .AddValue("iv", 1));
@ -326,18 +326,18 @@ namespace Squidex.Domain.Apps.Core.Contents
{ {
var data = var data =
new NamedContentData() new NamedContentData()
.AddField("field1", .Add("field1",
new ContentFieldData() new ContentFieldData()
.AddValue("de", 1) .AddValue("de", 1)
.AddValue("en", 2)) .AddValue("en", 2))
.AddField("field2", .Add("field2",
new ContentFieldData() new ContentFieldData()
.AddValue("de", null) .AddValue("de", null)
.AddValue("en", 4)) .AddValue("en", 4))
.AddField("field3", .Add("field3",
new ContentFieldData() new ContentFieldData()
.AddValue("en", 6)) .AddValue("en", 6))
.AddField("field4", .Add("field4",
new ContentFieldData() new ContentFieldData()
.AddValue("it", 7)); .AddValue("it", 7));
@ -362,18 +362,18 @@ namespace Squidex.Domain.Apps.Core.Contents
{ {
var data = var data =
new NamedContentData() new NamedContentData()
.AddField("field1", .Add("field1",
new ContentFieldData() new ContentFieldData()
.AddValue("de", 1) .AddValue("de", 1)
.AddValue("en", 2)) .AddValue("en", 2))
.AddField("field2", .Add("field2",
new ContentFieldData() new ContentFieldData()
.AddValue("de", null) .AddValue("de", null)
.AddValue("en", 4)) .AddValue("en", 4))
.AddField("field3", .Add("field3",
new ContentFieldData() new ContentFieldData()
.AddValue("en", 6)) .AddValue("en", 6))
.AddField("field4", .Add("field4",
new ContentFieldData() new ContentFieldData()
.AddValue("it", 7)); .AddValue("it", 7));
@ -394,32 +394,32 @@ namespace Squidex.Domain.Apps.Core.Contents
{ {
var lhs = var lhs =
new NamedContentData() new NamedContentData()
.AddField("field1", .Add("field1",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", 1)) .AddValue("iv", 1))
.AddField("field2", .Add("field2",
new ContentFieldData() new ContentFieldData()
.AddValue("de", 2)); .AddValue("de", 2));
var rhs = var rhs =
new NamedContentData() new NamedContentData()
.AddField("field2", .Add("field2",
new ContentFieldData() new ContentFieldData()
.AddValue("en", 3)) .AddValue("en", 3))
.AddField("field3", .Add("field3",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", 4)); .AddValue("iv", 4));
var expected = var expected =
new NamedContentData() new NamedContentData()
.AddField("field1", .Add("field1",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", 1)) .AddValue("iv", 1))
.AddField("field2", .Add("field2",
new ContentFieldData() new ContentFieldData()
.AddValue("de", 2) .AddValue("de", 2)
.AddValue("en", 3)) .AddValue("en", 3))
.AddField("field3", .Add("field3",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", 4)); .AddValue("iv", 4));
@ -433,32 +433,32 @@ namespace Squidex.Domain.Apps.Core.Contents
{ {
var lhs = var lhs =
new IdContentData() new IdContentData()
.AddField(1, .Add(1,
new ContentFieldData() new ContentFieldData()
.AddValue("iv", 1)) .AddValue("iv", 1))
.AddField(2, .Add(2,
new ContentFieldData() new ContentFieldData()
.AddValue("de", 2)); .AddValue("de", 2));
var rhs = var rhs =
new IdContentData() new IdContentData()
.AddField(2, .Add(2,
new ContentFieldData() new ContentFieldData()
.AddValue("en", 3)) .AddValue("en", 3))
.AddField(3, .Add(3,
new ContentFieldData() new ContentFieldData()
.AddValue("iv", 4)); .AddValue("iv", 4));
var expected = var expected =
new IdContentData() new IdContentData()
.AddField(1, .Add(1,
new ContentFieldData() new ContentFieldData()
.AddValue("iv", 1)) .AddValue("iv", 1))
.AddField(2, .Add(2,
new ContentFieldData() new ContentFieldData()
.AddValue("de", 2) .AddValue("de", 2)
.AddValue("en", 3)) .AddValue("en", 3))
.AddField(3, .Add(3,
new ContentFieldData() new ContentFieldData()
.AddValue("iv", 4)); .AddValue("iv", 4));
@ -472,19 +472,19 @@ namespace Squidex.Domain.Apps.Core.Contents
{ {
var lhs = var lhs =
new NamedContentData() new NamedContentData()
.AddField("field1", .Add("field1",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", 2)) .AddValue("iv", 2))
.AddField("field2", .Add("field2",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", 2)); .AddValue("iv", 2));
var rhs = var rhs =
new NamedContentData() new NamedContentData()
.AddField("field1", .Add("field1",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", 2)) .AddValue("iv", 2))
.AddField("field2", .Add("field2",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", 2)); .AddValue("iv", 2));
@ -498,19 +498,19 @@ namespace Squidex.Domain.Apps.Core.Contents
{ {
var lhs = var lhs =
new NamedContentData() new NamedContentData()
.AddField("field1", .Add("field1",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", 2)) .AddValue("iv", 2))
.AddField("field2", .Add("field2",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", 2)); .AddValue("iv", 2));
var rhs = var rhs =
new NamedContentData() new NamedContentData()
.AddField("field1", .Add("field1",
new ContentFieldData() new ContentFieldData()
.AddValue("en", 2)) .AddValue("en", 2))
.AddField("field3", .Add("field3",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", 2)); .AddValue("iv", 2));
@ -527,7 +527,7 @@ namespace Squidex.Domain.Apps.Core.Contents
var input = var input =
new NamedContentData() new NamedContentData()
.AddField("assets1", .Add("assets1",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", new JArray(id1.ToString(), id2.ToString()))); .AddValue("iv", new JArray(id1.ToString(), id2.ToString())));
@ -544,7 +544,7 @@ namespace Squidex.Domain.Apps.Core.Contents
var input = var input =
new IdContentData() new IdContentData()
.AddField(5, .Add(5,
new ContentFieldData() new ContentFieldData()
.AddValue("iv", new JArray(id1.ToString(), id2.ToString()))); .AddValue("iv", new JArray(id1.ToString(), id2.ToString())));

20
tests/Squidex.Domain.Apps.Core.Tests/Schemas/Json/JsonSerializerTests.cs

@ -35,25 +35,25 @@ namespace Squidex.Domain.Apps.Core.Schemas.Json
{ {
var schema = var schema =
Schema.Create("user", new SchemaProperties { Hints = "The User" }) 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())) new JsonFieldProperties()))
.AddOrUpdateField(new AssetsField(2, "my-assets", Partitioning.Invariant, .Add(new AssetsField(2, "my-assets", Partitioning.Invariant,
new AssetsFieldProperties())) 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") })) 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" })) 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 })) new NumberFieldProperties { MinValue = 1, MaxValue = 10 }))
.AddOrUpdateField(new BooleanField(6, "my-boolean", Partitioning.Invariant, .Add(new BooleanField(6, "my-boolean", Partitioning.Invariant,
new BooleanFieldProperties())) new BooleanFieldProperties()))
.AddOrUpdateField(new DateTimeField(7, "my-datetime", Partitioning.Invariant, .Add(new DateTimeField(7, "my-datetime", Partitioning.Invariant,
new DateTimeFieldProperties { Editor = DateTimeFieldEditor.DateTime })) 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 })) 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() })) new ReferencesFieldProperties { SchemaId = Guid.NewGuid() }))
.AddOrUpdateField(new GeolocationField(10, "my-geolocation", Partitioning.Invariant, .Add(new GeolocationField(10, "my-geolocation", Partitioning.Invariant,
new GeolocationFieldProperties())) new GeolocationFieldProperties()))
.HideField(1) .HideField(1)
.LockField(2) .LockField(2)

74
tests/Squidex.Domain.Apps.Core.Tests/Schemas/SchemaTests.cs

@ -64,7 +64,7 @@ namespace Squidex.Domain.Apps.Core.Schemas
[Fact] [Fact]
public void Should_add_field() public void Should_add_field()
{ {
var field = AddField(); var field = Add();
Assert.Equal(field, sut.FieldsById[1]); Assert.Equal(field, sut.FieldsById[1]);
} }
@ -72,15 +72,15 @@ namespace Squidex.Domain.Apps.Core.Schemas
[Fact] [Fact]
public void Should_throw_exception_if_adding_field_with_name_that_already_exists() public void Should_throw_exception_if_adding_field_with_name_that_already_exists()
{ {
AddField(); Add();
Assert.Throws<ValidationException>(() => sut.AddOrUpdateField(new NumberField(2, "my-field", Partitioning.Invariant))); Assert.Throws<ValidationException>(() => sut.Add(new NumberField(2, "my-field", Partitioning.Invariant)));
} }
[Fact] [Fact]
public void Should_hide_field() public void Should_hide_field()
{ {
AddField(); Add();
sut = sut.HideField(1); sut = sut.HideField(1);
sut = sut.HideField(1); sut = sut.HideField(1);
@ -97,7 +97,7 @@ namespace Squidex.Domain.Apps.Core.Schemas
[Fact] [Fact]
public void Should_show_field() public void Should_show_field()
{ {
AddField(); Add();
sut = sut.HideField(1); sut = sut.HideField(1);
sut = sut.ShowField(1); sut = sut.ShowField(1);
@ -115,7 +115,7 @@ namespace Squidex.Domain.Apps.Core.Schemas
[Fact] [Fact]
public void Should_disable_field() public void Should_disable_field()
{ {
AddField(); Add();
sut = sut.DisableField(1); sut = sut.DisableField(1);
sut = sut.DisableField(1); sut = sut.DisableField(1);
@ -132,7 +132,7 @@ namespace Squidex.Domain.Apps.Core.Schemas
[Fact] [Fact]
public void Should_enable_field() public void Should_enable_field()
{ {
AddField(); Add();
sut = sut.DisableField(1); sut = sut.DisableField(1);
sut = sut.EnableField(1); sut = sut.EnableField(1);
@ -150,7 +150,7 @@ namespace Squidex.Domain.Apps.Core.Schemas
[Fact] [Fact]
public void Should_lock_field() public void Should_lock_field()
{ {
AddField(); Add();
sut = sut.LockField(1); sut = sut.LockField(1);
@ -166,7 +166,7 @@ namespace Squidex.Domain.Apps.Core.Schemas
[Fact] [Fact]
public void Should_throw_exception_if_updating_locked_field() public void Should_throw_exception_if_updating_locked_field()
{ {
AddField(); Add();
sut = sut.LockField(1); sut = sut.LockField(1);
@ -176,7 +176,7 @@ namespace Squidex.Domain.Apps.Core.Schemas
[Fact] [Fact]
public void Should_throw_exception_if_renaming_locked_field() public void Should_throw_exception_if_renaming_locked_field()
{ {
AddField(); Add();
sut = sut.LockField(1); sut = sut.LockField(1);
@ -186,7 +186,7 @@ namespace Squidex.Domain.Apps.Core.Schemas
[Fact] [Fact]
public void Should_throw_exception_if_deleting_locked_field() public void Should_throw_exception_if_deleting_locked_field()
{ {
AddField(); Add();
sut = sut.LockField(1); sut = sut.LockField(1);
@ -196,7 +196,7 @@ namespace Squidex.Domain.Apps.Core.Schemas
[Fact] [Fact]
public void Should_rename_field() public void Should_rename_field()
{ {
AddField(); Add();
sut = sut.RenameField(1, "new-name"); sut = sut.RenameField(1, "new-name");
@ -206,9 +206,9 @@ namespace Squidex.Domain.Apps.Core.Schemas
[Fact] [Fact]
public void Should_throw_exception_if_new_field_already_exists() 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<ValidationException>(() => sut.RenameField(2, "my-field")); Assert.Throws<ValidationException>(() => sut.RenameField(2, "my-field"));
} }
@ -216,7 +216,7 @@ namespace Squidex.Domain.Apps.Core.Schemas
[Fact] [Fact]
public void Should_throw_exception_if_new_field_name_is_not_valid() public void Should_throw_exception_if_new_field_name_is_not_valid()
{ {
AddField(); Add();
Assert.Throws<ValidationException>(() => sut.RenameField(1, "new name")); Assert.Throws<ValidationException>(() => sut.RenameField(1, "new name"));
} }
@ -230,7 +230,7 @@ namespace Squidex.Domain.Apps.Core.Schemas
[Fact] [Fact]
public void Should_delete_field() public void Should_delete_field()
{ {
AddField(); Add();
sut = sut.DeleteField(1); sut = sut.DeleteField(1);
@ -246,7 +246,7 @@ namespace Squidex.Domain.Apps.Core.Schemas
[Fact] [Fact]
public void Should_update_field() public void Should_update_field()
{ {
AddField(); Add();
sut = sut.UpdateField(1, new NumberFieldProperties { Hints = "my-hints" }); sut = sut.UpdateField(1, new NumberFieldProperties { Hints = "my-hints" });
@ -256,7 +256,7 @@ namespace Squidex.Domain.Apps.Core.Schemas
[Fact] [Fact]
public void Should_throw_exception_if_updating_field_with_invalid_property_type() public void Should_throw_exception_if_updating_field_with_invalid_property_type()
{ {
AddField(); Add();
Assert.Throws<ArgumentException>(() => sut.UpdateField(1, new InvalidProperties())); Assert.Throws<ArgumentException>(() => sut.UpdateField(1, new InvalidProperties()));
} }
@ -305,9 +305,9 @@ namespace Squidex.Domain.Apps.Core.Schemas
var field2 = new StringField(2, "2", Partitioning.Invariant); var field2 = new StringField(2, "2", Partitioning.Invariant);
var field3 = new StringField(3, "3", Partitioning.Invariant); var field3 = new StringField(3, "3", Partitioning.Invariant);
sut = sut.AddOrUpdateField(field1); sut = sut.Add(field1);
sut = sut.AddOrUpdateField(field2); sut = sut.Add(field2);
sut = sut.AddOrUpdateField(field3); sut = sut.Add(field3);
sut = sut.ReorderFields(new List<long> { 3, 2, 1 }); sut = sut.ReorderFields(new List<long> { 3, 2, 1 });
Assert.Equal(new List<Field> { field3, field2, field1 }, sut.Fields.ToList()); Assert.Equal(new List<Field> { 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 field1 = new StringField(1, "1", Partitioning.Invariant);
var field2 = new StringField(2, "2", Partitioning.Invariant); var field2 = new StringField(2, "2", Partitioning.Invariant);
sut = sut.AddOrUpdateField(field1); sut = sut.Add(field1);
sut = sut.AddOrUpdateField(field2); sut = sut.Add(field2);
Assert.Throws<ArgumentException>(() => sut.ReorderFields(new List<long> { 1 })); Assert.Throws<ArgumentException>(() => sut.ReorderFields(new List<long> { 1 }));
} }
@ -331,8 +331,8 @@ namespace Squidex.Domain.Apps.Core.Schemas
var field1 = new StringField(1, "1", Partitioning.Invariant); var field1 = new StringField(1, "1", Partitioning.Invariant);
var field2 = new StringField(2, "2", Partitioning.Invariant); var field2 = new StringField(2, "2", Partitioning.Invariant);
sut = sut.AddOrUpdateField(field1); sut = sut.Add(field1);
sut = sut.AddOrUpdateField(field2); sut = sut.Add(field2);
Assert.Throws<ArgumentException>(() => sut.ReorderFields(new List<long> { 1, 4 })); Assert.Throws<ArgumentException>(() => sut.ReorderFields(new List<long> { 1, 4 }));
} }
@ -361,35 +361,35 @@ namespace Squidex.Domain.Apps.Core.Schemas
{ {
var schema = var schema =
Schema.Create("user", new SchemaProperties { Hints = "The User" }) 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())) new JsonFieldProperties()))
.AddOrUpdateField(new AssetsField(2, "my-assets", Partitioning.Invariant, .Add(new AssetsField(2, "my-assets", Partitioning.Invariant,
new AssetsFieldProperties())) 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") })) 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" })) 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 })) new NumberFieldProperties { MinValue = 1, MaxValue = 10 }))
.AddOrUpdateField(new BooleanField(6, "my-boolean", Partitioning.Invariant, .Add(new BooleanField(6, "my-boolean", Partitioning.Invariant,
new BooleanFieldProperties())) new BooleanFieldProperties()))
.AddOrUpdateField(new DateTimeField(7, "my-datetime", Partitioning.Invariant, .Add(new DateTimeField(7, "my-datetime", Partitioning.Invariant,
new DateTimeFieldProperties { Editor = DateTimeFieldEditor.DateTime })) 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 })) new DateTimeFieldProperties { Editor = DateTimeFieldEditor.Date }))
.AddOrUpdateField(new GeolocationField(9, "my-geolocation", Partitioning.Invariant, .Add(new GeolocationField(9, "my-geolocation", Partitioning.Invariant,
new GeolocationFieldProperties())) new GeolocationFieldProperties()))
.AddOrUpdateField(new ReferencesField(10, "my-references", Partitioning.Invariant, .Add(new ReferencesField(10, "my-references", Partitioning.Invariant,
new ReferencesFieldProperties())); new ReferencesFieldProperties()));
return schema; return schema;
} }
private NumberField AddField() private NumberField Add()
{ {
var field = new NumberField(1, "my-field", Partitioning.Invariant); var field = new NumberField(1, "my-field", Partitioning.Invariant);
sut = sut.AddOrUpdateField(field); sut = sut.Add(field);
return field; return field;
} }

42
tests/Squidex.Domain.Apps.Core.Tests/Scripting/ContentDataObjectTests.cs

@ -24,7 +24,7 @@ namespace Squidex.Domain.Apps.Core.Scripting
var expected = var expected =
new NamedContentData() new NamedContentData()
.AddField("number", .Add("number",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", 1.0)); .AddValue("iv", 1.0));
@ -40,7 +40,7 @@ namespace Squidex.Domain.Apps.Core.Scripting
var expected = var expected =
new NamedContentData() new NamedContentData()
.AddField("number", .Add("number",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", 1.0)); .AddValue("iv", 1.0));
@ -62,7 +62,7 @@ namespace Squidex.Domain.Apps.Core.Scripting
{ {
var original = var original =
new NamedContentData() new NamedContentData()
.AddField("number", .Add("number",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", 1.0)); .AddValue("iv", 1.0));
@ -78,13 +78,13 @@ namespace Squidex.Domain.Apps.Core.Scripting
{ {
var original = var original =
new NamedContentData() new NamedContentData()
.AddField("string", .Add("string",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", "1")); .AddValue("iv", "1"));
var expected = var expected =
new NamedContentData() new NamedContentData()
.AddField("string", .Add("string",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", "1new")); .AddValue("iv", "1new"));
@ -98,13 +98,13 @@ namespace Squidex.Domain.Apps.Core.Scripting
{ {
var original = var original =
new NamedContentData() new NamedContentData()
.AddField("number", .Add("number",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", 1.0)); .AddValue("iv", 1.0));
var expected = var expected =
new NamedContentData() new NamedContentData()
.AddField("number", .Add("number",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", 3.0)); .AddValue("iv", 3.0));
@ -118,13 +118,13 @@ namespace Squidex.Domain.Apps.Core.Scripting
{ {
var original = var original =
new NamedContentData() new NamedContentData()
.AddField("boolean", .Add("boolean",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", false)); .AddValue("iv", false));
var expected = var expected =
new NamedContentData() new NamedContentData()
.AddField("boolean", .Add("boolean",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", true)); .AddValue("iv", true));
@ -138,13 +138,13 @@ namespace Squidex.Domain.Apps.Core.Scripting
{ {
var original = var original =
new NamedContentData() new NamedContentData()
.AddField("number", .Add("number",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", new JArray(1.0, 2.0))); .AddValue("iv", new JArray(1.0, 2.0)));
var expected = var expected =
new NamedContentData() new NamedContentData()
.AddField("number", .Add("number",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", new JArray(1.0, 4.0, 5.0))); .AddValue("iv", new JArray(1.0, 4.0, 5.0)));
@ -158,13 +158,13 @@ namespace Squidex.Domain.Apps.Core.Scripting
{ {
var original = var original =
new NamedContentData() new NamedContentData()
.AddField("number", .Add("number",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", new JObject(new JProperty("lat", 1.0)))); .AddValue("iv", new JObject(new JProperty("lat", 1.0))));
var expected = var expected =
new NamedContentData() new NamedContentData()
.AddField("number", .Add("number",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", new JObject(new JProperty("lat", 1.0), new JProperty("lon", 4.0)))); .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 = var original =
new NamedContentData() new NamedContentData()
.AddField("number", .Add("number",
new ContentFieldData()); new ContentFieldData());
var expected = var expected =
new NamedContentData() new NamedContentData()
.AddField("number", .Add("number",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", 1.0)); .AddValue("iv", 1.0));
@ -197,13 +197,13 @@ namespace Squidex.Domain.Apps.Core.Scripting
{ {
var original = var original =
new NamedContentData() new NamedContentData()
.AddField("string", .Add("string",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", "hello")); .AddValue("iv", "hello"));
var expected = var expected =
new NamedContentData() new NamedContentData()
.AddField("string", .Add("string",
new ContentFieldData()); new ContentFieldData());
var result = ExecuteScript(original, @"delete data.string.iv"); var result = ExecuteScript(original, @"delete data.string.iv");
@ -216,11 +216,11 @@ namespace Squidex.Domain.Apps.Core.Scripting
{ {
var content = var content =
new NamedContentData() new NamedContentData()
.AddField("f1", .Add("f1",
new ContentFieldData() new ContentFieldData()
.AddValue("v11", "1") .AddValue("v11", "1")
.AddValue("v12", "2")) .AddValue("v12", "2"))
.AddField("f2", .Add("f2",
new ContentFieldData() new ContentFieldData()
.AddValue("v21", "3") .AddValue("v21", "3")
.AddValue("v22", "4")); .AddValue("v22", "4"));
@ -248,7 +248,7 @@ namespace Squidex.Domain.Apps.Core.Scripting
{ {
var original = var original =
new NamedContentData() new NamedContentData()
.AddField("obj", .Add("obj",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", new JObject(new JProperty("readonly", 1)))); .AddValue("iv", new JObject(new JProperty("readonly", 1))));
@ -261,7 +261,7 @@ namespace Squidex.Domain.Apps.Core.Scripting
{ {
var original = var original =
new NamedContentData() new NamedContentData()
.AddField("obj", .Add("obj",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", new JArray())); .AddValue("iv", new JArray()));

18
tests/Squidex.Domain.Apps.Core.Tests/Scripting/JintScriptEngineTests.cs

@ -87,7 +87,7 @@ namespace Squidex.Domain.Apps.Core.Scripting
var expected = var expected =
new NamedContentData() new NamedContentData()
.AddField("operation", .Add("operation",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", "MyOperation")); .AddValue("iv", "MyOperation"));
@ -108,18 +108,18 @@ namespace Squidex.Domain.Apps.Core.Scripting
{ {
var content = var content =
new NamedContentData() new NamedContentData()
.AddField("number0", .Add("number0",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", 1.0)) .AddValue("iv", 1.0))
.AddField("number1", .Add("number1",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", 1.0)); .AddValue("iv", 1.0));
var expected = var expected =
new NamedContentData() new NamedContentData()
.AddField("number1", .Add("number1",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", 2.0)) .AddValue("iv", 2.0))
.AddField("number2", .Add("number2",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", 10.0)); .AddValue("iv", 10.0));
@ -143,18 +143,18 @@ namespace Squidex.Domain.Apps.Core.Scripting
{ {
var content = var content =
new NamedContentData() new NamedContentData()
.AddField("number0", .Add("number0",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", 1.0)) .AddValue("iv", 1.0))
.AddField("number1", .Add("number1",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", 1.0)); .AddValue("iv", 1.0));
var expected = var expected =
new NamedContentData() new NamedContentData()
.AddField("number1", .Add("number1",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", 2.0)) .AddValue("iv", 2.0))
.AddField("number2", .Add("number2",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", 10.0)); .AddValue("iv", 10.0));

34
tests/Squidex.Domain.Apps.Read.Tests/Contents/GraphQLTests.cs

@ -40,23 +40,23 @@ namespace Squidex.Domain.Apps.Read.Contents
private readonly Schema schemaDef = private readonly Schema schemaDef =
Schema.Create("my-schema", new SchemaProperties()) Schema.Create("my-schema", new SchemaProperties())
.AddOrUpdateField(new JsonField(1, "my-json", Partitioning.Invariant, .Add(new JsonField(1, "my-json", Partitioning.Invariant,
new JsonFieldProperties())) new JsonFieldProperties()))
.AddOrUpdateField(new StringField(2, "my-string", Partitioning.Language, .Add(new StringField(2, "my-string", Partitioning.Language,
new StringFieldProperties())) new StringFieldProperties()))
.AddOrUpdateField(new NumberField(3, "my-number", Partitioning.Invariant, .Add(new NumberField(3, "my-number", Partitioning.Invariant,
new NumberFieldProperties())) new NumberFieldProperties()))
.AddOrUpdateField(new AssetsField(4, "my-assets", Partitioning.Invariant, .Add(new AssetsField(4, "my-assets", Partitioning.Invariant,
new AssetsFieldProperties())) new AssetsFieldProperties()))
.AddOrUpdateField(new BooleanField(5, "my-boolean", Partitioning.Invariant, .Add(new BooleanField(5, "my-boolean", Partitioning.Invariant,
new BooleanFieldProperties())) new BooleanFieldProperties()))
.AddOrUpdateField(new DateTimeField(6, "my-datetime", Partitioning.Invariant, .Add(new DateTimeField(6, "my-datetime", Partitioning.Invariant,
new DateTimeFieldProperties())) new DateTimeFieldProperties()))
.AddOrUpdateField(new ReferencesField(7, "my-references", Partitioning.Invariant, .Add(new ReferencesField(7, "my-references", Partitioning.Invariant,
new ReferencesFieldProperties { SchemaId = schemaId })) 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() })) new ReferencesFieldProperties { SchemaId = Guid.NewGuid() }))
.AddOrUpdateField(new GeolocationField(9, "my-geolocation", Partitioning.Invariant, .Add(new GeolocationField(9, "my-geolocation", Partitioning.Invariant,
new GeolocationFieldProperties())); new GeolocationFieldProperties()));
private readonly IContentQueryService contentQuery = A.Fake<IContentQueryService>(); private readonly IContentQueryService contentQuery = A.Fake<IContentQueryService>();
@ -611,21 +611,21 @@ namespace Squidex.Domain.Apps.Read.Contents
data = data ?? data = data ??
new NamedContentData() new NamedContentData()
.AddField("my-json", .Add("my-json",
new ContentFieldData().AddValue("iv", JToken.FromObject(new { value = 1 }))) new ContentFieldData().AddValue("iv", JToken.FromObject(new { value = 1 })))
.AddField("my-string", .Add("my-string",
new ContentFieldData().AddValue("iv", "value")) new ContentFieldData().AddValue("iv", "value"))
.AddField("my-assets", .Add("my-assets",
new ContentFieldData().AddValue("iv", JToken.FromObject(new[] { assetId }))) new ContentFieldData().AddValue("iv", JToken.FromObject(new[] { assetId })))
.AddField("my-number", .Add("my-number",
new ContentFieldData().AddValue("iv", 1)) new ContentFieldData().AddValue("iv", 1))
.AddField("my-boolean", .Add("my-boolean",
new ContentFieldData().AddValue("iv", true)) new ContentFieldData().AddValue("iv", true))
.AddField("my-datetime", .Add("my-datetime",
new ContentFieldData().AddValue("iv", now.ToDateTimeUtc())) new ContentFieldData().AddValue("iv", now.ToDateTimeUtc()))
.AddField("my-references", .Add("my-references",
new ContentFieldData().AddValue("iv", JToken.FromObject(new[] { refId }))) 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 }))); new ContentFieldData().AddValue("iv", JToken.FromObject(new { latitude = 10, longitude = 20 })));
var content = new FakeContentEntity var content = new FakeContentEntity

16
tests/Squidex.Domain.Apps.Read.Tests/Contents/ODataQueryTests.cs

@ -31,21 +31,21 @@ namespace Squidex.Domain.Apps.Read.Contents
{ {
private readonly Schema schemaDef = private readonly Schema schemaDef =
Schema.Create("user", new SchemaProperties { Hints = "The User" }) 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() })) 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 })) new StringFieldProperties { Hints = "Last Name", Editor = StringFieldEditor.Input }))
.AddOrUpdateField(new BooleanField(3, "isAdmin", Partitioning.Invariant, .Add(new BooleanField(3, "isAdmin", Partitioning.Invariant,
new BooleanFieldProperties())) new BooleanFieldProperties()))
.AddOrUpdateField(new NumberField(4, "age", Partitioning.Invariant, .Add(new NumberField(4, "age", Partitioning.Invariant,
new NumberFieldProperties { MinValue = 1, MaxValue = 10 })) new NumberFieldProperties { MinValue = 1, MaxValue = 10 }))
.AddOrUpdateField(new DateTimeField(5, "birthday", Partitioning.Invariant, .Add(new DateTimeField(5, "birthday", Partitioning.Invariant,
new DateTimeFieldProperties())) new DateTimeFieldProperties()))
.AddOrUpdateField(new AssetsField(6, "pictures", Partitioning.Invariant, .Add(new AssetsField(6, "pictures", Partitioning.Invariant,
new AssetsFieldProperties())) new AssetsFieldProperties()))
.AddOrUpdateField(new ReferencesField(7, "friends", Partitioning.Invariant, .Add(new ReferencesField(7, "friends", Partitioning.Invariant,
new ReferencesFieldProperties())) new ReferencesFieldProperties()))
.AddOrUpdateField(new StringField(8, "dashed-field", Partitioning.Invariant, .Add(new StringField(8, "dashed-field", Partitioning.Invariant,
new StringFieldProperties())); new StringFieldProperties()));
private readonly IBsonSerializerRegistry registry = BsonSerializer.SerializerRegistry; private readonly IBsonSerializerRegistry registry = BsonSerializer.SerializerRegistry;

8
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<IAppProvider>(); private readonly IAppProvider appProvider = A.Fake<IAppProvider>();
private readonly IAppEntity app = A.Fake<IAppEntity>(); private readonly IAppEntity app = A.Fake<IAppEntity>();
private readonly ClaimsPrincipal user = new ClaimsPrincipal(); private readonly ClaimsPrincipal user = new ClaimsPrincipal();
private readonly NamedContentData invalidData = new NamedContentData().AddField("my-field", new ContentFieldData().SetValue(null)); private readonly NamedContentData invalidData = new NamedContentData().Add("my-field", new ContentFieldData().SetValue(null));
private readonly NamedContentData data = new NamedContentData().AddField("my-field", new ContentFieldData().SetValue(1)); private readonly NamedContentData data = new NamedContentData().Add("my-field", new ContentFieldData().SetValue(1));
private readonly LanguagesConfig languagesConfig = LanguagesConfig.Create(Language.DE); private readonly LanguagesConfig languagesConfig = LanguagesConfig.Create(Language.DE);
private readonly Guid contentId = Guid.NewGuid(); private readonly Guid contentId = Guid.NewGuid();
@ -47,7 +47,7 @@ namespace Squidex.Domain.Apps.Write.Contents
{ {
var schemaDef = var schemaDef =
Schema.Create("my-schema", new SchemaProperties()) 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 })); new NumberFieldProperties { IsRequired = true }));
content = new ContentDomainObject(contentId, -1); content = new ContentDomainObject(contentId, -1);
@ -177,7 +177,7 @@ namespace Squidex.Domain.Apps.Write.Contents
A.CallTo(() => scriptEngine.ExecuteAndTransform(A<ScriptContext>.Ignored, A<string>.Ignored)) A.CallTo(() => scriptEngine.ExecuteAndTransform(A<ScriptContext>.Ignored, A<string>.Ignored))
.Returns(data); .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<ScriptContext>.Ignored, A<string>.Ignored)).Returns(patch); A.CallTo(() => scriptEngine.ExecuteAndTransform(A<ScriptContext>.Ignored, A<string>.Ignored)).Returns(patch);

4
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 ContentDomainObject sut;
private readonly NamedContentData data = private readonly NamedContentData data =
new NamedContentData() new NamedContentData()
.AddField("field1", .Add("field1",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", 1)); .AddValue("iv", 1));
private readonly NamedContentData otherData = private readonly NamedContentData otherData =
new NamedContentData() new NamedContentData()
.AddField("field2", .Add("field2",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", 2)); .AddValue("iv", 2));

6
tests/Squidex.Domain.Apps.Write.Tests/Schemas/SchemaCommandMiddlewareTests.cs

@ -150,11 +150,11 @@ namespace Squidex.Domain.Apps.Write.Schemas
} }
[Fact] [Fact]
public async Task AddField_should_update_domain_object() public async Task Add_should_update_domain_object()
{ {
CreateSchema(); 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 _ => await TestUpdate(schema, async _ =>
{ {
@ -274,7 +274,7 @@ namespace Squidex.Domain.Apps.Write.Schemas
private void CreateField() private void CreateField()
{ {
schema.AddField(CreateCommand(new AddField { Name = fieldName, Properties = new NumberFieldProperties() })); schema.Add(CreateCommand(new Add { Name = fieldName, Properties = new NumberFieldProperties() }));
} }
} }
} }

26
tests/Squidex.Domain.Apps.Write.Tests/Schemas/SchemaDomainObjectTests.cs

@ -244,8 +244,8 @@ namespace Squidex.Domain.Apps.Write.Schemas
CreateSchema(); CreateSchema();
sut.AddField(new AddField { Name = "field1", Properties = new StringFieldProperties() }); sut.Add(new Add { Name = "field1", Properties = new StringFieldProperties() });
sut.AddField(new AddField { Name = "field2", Properties = new StringFieldProperties() }); sut.Add(new Add { Name = "field2", Properties = new StringFieldProperties() });
((IAggregate)sut).ClearUncommittedEvents(); ((IAggregate)sut).ClearUncommittedEvents();
@ -367,52 +367,52 @@ namespace Squidex.Domain.Apps.Write.Schemas
} }
[Fact] [Fact]
public void AddField_should_throw_exception_if_not_created() public void Add_should_throw_exception_if_not_created()
{ {
Assert.Throws<DomainException>(() => Assert.Throws<DomainException>(() =>
{ {
sut.AddField(CreateCommand(new AddField { Name = fieldName, Properties = new NumberFieldProperties() })); sut.Add(CreateCommand(new Add { Name = fieldName, Properties = new NumberFieldProperties() }));
}); });
} }
[Fact] [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<ValidationException>(() => Assert.Throws<ValidationException>(() =>
{ {
sut.AddField(CreateCommand(new AddField())); sut.Add(CreateCommand(new Add()));
}); });
} }
[Fact] [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<ValidationException>(() => Assert.Throws<ValidationException>(() =>
{ {
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] [Fact]
public void AddField_should_throw_exception_if_schema_is_deleted() public void Add_should_throw_exception_if_schema_is_deleted()
{ {
CreateSchema(); CreateSchema();
DeleteSchema(); DeleteSchema();
Assert.Throws<DomainException>(() => Assert.Throws<DomainException>(() =>
{ {
sut.AddField(CreateCommand(new AddField { Name = fieldName, Properties = new NumberFieldProperties() })); sut.Add(CreateCommand(new Add { Name = fieldName, Properties = new NumberFieldProperties() }));
}); });
} }
[Fact] [Fact]
public void AddField_should_update_schema_and_create_events() public void Add_should_update_schema_and_create_events()
{ {
var properties = new NumberFieldProperties(); var properties = new NumberFieldProperties();
CreateSchema(); 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); Assert.Equal(properties, sut.Schema.FieldsById[1].RawProperties);
@ -762,7 +762,7 @@ namespace Squidex.Domain.Apps.Write.Schemas
private void CreateField() private void CreateField()
{ {
sut.AddField(new AddField { Name = fieldName, Properties = new NumberFieldProperties() }); sut.Add(new Add { Name = fieldName, Properties = new NumberFieldProperties() });
((IAggregate)sut).ClearUncommittedEvents(); ((IAggregate)sut).ClearUncommittedEvents();
} }

Loading…
Cancel
Save