Browse Source

Freezable improved.

pull/240/head
Sebastian Stehle 8 years ago
parent
commit
07f44444ee
  1. 4
      src/Squidex.Domain.Apps.Core.Model/FodyWeavers.xml
  2. 18
      src/Squidex.Domain.Apps.Core.Model/Freezable.cs
  3. 46
      src/Squidex.Domain.Apps.Core.Model/Rules/Actions/AlgoliaAction.cs
  4. 31
      src/Squidex.Domain.Apps.Core.Model/Rules/Actions/AzureQueueAction.cs
  5. 31
      src/Squidex.Domain.Apps.Core.Model/Rules/Actions/SlackAction.cs
  6. 31
      src/Squidex.Domain.Apps.Core.Model/Rules/Actions/WebhookAction.cs
  7. 2
      src/Squidex.Domain.Apps.Core.Model/Rules/RuleAction.cs
  8. 2
      src/Squidex.Domain.Apps.Core.Model/Rules/RuleTrigger.cs
  9. 16
      src/Squidex.Domain.Apps.Core.Model/Rules/Triggers/ContentChangedTrigger.cs
  10. 181
      src/Squidex.Domain.Apps.Core.Model/Schemas/AssetsFieldProperties.cs
  11. 31
      src/Squidex.Domain.Apps.Core.Model/Schemas/BooleanFieldProperties.cs
  12. 76
      src/Squidex.Domain.Apps.Core.Model/Schemas/DateTimeFieldProperties.cs
  13. 46
      src/Squidex.Domain.Apps.Core.Model/Schemas/FieldProperties.cs
  14. 16
      src/Squidex.Domain.Apps.Core.Model/Schemas/GeolocationFieldProperties.cs
  15. 33
      src/Squidex.Domain.Apps.Core.Model/Schemas/NamedElementPropertiesBase.cs
  16. 76
      src/Squidex.Domain.Apps.Core.Model/Schemas/NumberFieldProperties.cs
  17. 46
      src/Squidex.Domain.Apps.Core.Model/Schemas/ReferencesFieldProperties.cs
  18. 106
      src/Squidex.Domain.Apps.Core.Model/Schemas/StringFieldProperties.cs
  19. 31
      src/Squidex.Domain.Apps.Core.Model/Schemas/TagsFieldProperties.cs
  20. 2
      src/Squidex.Domain.Apps.Core.Model/Squidex.Domain.Apps.Core.Model.csproj
  21. 14
      src/Squidex.Infrastructure/IFreezable.cs
  22. 1
      tests/Squidex.Domain.Apps.Core.Tests/Model/Schemas/SchemaTests.cs
  23. 2
      tests/Squidex.Domain.Apps.Core.Tests/TestData.cs

4
src/Squidex.Domain.Apps.Core.Model/FodyWeavers.xml

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8" ?>
<Weavers>
<Freezable/>
</Weavers>

18
src/Squidex.Infrastructure/Freezable.cs → src/Squidex.Domain.Apps.Core.Model/Freezable.cs

@ -6,16 +6,22 @@
// ========================================================================== // ==========================================================================
using System; using System;
using Squidex.Infrastructure;
namespace Squidex.Infrastructure namespace Squidex.Domain.Apps.Core
{ {
public abstract class Freezable public abstract class Freezable : IFreezable
{ {
public bool IsFrozen { get; private set; } private bool isFrozen;
protected void ThrowIfFrozen() public bool IsFrozen
{ {
if (IsFrozen) get { return isFrozen; }
}
protected void CheckIfFrozen()
{
if (isFrozen)
{ {
throw new InvalidOperationException("Object is frozen"); throw new InvalidOperationException("Object is frozen");
} }
@ -23,7 +29,7 @@ namespace Squidex.Infrastructure
public void Freeze() public void Freeze()
{ {
IsFrozen = true; isFrozen = true;
} }
} }
} }

46
src/Squidex.Domain.Apps.Core.Model/Rules/Actions/AlgoliaAction.cs

@ -12,51 +12,11 @@ namespace Squidex.Domain.Apps.Core.Rules.Actions
[TypeName(nameof(AlgoliaAction))] [TypeName(nameof(AlgoliaAction))]
public sealed class AlgoliaAction : RuleAction public sealed class AlgoliaAction : RuleAction
{ {
private string appId; public string AppId { get; set; }
private string apiKey;
private string indexName;
public string AppId public string ApiKey { get; set; }
{
get
{
return appId;
}
set
{
ThrowIfFrozen();
appId = value;
}
}
public string ApiKey
{
get
{
return apiKey;
}
set
{
ThrowIfFrozen();
apiKey = value; public string IndexName { get; set; }
}
}
public string IndexName
{
get
{
return indexName;
}
set
{
ThrowIfFrozen();
indexName = value;
}
}
public override T Accept<T>(IRuleActionVisitor<T> visitor) public override T Accept<T>(IRuleActionVisitor<T> visitor)
{ {

31
src/Squidex.Domain.Apps.Core.Model/Rules/Actions/AzureQueueAction.cs

@ -12,36 +12,9 @@ namespace Squidex.Domain.Apps.Core.Rules.Actions
[TypeName(nameof(AzureQueueAction))] [TypeName(nameof(AzureQueueAction))]
public sealed class AzureQueueAction : RuleAction public sealed class AzureQueueAction : RuleAction
{ {
private string connectionString; public string ConnectionString { get; set; }
private string queue;
public string ConnectionString public string Queue { get; set; }
{
get
{
return connectionString;
}
set
{
ThrowIfFrozen();
connectionString = value;
}
}
public string Queue
{
get
{
return queue;
}
set
{
ThrowIfFrozen();
queue = value;
}
}
public override T Accept<T>(IRuleActionVisitor<T> visitor) public override T Accept<T>(IRuleActionVisitor<T> visitor)
{ {

31
src/Squidex.Domain.Apps.Core.Model/Rules/Actions/SlackAction.cs

@ -13,36 +13,9 @@ namespace Squidex.Domain.Apps.Core.Rules.Actions
[TypeName(nameof(SlackAction))] [TypeName(nameof(SlackAction))]
public sealed class SlackAction : RuleAction public sealed class SlackAction : RuleAction
{ {
private Uri webhookUrl; public Uri WebhookUrl { get; set; }
private string text;
public Uri WebhookUrl public string Text { get; set; }
{
get
{
return webhookUrl;
}
set
{
ThrowIfFrozen();
webhookUrl = value;
}
}
public string Text
{
get
{
return text;
}
set
{
ThrowIfFrozen();
text = value;
}
}
public override T Accept<T>(IRuleActionVisitor<T> visitor) public override T Accept<T>(IRuleActionVisitor<T> visitor)
{ {

31
src/Squidex.Domain.Apps.Core.Model/Rules/Actions/WebhookAction.cs

@ -13,36 +13,9 @@ namespace Squidex.Domain.Apps.Core.Rules.Actions
[TypeName(nameof(WebhookAction))] [TypeName(nameof(WebhookAction))]
public sealed class WebhookAction : RuleAction public sealed class WebhookAction : RuleAction
{ {
private Uri url; public Uri Url { get; set; }
private string sharedSecret;
public Uri Url public string SharedSecret { get; set; }
{
get
{
return url;
}
set
{
ThrowIfFrozen();
url = value;
}
}
public string SharedSecret
{
get
{
return sharedSecret;
}
set
{
ThrowIfFrozen();
sharedSecret = value;
}
}
public override T Accept<T>(IRuleActionVisitor<T> visitor) public override T Accept<T>(IRuleActionVisitor<T> visitor)
{ {

2
src/Squidex.Domain.Apps.Core.Model/Rules/RuleAction.cs

@ -5,8 +5,6 @@
// All rights reserved. Licensed under the MIT license. // All rights reserved. Licensed under the MIT license.
// ========================================================================== // ==========================================================================
using Squidex.Infrastructure;
namespace Squidex.Domain.Apps.Core.Rules namespace Squidex.Domain.Apps.Core.Rules
{ {
public abstract class RuleAction : Freezable public abstract class RuleAction : Freezable

2
src/Squidex.Domain.Apps.Core.Model/Rules/RuleTrigger.cs

@ -5,8 +5,6 @@
// All rights reserved. Licensed under the MIT license. // All rights reserved. Licensed under the MIT license.
// ========================================================================== // ==========================================================================
using Squidex.Infrastructure;
namespace Squidex.Domain.Apps.Core.Rules namespace Squidex.Domain.Apps.Core.Rules
{ {
public abstract class RuleTrigger : Freezable public abstract class RuleTrigger : Freezable

16
src/Squidex.Domain.Apps.Core.Model/Rules/Triggers/ContentChangedTrigger.cs

@ -13,21 +13,7 @@ namespace Squidex.Domain.Apps.Core.Rules.Triggers
[TypeName(nameof(ContentChangedTrigger))] [TypeName(nameof(ContentChangedTrigger))]
public sealed class ContentChangedTrigger : RuleTrigger public sealed class ContentChangedTrigger : RuleTrigger
{ {
private ImmutableList<ContentChangedTriggerSchema> schemas; public ImmutableList<ContentChangedTriggerSchema> Schemas { get; set; }
public ImmutableList<ContentChangedTriggerSchema> Schemas
{
get
{
return schemas;
}
set
{
ThrowIfFrozen();
schemas = value;
}
}
public override T Accept<T>(IRuleTriggerVisitor<T> visitor) public override T Accept<T>(IRuleTriggerVisitor<T> visitor)
{ {

181
src/Squidex.Domain.Apps.Core.Model/Schemas/AssetsFieldProperties.cs

@ -13,186 +13,29 @@ namespace Squidex.Domain.Apps.Core.Schemas
[TypeName(nameof(AssetsField))] [TypeName(nameof(AssetsField))]
public sealed class AssetsFieldProperties : FieldProperties public sealed class AssetsFieldProperties : FieldProperties
{ {
private bool mustBeImage; public bool MustBeImage { get; set; }
private int? minItems;
private int? maxItems;
private int? minWidth;
private int? maxWidth;
private int? minHeight;
private int? maxHeight;
private int? minSize;
private int? maxSize;
private int? aspectWidth;
private int? aspectHeight;
private ImmutableList<string> allowedExtensions;
public bool MustBeImage public int? MinItems { get; set; }
{
get
{
return mustBeImage;
}
set
{
ThrowIfFrozen();
mustBeImage = value; public int? MaxItems { get; set; }
}
}
public int? MinItems public int? MinWidth { get; set; }
{
get
{
return minItems;
}
set
{
ThrowIfFrozen();
minItems = value; public int? MaxWidth { get; set; }
}
}
public int? MaxItems public int? MinHeight { get; set; }
{
get
{
return maxItems;
}
set
{
ThrowIfFrozen();
maxItems = value; public int? MaxHeight { get; set; }
}
}
public int? MinWidth public int? MinSize { get; set; }
{
get
{
return minWidth;
}
set
{
ThrowIfFrozen();
minWidth = value; public int? MaxSize { get; set; }
}
}
public int? MaxWidth public int? AspectWidth { get; set; }
{
get
{
return maxWidth;
}
set
{
ThrowIfFrozen();
maxWidth = value; public int? AspectHeight { get; set; }
}
}
public int? MinHeight public ImmutableList<string> AllowedExtensions { get; set; }
{
get
{
return minHeight;
}
set
{
ThrowIfFrozen();
minHeight = value;
}
}
public int? MaxHeight
{
get
{
return maxHeight;
}
set
{
ThrowIfFrozen();
maxHeight = value;
}
}
public int? MinSize
{
get
{
return minSize;
}
set
{
ThrowIfFrozen();
minSize = value;
}
}
public int? MaxSize
{
get
{
return maxSize;
}
set
{
ThrowIfFrozen();
maxSize = value;
}
}
public int? AspectWidth
{
get
{
return aspectWidth;
}
set
{
ThrowIfFrozen();
aspectWidth = value;
}
}
public int? AspectHeight
{
get
{
return aspectHeight;
}
set
{
ThrowIfFrozen();
aspectHeight = value;
}
}
public ImmutableList<string> AllowedExtensions
{
get
{
return allowedExtensions;
}
set
{
ThrowIfFrozen();
allowedExtensions = value;
}
}
public override T Accept<T>(IFieldPropertiesVisitor<T> visitor) public override T Accept<T>(IFieldPropertiesVisitor<T> visitor)
{ {

31
src/Squidex.Domain.Apps.Core.Model/Schemas/BooleanFieldProperties.cs

@ -12,36 +12,9 @@ namespace Squidex.Domain.Apps.Core.Schemas
[TypeName(nameof(BooleanField))] [TypeName(nameof(BooleanField))]
public sealed class BooleanFieldProperties : FieldProperties public sealed class BooleanFieldProperties : FieldProperties
{ {
private BooleanFieldEditor editor; public bool? DefaultValue { get; set; }
private bool? defaultValue;
public bool? DefaultValue public BooleanFieldEditor Editor { get; set; }
{
get
{
return defaultValue;
}
set
{
ThrowIfFrozen();
defaultValue = value;
}
}
public BooleanFieldEditor Editor
{
get
{
return editor;
}
set
{
ThrowIfFrozen();
editor = value;
}
}
public override T Accept<T>(IFieldPropertiesVisitor<T> visitor) public override T Accept<T>(IFieldPropertiesVisitor<T> visitor)
{ {

76
src/Squidex.Domain.Apps.Core.Model/Schemas/DateTimeFieldProperties.cs

@ -13,81 +13,15 @@ namespace Squidex.Domain.Apps.Core.Schemas
[TypeName(nameof(DateTimeField))] [TypeName(nameof(DateTimeField))]
public sealed class DateTimeFieldProperties : FieldProperties public sealed class DateTimeFieldProperties : FieldProperties
{ {
private DateTimeFieldEditor editor; public Instant? MaxValue { get; set; }
private DateTimeCalculatedDefaultValue? calculatedDefaultValue;
private Instant? maxValue;
private Instant? minValue;
private Instant? defaultValue;
public Instant? MaxValue public Instant? MinValue { get; set; }
{
get
{
return maxValue;
}
set
{
ThrowIfFrozen();
maxValue = value;
}
}
public Instant? MinValue
{
get
{
return minValue;
}
set
{
ThrowIfFrozen();
minValue = value;
}
}
public Instant? DefaultValue
{
get
{
return defaultValue;
}
set
{
ThrowIfFrozen();
defaultValue = value;
}
}
public DateTimeCalculatedDefaultValue? CalculatedDefaultValue
{
get
{
return calculatedDefaultValue;
}
set
{
ThrowIfFrozen();
calculatedDefaultValue = value; public Instant? DefaultValue { get; set; }
}
}
public DateTimeFieldEditor Editor public DateTimeCalculatedDefaultValue? CalculatedDefaultValue { get; set; }
{
get
{
return editor;
}
set
{
ThrowIfFrozen();
editor = value; public DateTimeFieldEditor Editor { get; set; }
}
}
public override T Accept<T>(IFieldPropertiesVisitor<T> visitor) public override T Accept<T>(IFieldPropertiesVisitor<T> visitor)
{ {

46
src/Squidex.Domain.Apps.Core.Model/Schemas/FieldProperties.cs

@ -9,51 +9,11 @@ namespace Squidex.Domain.Apps.Core.Schemas
{ {
public abstract class FieldProperties : NamedElementPropertiesBase public abstract class FieldProperties : NamedElementPropertiesBase
{ {
private bool isRequired; public bool IsRequired { get; set; }
private bool isListField;
private string placeholder;
public bool IsRequired public bool IsListField { get; set; }
{
get
{
return isRequired;
}
set
{
ThrowIfFrozen();
isRequired = value; public string Placeholder { get; set; }
}
}
public bool IsListField
{
get
{
return isListField;
}
set
{
ThrowIfFrozen();
isListField = value;
}
}
public string Placeholder
{
get
{
return placeholder;
}
set
{
ThrowIfFrozen();
placeholder = value;
}
}
public abstract T Accept<T>(IFieldPropertiesVisitor<T> visitor); public abstract T Accept<T>(IFieldPropertiesVisitor<T> visitor);

16
src/Squidex.Domain.Apps.Core.Model/Schemas/GeolocationFieldProperties.cs

@ -12,21 +12,7 @@ namespace Squidex.Domain.Apps.Core.Schemas
[TypeName(nameof(GeolocationField))] [TypeName(nameof(GeolocationField))]
public sealed class GeolocationFieldProperties : FieldProperties public sealed class GeolocationFieldProperties : FieldProperties
{ {
private GeolocationFieldEditor editor; public GeolocationFieldEditor Editor { get; set; }
public GeolocationFieldEditor Editor
{
get
{
return editor;
}
set
{
ThrowIfFrozen();
editor = value;
}
}
public override T Accept<T>(IFieldPropertiesVisitor<T> visitor) public override T Accept<T>(IFieldPropertiesVisitor<T> visitor)
{ {

33
src/Squidex.Domain.Apps.Core.Model/Schemas/NamedElementPropertiesBase.cs

@ -5,41 +5,12 @@
// All rights reserved. Licensed under the MIT license. // All rights reserved. Licensed under the MIT license.
// ========================================================================== // ==========================================================================
using Squidex.Infrastructure;
namespace Squidex.Domain.Apps.Core.Schemas namespace Squidex.Domain.Apps.Core.Schemas
{ {
public abstract class NamedElementPropertiesBase : Freezable public abstract class NamedElementPropertiesBase : Freezable
{ {
private string label; public string Label { get; set; }
private string hints;
public string Label
{
get
{
return label;
}
set
{
ThrowIfFrozen();
label = value;
}
}
public string Hints
{
get
{
return hints;
}
set
{
ThrowIfFrozen();
hints = value; public string Hints { get; set; }
}
}
} }
} }

76
src/Squidex.Domain.Apps.Core.Model/Schemas/NumberFieldProperties.cs

@ -13,81 +13,15 @@ namespace Squidex.Domain.Apps.Core.Schemas
[TypeName(nameof(NumberField))] [TypeName(nameof(NumberField))]
public sealed class NumberFieldProperties : FieldProperties public sealed class NumberFieldProperties : FieldProperties
{ {
private double? maxValue; public double? MaxValue { get; set; }
private double? minValue;
private double? defaultValue;
private ImmutableList<double> allowedValues;
private NumberFieldEditor editor;
public double? MaxValue public double? MinValue { get; set; }
{
get
{
return maxValue;
}
set
{
ThrowIfFrozen();
maxValue = value;
}
}
public double? MinValue
{
get
{
return minValue;
}
set
{
ThrowIfFrozen();
minValue = value;
}
}
public double? DefaultValue
{
get
{
return defaultValue;
}
set
{
ThrowIfFrozen();
defaultValue = value;
}
}
public ImmutableList<double> AllowedValues
{
get
{
return allowedValues;
}
set
{
ThrowIfFrozen();
allowedValues = value; public double? DefaultValue { get; set; }
}
}
public NumberFieldEditor Editor public ImmutableList<double> AllowedValues { get; set; }
{
get
{
return editor;
}
set
{
ThrowIfFrozen();
editor = value; public NumberFieldEditor Editor { get; set; }
}
}
public override T Accept<T>(IFieldPropertiesVisitor<T> visitor) public override T Accept<T>(IFieldPropertiesVisitor<T> visitor)
{ {

46
src/Squidex.Domain.Apps.Core.Model/Schemas/ReferencesFieldProperties.cs

@ -13,51 +13,11 @@ namespace Squidex.Domain.Apps.Core.Schemas
[TypeName(nameof(ReferencesField))] [TypeName(nameof(ReferencesField))]
public sealed class ReferencesFieldProperties : FieldProperties public sealed class ReferencesFieldProperties : FieldProperties
{ {
private int? minItems; public int? MinItems { get; set; }
private int? maxItems;
private Guid schemaId;
public int? MinItems public int? MaxItems { get; set; }
{
get
{
return minItems;
}
set
{
ThrowIfFrozen();
minItems = value;
}
}
public int? MaxItems
{
get
{
return maxItems;
}
set
{
ThrowIfFrozen();
maxItems = value; public Guid SchemaId { get; set; }
}
}
public Guid SchemaId
{
get
{
return schemaId;
}
set
{
ThrowIfFrozen();
schemaId = value;
}
}
public override T Accept<T>(IFieldPropertiesVisitor<T> visitor) public override T Accept<T>(IFieldPropertiesVisitor<T> visitor)
{ {

106
src/Squidex.Domain.Apps.Core.Model/Schemas/StringFieldProperties.cs

@ -13,111 +13,19 @@ namespace Squidex.Domain.Apps.Core.Schemas
[TypeName(nameof(StringField))] [TypeName(nameof(StringField))]
public sealed class StringFieldProperties : FieldProperties public sealed class StringFieldProperties : FieldProperties
{ {
private int? minLength; public int? MinLength { get; set; }
private int? maxLength;
private string pattern;
private string patternMessage;
private string defaultValue;
private ImmutableList<string> allowedValues;
private StringFieldEditor editor;
public int? MinLength public int? MaxLength { get; set; }
{
get
{
return minLength;
}
set
{
ThrowIfFrozen();
minLength = value;
}
}
public int? MaxLength
{
get
{
return maxLength;
}
set
{
ThrowIfFrozen();
maxLength = value;
}
}
public string DefaultValue
{
get
{
return defaultValue;
}
set
{
ThrowIfFrozen();
defaultValue = value;
}
}
public string Pattern public string DefaultValue { get; set; }
{
get
{
return pattern;
}
set
{
ThrowIfFrozen();
pattern = value;
}
}
public string PatternMessage public string Pattern { get; set; }
{
get
{
return patternMessage;
}
set
{
ThrowIfFrozen();
patternMessage = value; public string PatternMessage { get; set; }
}
}
public ImmutableList<string> AllowedValues public ImmutableList<string> AllowedValues { get; set; }
{
get
{
return allowedValues;
}
set
{
ThrowIfFrozen();
allowedValues = value; public StringFieldEditor Editor { get; set; }
}
}
public StringFieldEditor Editor
{
get
{
return editor;
}
set
{
ThrowIfFrozen();
editor = value;
}
}
public override T Accept<T>(IFieldPropertiesVisitor<T> visitor) public override T Accept<T>(IFieldPropertiesVisitor<T> visitor)
{ {

31
src/Squidex.Domain.Apps.Core.Model/Schemas/TagsFieldProperties.cs

@ -12,36 +12,9 @@ namespace Squidex.Domain.Apps.Core.Schemas
[TypeName(nameof(TagsField))] [TypeName(nameof(TagsField))]
public sealed class TagsFieldProperties : FieldProperties public sealed class TagsFieldProperties : FieldProperties
{ {
private int? minItems; public int? MinItems { get; set; }
private int? maxItems;
public int? MinItems public int? MaxItems { get; set; }
{
get
{
return minItems;
}
set
{
ThrowIfFrozen();
minItems = value;
}
}
public int? MaxItems
{
get
{
return maxItems;
}
set
{
ThrowIfFrozen();
maxItems = value;
}
}
public override T Accept<T>(IFieldPropertiesVisitor<T> visitor) public override T Accept<T>(IFieldPropertiesVisitor<T> visitor)
{ {

2
src/Squidex.Domain.Apps.Core.Model/Squidex.Domain.Apps.Core.Model.csproj

@ -8,6 +8,8 @@
<DebugSymbols>True</DebugSymbols> <DebugSymbols>True</DebugSymbols>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Fody" Version="2.3.23" />
<PackageReference Include="Freezable.Fody" Version="1.8.0" />
<PackageReference Include="System.Collections.Immutable" Version="1.4.0" /> <PackageReference Include="System.Collections.Immutable" Version="1.4.0" />
<PackageReference Include="System.ValueTuple" Version="4.4.0" /> <PackageReference Include="System.ValueTuple" Version="4.4.0" />
</ItemGroup> </ItemGroup>

14
src/Squidex.Infrastructure/IFreezable.cs

@ -0,0 +1,14 @@
// ==========================================================================
// Squidex Headless CMS
// ==========================================================================
// Copyright (c) Squidex UG (haftungsbeschraenkt)
// All rights reserved. Licensed under the MIT license.
// ==========================================================================
namespace Squidex.Infrastructure
{
public interface IFreezable
{
void Freeze();
}
}

1
tests/Squidex.Domain.Apps.Core.Tests/Model/Schemas/SchemaTests.cs

@ -26,7 +26,6 @@ namespace Squidex.Domain.Apps.Core.Model.Schemas
[Fact] [Fact]
public void Should_instantiate_schema() public void Should_instantiate_schema()
{ {
Assert.True(schema_0.Properties.IsFrozen);
Assert.Equal("my-schema", schema_0.Name); Assert.Equal("my-schema", schema_0.Name);
} }

2
tests/Squidex.Domain.Apps.Core.Tests/TestData.cs

@ -101,7 +101,7 @@ namespace Squidex.Domain.Apps.Core
return schema; return schema;
} }
public static void TestFreeze(Freezable freezable) public static void TestFreeze(IFreezable freezable)
{ {
var sut = new AssetsFieldProperties(); var sut = new AssetsFieldProperties();

Loading…
Cancel
Save