Merge pull request #7483 from abpframework/cms-kit/tag-definition-options

Cms Kit - Change TagEntityTypeDefinition Configuration
pull/7498/head^2
İlkay İlknur 5 years ago committed by GitHub
commit 0abb573c51
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1,5 +1,6 @@
using JetBrains.Annotations;
using Microsoft.Extensions.Options;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
@ -17,24 +18,41 @@ namespace Volo.CmsKit.Tags
this.options = options.Value;
}
/// <summary>
/// Gets single <see cref="TagEntityTypeDefiniton"/> by entityType.
/// </summary>
/// <param name="entityType">EntityType to get definition.</param>
/// <exception cref="EntityNotTaggableException">Thrown when EntityType is not configured as taggable.</exception>
/// <exception cref="InvalidOperationException">More than one element satisfies the condition in predicate.</exception>
public virtual Task<TagEntityTypeDefiniton> GetTagEntityTypeDefinitionsAsync([NotNull] string entityType)
{
Check.NotNullOrWhiteSpace(entityType, nameof(entityType));
var result = options.EntityTypes.GetOrDefault(entityType) ?? throw new EntityNotTaggableException(entityType);
var result = options.EntityTypes.SingleOrDefault(x => x.EntityType == entityType) ?? throw new EntityNotTaggableException(entityType);
return Task.FromResult(result);
}
public virtual Task<List<TagEntityTypeDefiniton>> GetTagDefinitionsAsync()
/// <summary>
/// Gets all defined <see cref="TagEntityTypeDefiniton"/> elements.
/// </summary>
public virtual Task<List<TagEntityTypeDefiniton>> GetTagEntityTypeDefinitionListAsync()
{
return Task.FromResult(options.EntityTypes.Values.ToList());
return Task.FromResult(options.EntityTypes.ToList());
}
/// <summary>
/// Checks if EntityType defined as taggable.
/// </summary>
/// <param name="entityType">EntityType to check.</param>
/// <exception cref="InvalidOperationException">More than one element satisfies the condition in predicate.</exception>"
public virtual Task<bool> IsDefinedAsync([NotNull] string entityType)
{
Check.NotNullOrWhiteSpace(entityType, nameof(entityType));
return Task.FromResult(options.EntityTypes.ContainsKey(entityType));
var definition = options.EntityTypes.SingleOrDefault(x => x.EntityType == entityType);
return Task.FromResult(definition != null);
}
}
}

@ -6,7 +6,7 @@ namespace Volo.CmsKit.Tags
{
public interface ITagDefinitionStore
{
Task<List<TagEntityTypeDefiniton>> GetTagDefinitionsAsync();
Task<List<TagEntityTypeDefiniton>> GetTagEntityTypeDefinitionListAsync();
Task<TagEntityTypeDefiniton> GetTagEntityTypeDefinitionsAsync([NotNull] string entityType);

@ -1,20 +1,11 @@
using JetBrains.Annotations;
using System;
using System.Collections.Generic;
using Volo.Abp.Localization;
namespace Volo.CmsKit.Tags
{
public class TagEntityTypeDefinitionDictionary : Dictionary<string, TagEntityTypeDefiniton>
public class TagEntityTypeDefinitionDictionary : List<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 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<TagEntityTypeDefiniton>
{
public string EntityType { get; }
@ -27,5 +28,10 @@ namespace Volo.CmsKit.Tags
DisplayName = displayName;
}
public bool Equals(TagEntityTypeDefiniton other)
{
return EntityType == other.EntityType;
}
}
}

@ -85,7 +85,7 @@ namespace Volo.CmsKit.Tags
public Task<List<TagEntityTypeDefiniton>> GetTagDefinitionsAsync(CancellationToken cancellationToken = default)
{
return _tagDefinitionStore.GetTagDefinitionsAsync();
return _tagDefinitionStore.GetTagEntityTypeDefinitionListAsync();
}
}
}

@ -0,0 +1,64 @@
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;
cmsKitTagOptions.EntityTypes.Add(new TagEntityTypeDefiniton("My.Entity.Type"));
cmsKitTagOptions.EntityTypes.AddIfNotContains(new TagEntityTypeDefiniton("My.Entity.Type"));
cmsKitTagOptions.EntityTypes.Count.ShouldBe(expectedCount);
}
}
}

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

Loading…
Cancel
Save