CmsKit - Change TagEntityTypeDefinition configuration

pull/7483/head
enisn 5 years ago
parent fdd6b4234c
commit c62c3fa9b8

@ -21,20 +21,20 @@ namespace Volo.CmsKit.Tags
{ {
Check.NotNullOrWhiteSpace(entityType, nameof(entityType)); 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); return Task.FromResult(result);
} }
public virtual Task<List<TagEntityTypeDefiniton>> GetTagDefinitionsAsync() public virtual Task<List<TagEntityTypeDefiniton>> GetTagDefinitionsAsync()
{ {
return Task.FromResult(options.EntityTypes.Values.ToList()); return Task.FromResult(options.EntityTypes.ToList());
} }
public virtual Task<bool> IsDefinedAsync([NotNull] string entityType) public virtual Task<bool> IsDefinedAsync([NotNull] string entityType)
{ {
Check.NotNullOrWhiteSpace(entityType, nameof(entityType)); Check.NotNullOrWhiteSpace(entityType, nameof(entityType));
return Task.FromResult(options.EntityTypes.ContainsKey(entityType)); return Task.FromResult(options.EntityTypes.Any(a => a.EntityType == entityType));
} }
} }
} }

@ -4,17 +4,7 @@ using Volo.Abp.Localization;
namespace Volo.CmsKit.Tags namespace Volo.CmsKit.Tags
{ {
public class TagEntityTypeDefinitionDictionary : Dictionary<string, TagEntityTypeDefiniton> public class TagEntityTypeDefinitionDictionary : HashSet<TagEntityTypeDefiniton>
{ {
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);
}
} }
} }

@ -1,11 +1,12 @@
using JetBrains.Annotations; using JetBrains.Annotations;
using System;
using Volo.Abp; using Volo.Abp;
using Volo.Abp.Localization; using Volo.Abp.Localization;
using Volo.CmsKit.Domain.Volo.CmsKit; using Volo.CmsKit.Domain.Volo.CmsKit;
namespace Volo.CmsKit.Tags namespace Volo.CmsKit.Tags
{ {
public class TagEntityTypeDefiniton : PolicySpecifiedDefinition public class TagEntityTypeDefiniton : PolicySpecifiedDefinition, IEquatable<TagEntityTypeDefiniton>
{ {
public string EntityType { get; } public string EntityType { get; }
@ -27,5 +28,10 @@ namespace Volo.CmsKit.Tags
DisplayName = displayName; DisplayName = displayName;
} }
public bool Equals(TagEntityTypeDefiniton other)
{
return EntityType == other.EntityType;
}
} }
} }

@ -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<IOptions<CmsKitTagOptions>>();
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<CmsKitResource>("MyEntity")));
}
[Fact]
public void ShouldAddEntityType_WithAllParameters()
{
cmsKitTagOptions.EntityTypes.Add(
new TagEntityTypeDefiniton(
"My.Entity.Type",
LocalizableString.Create<CmsKitResource>("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);
}
}
}

@ -1,5 +1,6 @@
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using System; using System;
using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Volo.Abp.Data; using Volo.Abp.Data;
@ -86,12 +87,12 @@ namespace Volo.CmsKit
} }
private Task ConfigureCmsKitOptionsAsync() private Task ConfigureCmsKitOptionsAsync()
{ {
_tagOptions.Value.EntityTypes.AddOrReplace(_cmsKitTestData.EntityType1); _tagOptions.Value.EntityTypes.AddIfNotContains(new TagEntityTypeDefiniton(_cmsKitTestData.EntityType1));
_tagOptions.Value.EntityTypes.AddOrReplace(_cmsKitTestData.EntityType2); _tagOptions.Value.EntityTypes.AddIfNotContains(new TagEntityTypeDefiniton(_cmsKitTestData.EntityType2));
_tagOptions.Value.EntityTypes.AddOrReplace(_cmsKitTestData.Content_1_EntityType); _tagOptions.Value.EntityTypes.AddIfNotContains(new TagEntityTypeDefiniton(_cmsKitTestData.Content_1_EntityType));
_tagOptions.Value.EntityTypes.AddOrReplace(_cmsKitTestData.Content_2_EntityType); _tagOptions.Value.EntityTypes.AddIfNotContains(new TagEntityTypeDefiniton(_cmsKitTestData.Content_2_EntityType));
_tagOptions.Value.EntityTypes.AddOrReplace(_cmsKitTestData.TagDefinition_1_EntityType); _tagOptions.Value.EntityTypes.AddIfNotContains(new TagEntityTypeDefiniton(_cmsKitTestData.TagDefinition_1_EntityType));
return Task.CompletedTask; return Task.CompletedTask;
} }

Loading…
Cancel
Save