diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/DefaultTagDefinitionStore.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/DefaultTagDefinitionStore.cs index 6860e8c95c..0eea8b178b 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/DefaultTagDefinitionStore.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/DefaultTagDefinitionStore.cs @@ -21,20 +21,20 @@ namespace Volo.CmsKit.Tags { Check.NotNullOrWhiteSpace(entityType, nameof(entityType)); - var result = options.EntityTypes.GetOrDefault(entityType) ?? throw new EntityNotTaggableException(entityType); + var result = options.EntityTypes.FirstOrDefault(x => x.EntityType == entityType) ?? throw new EntityNotTaggableException(entityType); return Task.FromResult(result); } public virtual Task> GetTagDefinitionsAsync() { - return Task.FromResult(options.EntityTypes.Values.ToList()); + return Task.FromResult(options.EntityTypes.ToList()); } public virtual Task IsDefinedAsync([NotNull] string entityType) { Check.NotNullOrWhiteSpace(entityType, nameof(entityType)); - return Task.FromResult(options.EntityTypes.ContainsKey(entityType)); + return Task.FromResult(options.EntityTypes.Any(a => a.EntityType == entityType)); } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/TagEntityTypeDefinitionDictionary.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/TagEntityTypeDefinitionDictionary.cs index 669dbbb315..ca2bd9c0e3 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/TagEntityTypeDefinitionDictionary.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/TagEntityTypeDefinitionDictionary.cs @@ -4,17 +4,7 @@ using Volo.Abp.Localization; namespace Volo.CmsKit.Tags { - public class TagEntityTypeDefinitionDictionary : Dictionary + public class TagEntityTypeDefinitionDictionary : HashSet { - public void AddOrReplace( - [NotNull] string entityType, - [CanBeNull] ILocalizableString displayName = null, - [CanBeNull] string createPolicy = null, - [CanBeNull] string updatePolicy = null, - [CanBeNull] string deletePolicy = null - ) - { - this[entityType] = new TagEntityTypeDefiniton(entityType, displayName, createPolicy, updatePolicy, deletePolicy); - } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/TagEntityTypeDefiniton.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/TagEntityTypeDefiniton.cs index fee8815b97..463c78d4a4 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/TagEntityTypeDefiniton.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/TagEntityTypeDefiniton.cs @@ -1,11 +1,12 @@ using JetBrains.Annotations; +using System; using Volo.Abp; using Volo.Abp.Localization; using Volo.CmsKit.Domain.Volo.CmsKit; namespace Volo.CmsKit.Tags { - public class TagEntityTypeDefiniton : PolicySpecifiedDefinition + public class TagEntityTypeDefiniton : PolicySpecifiedDefinition, IEquatable { public string EntityType { get; } @@ -27,5 +28,10 @@ namespace Volo.CmsKit.Tags DisplayName = displayName; } + + public bool Equals(TagEntityTypeDefiniton other) + { + return EntityType == other.EntityType; + } } } diff --git a/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Tags/TagEntityTypeDefinitionDictionary_Tests.cs b/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Tags/TagEntityTypeDefinitionDictionary_Tests.cs new file mode 100644 index 0000000000..3f7fff046a --- /dev/null +++ b/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Tags/TagEntityTypeDefinitionDictionary_Tests.cs @@ -0,0 +1,66 @@ +using Microsoft.Extensions.Localization; +using Microsoft.Extensions.Options; +using Shouldly; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp.Localization; +using Volo.CmsKit.Localization; +using Xunit; + +namespace Volo.CmsKit.Tags +{ + public class TagEntityTypeDefinitionDictionary_Tests : CmsKitDomainTestBase + { + private readonly CmsKitTagOptions cmsKitTagOptions; + + public TagEntityTypeDefinitionDictionary_Tests() + { + var options = GetRequiredService>(); + cmsKitTagOptions = options.Value; + } + + [Fact] + public void ShouldAddEntityTypeProperly_WithOnlyEntityType() + { + cmsKitTagOptions.EntityTypes.Add(new TagEntityTypeDefiniton("My.Entity.Type")); + } + + [Fact] + public void ShouldAddEntityTypeProperly_WithEntityTypeAndDisplayName() + { + cmsKitTagOptions.EntityTypes.Add( + new TagEntityTypeDefiniton( + "My.Entity.Type", + LocalizableString.Create("MyEntity"))); + } + + [Fact] + public void ShouldAddEntityType_WithAllParameters() + { + cmsKitTagOptions.EntityTypes.Add( + new TagEntityTypeDefiniton( + "My.Entity.Type", + LocalizableString.Create("MyEntity"), + "SomeCreatePolicy", + "SomeUpdatePolicy", + "SomeDeletePolicy" + )); + } + + [Fact] + public void ShouldThrowException_WhileAddingExistingType() + { + var expectedCount = cmsKitTagOptions.EntityTypes.Count + 1; + + var entityTypeDefinition = new TagEntityTypeDefiniton("My.Entity.Type"); + + cmsKitTagOptions.EntityTypes.Add(entityTypeDefinition); + cmsKitTagOptions.EntityTypes.Add(entityTypeDefinition); + + cmsKitTagOptions.EntityTypes.Count.ShouldBe(expectedCount); + } + } +} diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs index 3dc77fe1fc..e916dd22b3 100644 --- a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Options; using System; +using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Volo.Abp.Data; @@ -86,12 +87,12 @@ namespace Volo.CmsKit } private Task ConfigureCmsKitOptionsAsync() - { - _tagOptions.Value.EntityTypes.AddOrReplace(_cmsKitTestData.EntityType1); - _tagOptions.Value.EntityTypes.AddOrReplace(_cmsKitTestData.EntityType2); - _tagOptions.Value.EntityTypes.AddOrReplace(_cmsKitTestData.Content_1_EntityType); - _tagOptions.Value.EntityTypes.AddOrReplace(_cmsKitTestData.Content_2_EntityType); - _tagOptions.Value.EntityTypes.AddOrReplace(_cmsKitTestData.TagDefinition_1_EntityType); + { + _tagOptions.Value.EntityTypes.AddIfNotContains(new TagEntityTypeDefiniton(_cmsKitTestData.EntityType1)); + _tagOptions.Value.EntityTypes.AddIfNotContains(new TagEntityTypeDefiniton(_cmsKitTestData.EntityType2)); + _tagOptions.Value.EntityTypes.AddIfNotContains(new TagEntityTypeDefiniton(_cmsKitTestData.Content_1_EntityType)); + _tagOptions.Value.EntityTypes.AddIfNotContains(new TagEntityTypeDefiniton(_cmsKitTestData.Content_2_EntityType)); + _tagOptions.Value.EntityTypes.AddIfNotContains(new TagEntityTypeDefiniton(_cmsKitTestData.TagDefinition_1_EntityType)); return Task.CompletedTask; }