From a6b5318bedbe2c33f3330dcf544fe49560fa80e6 Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Sun, 18 Feb 2018 18:14:56 +0100 Subject: [PATCH] API extended --- .../Schemas/NumberFieldProperties.cs | 2 ++ .../Schemas/StringFieldProperties.cs | 2 ++ .../Guards/FieldPropertiesValidator.cs | 14 +++++++++ .../Fields/BooleanFieldPropertiesDto.cs | 5 +++ .../Models/Fields/NumberFieldPropertiesDto.cs | 5 +++ .../Models/Fields/StringFieldPropertiesDto.cs | 5 +++ .../NumberFieldPropertiesTests.cs | 28 +++++++++++++++++ .../StringFieldPropertiesTests.cs | 31 +++++++++++++++++++ 8 files changed, 92 insertions(+) diff --git a/src/Squidex.Domain.Apps.Core.Model/Schemas/NumberFieldProperties.cs b/src/Squidex.Domain.Apps.Core.Model/Schemas/NumberFieldProperties.cs index bd86a2a74..5732601a9 100644 --- a/src/Squidex.Domain.Apps.Core.Model/Schemas/NumberFieldProperties.cs +++ b/src/Squidex.Domain.Apps.Core.Model/Schemas/NumberFieldProperties.cs @@ -21,6 +21,8 @@ namespace Squidex.Domain.Apps.Core.Schemas public double? DefaultValue { get; set; } + public bool InlineEditable { get; set; } + public NumberFieldEditor Editor { get; set; } public override T Accept(IFieldPropertiesVisitor visitor) diff --git a/src/Squidex.Domain.Apps.Core.Model/Schemas/StringFieldProperties.cs b/src/Squidex.Domain.Apps.Core.Model/Schemas/StringFieldProperties.cs index 008c18c58..df46bdf6d 100644 --- a/src/Squidex.Domain.Apps.Core.Model/Schemas/StringFieldProperties.cs +++ b/src/Squidex.Domain.Apps.Core.Model/Schemas/StringFieldProperties.cs @@ -19,6 +19,8 @@ namespace Squidex.Domain.Apps.Core.Schemas public int? MaxLength { get; set; } + public bool InlineEditable { get; set; } + public string DefaultValue { get; set; } public string Pattern { get; set; } diff --git a/src/Squidex.Domain.Apps.Entities/Schemas/Guards/FieldPropertiesValidator.cs b/src/Squidex.Domain.Apps.Entities/Schemas/Guards/FieldPropertiesValidator.cs index 44becd941..28ddfda3f 100644 --- a/src/Squidex.Domain.Apps.Entities/Schemas/Guards/FieldPropertiesValidator.cs +++ b/src/Squidex.Domain.Apps.Entities/Schemas/Guards/FieldPropertiesValidator.cs @@ -170,6 +170,13 @@ namespace Squidex.Domain.Apps.Entities.Schemas.Guards nameof(properties.MinValue), nameof(properties.MaxValue)); } + + if (properties.InlineEditable && properties.Editor != NumberFieldEditor.Input && properties.Editor != NumberFieldEditor.Dropdown) + { + yield return new ValidationError("Inline editing is only allowed for dropdowns and input fields.", + nameof(properties.InlineEditable), + nameof(properties.Editor)); + } } public IEnumerable Visit(ReferencesFieldProperties properties) @@ -216,6 +223,13 @@ namespace Squidex.Domain.Apps.Entities.Schemas.Guards nameof(properties.MinLength), nameof(properties.MaxLength)); } + + if (properties.InlineEditable && properties.Editor != StringFieldEditor.Input && properties.Editor != StringFieldEditor.Input && properties.Editor != StringFieldEditor.Slug) + { + yield return new ValidationError("Inline editing is only allowed for dropdowns, slugs and input fields.", + nameof(properties.InlineEditable), + nameof(properties.Editor)); + } } public IEnumerable Visit(TagsFieldProperties properties) diff --git a/src/Squidex/Areas/Api/Controllers/Schemas/Models/Fields/BooleanFieldPropertiesDto.cs b/src/Squidex/Areas/Api/Controllers/Schemas/Models/Fields/BooleanFieldPropertiesDto.cs index 2f7552b87..45964540e 100644 --- a/src/Squidex/Areas/Api/Controllers/Schemas/Models/Fields/BooleanFieldPropertiesDto.cs +++ b/src/Squidex/Areas/Api/Controllers/Schemas/Models/Fields/BooleanFieldPropertiesDto.cs @@ -21,6 +21,11 @@ namespace Squidex.Areas.Api.Controllers.Schemas.Models.Fields /// public bool? DefaultValue { get; set; } + /// + /// Indicates that the inline editor is enabled for this field. + /// + public bool InlineEditable { get; set; } + /// /// The editor that is used to manage this field. /// diff --git a/src/Squidex/Areas/Api/Controllers/Schemas/Models/Fields/NumberFieldPropertiesDto.cs b/src/Squidex/Areas/Api/Controllers/Schemas/Models/Fields/NumberFieldPropertiesDto.cs index 4efdf18e1..3a255891c 100644 --- a/src/Squidex/Areas/Api/Controllers/Schemas/Models/Fields/NumberFieldPropertiesDto.cs +++ b/src/Squidex/Areas/Api/Controllers/Schemas/Models/Fields/NumberFieldPropertiesDto.cs @@ -37,6 +37,11 @@ namespace Squidex.Areas.Api.Controllers.Schemas.Models.Fields /// public double[] AllowedValues { get; set; } + /// + /// Indicates that the inline editor is enabled for this field. + /// + public bool InlineEditable { get; set; } + /// /// The editor that is used to manage this field. /// diff --git a/src/Squidex/Areas/Api/Controllers/Schemas/Models/Fields/StringFieldPropertiesDto.cs b/src/Squidex/Areas/Api/Controllers/Schemas/Models/Fields/StringFieldPropertiesDto.cs index 5cae9dfb9..4451846ca 100644 --- a/src/Squidex/Areas/Api/Controllers/Schemas/Models/Fields/StringFieldPropertiesDto.cs +++ b/src/Squidex/Areas/Api/Controllers/Schemas/Models/Fields/StringFieldPropertiesDto.cs @@ -47,6 +47,11 @@ namespace Squidex.Areas.Api.Controllers.Schemas.Models.Fields /// public string[] AllowedValues { get; set; } + /// + /// Indicates that the inline editor is enabled for this field. + /// + public bool InlineEditable { get; set; } + /// /// The editor that is used to manage this field. /// diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Schemas/Guards/FieldProperties/NumberFieldPropertiesTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Schemas/Guards/FieldProperties/NumberFieldPropertiesTests.cs index 26fb5be47..7b2dd9448 100644 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Schemas/Guards/FieldProperties/NumberFieldPropertiesTests.cs +++ b/tests/Squidex.Domain.Apps.Entities.Tests/Schemas/Guards/FieldProperties/NumberFieldPropertiesTests.cs @@ -129,5 +129,33 @@ namespace Squidex.Domain.Apps.Entities.Schemas.Guards.FieldProperties new ValidationError("Editor is not a valid value.", "Editor") }); } + + [Theory] + [InlineData(NumberFieldEditor.Radio)] + [InlineData(NumberFieldEditor.Stars)] + public void Should_add_error_if_inline_editing_is_not_allowed_for_editor(NumberFieldEditor editor) + { + var sut = new NumberFieldProperties { InlineEditable = true, Editor = editor }; + + var errors = FieldPropertiesValidator.Validate(sut).ToList(); + + errors.ShouldBeEquivalentTo( + new List + { + new ValidationError("Inline editing is only allowed for dropdowns and input fields.", "InlineEditable", "Editor") + }); + } + + [Theory] + [InlineData(NumberFieldEditor.Input)] + [InlineData(NumberFieldEditor.Dropdown)] + public void Should_not_add_error_if_inline_editing_is_allowed_for_editor(NumberFieldEditor editor) + { + var sut = new NumberFieldProperties { InlineEditable = true, Editor = editor }; + + var errors = FieldPropertiesValidator.Validate(sut).ToList(); + + Assert.Empty(errors); + } } } diff --git a/tests/Squidex.Domain.Apps.Entities.Tests/Schemas/Guards/FieldProperties/StringFieldPropertiesTests.cs b/tests/Squidex.Domain.Apps.Entities.Tests/Schemas/Guards/FieldProperties/StringFieldPropertiesTests.cs index 31c922809..1169c2088 100644 --- a/tests/Squidex.Domain.Apps.Entities.Tests/Schemas/Guards/FieldProperties/StringFieldPropertiesTests.cs +++ b/tests/Squidex.Domain.Apps.Entities.Tests/Schemas/Guards/FieldProperties/StringFieldPropertiesTests.cs @@ -100,5 +100,36 @@ namespace Squidex.Domain.Apps.Entities.Schemas.Guards.FieldProperties new ValidationError("Pattern is not a valid expression.", "Pattern") }); } + + [Theory] + [InlineData(StringFieldEditor.Markdown)] + [InlineData(StringFieldEditor.Radio)] + [InlineData(StringFieldEditor.RichText)] + [InlineData(StringFieldEditor.TextArea)] + public void Should_add_error_if_inline_editing_is_not_allowed_for_editor(StringFieldEditor editor) + { + var sut = new StringFieldProperties { InlineEditable = true, Editor = editor }; + + var errors = FieldPropertiesValidator.Validate(sut).ToList(); + + errors.ShouldBeEquivalentTo( + new List + { + new ValidationError("Inline editing is only allowed for dropdowns, slugs and input fields.", "InlineEditable", "Editor") + }); + } + + [Theory] + [InlineData(StringFieldEditor.Dropdown)] + [InlineData(StringFieldEditor.Input)] + [InlineData(StringFieldEditor.Slug)] + public void Should_not_add_error_if_inline_editing_is_allowed_for_editor(StringFieldEditor editor) + { + var sut = new StringFieldProperties { InlineEditable = true, Editor = editor }; + + var errors = FieldPropertiesValidator.Validate(sut).ToList(); + + Assert.Empty(errors); + } } }