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());
}
public IdContentData AddField(long id, ContentFieldData data)
public IdContentData Add(long id, ContentFieldData data)
{
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());
}
public NamedContentData AddField(string name, ContentFieldData data)
public NamedContentData Add(string name, ContentFieldData data)
{
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
{
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<long> ids)
public Schema UpdateField(long fieldId, Func<Field, Field> 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<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));

4
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)

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";
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(),

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)
{
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<NamedContentData, ContentFieldData>(c => c.Source.GetOrDefault(field.Name));
AddField(new FieldType
Add(new FieldType
{
Name = field.Name.ToCamelCase(),
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);
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),

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)
{
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

4
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; }

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 =>
{
s.AddField(command);
s.Add(command);
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;
}
public SchemaDomainObject AddField(AddField command)
public SchemaDomainObject Add(Add command)
{
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
// ==========================================================================
// 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
{
/// <summary>
/// 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), 400)]
[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,
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 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));

48
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));

144
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())));

20
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)

74
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<ValidationException>(() => sut.AddOrUpdateField(new NumberField(2, "my-field", Partitioning.Invariant)));
Assert.Throws<ValidationException>(() => 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<ValidationException>(() => 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<ValidationException>(() => 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<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 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<long> { 3, 2, 1 });
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 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<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 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<ArgumentException>(() => sut.ReorderFields(new List<long> { 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;
}

42
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()));

18
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));

34
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<IContentQueryService>();
@ -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

16
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;

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 IAppEntity app = A.Fake<IAppEntity>();
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<ScriptContext>.Ignored, A<string>.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<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 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));

6
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() }));
}
}
}

26
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<DomainException>(() =>
{
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<ValidationException>(() =>
{
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<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]
public void AddField_should_throw_exception_if_schema_is_deleted()
public void Add_should_throw_exception_if_schema_is_deleted()
{
CreateSchema();
DeleteSchema();
Assert.Throws<DomainException>(() =>
{
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();
}

Loading…
Cancel
Save