From c7cc8c044b6b98fb017842da431126be389d22fb Mon Sep 17 00:00:00 2001 From: maliming Date: Fri, 2 Sep 2022 11:35:17 +0800 Subject: [PATCH] Add some basic unit tests. --- ...ureManagementApplicationContractsModule.cs | 23 +---- .../AbpFeatureManagementDomainSharedModule.cs | 24 ++++- .../FeatureDefinitionSerializer_Tests.cs | 87 +++++++++++++++++++ .../StringValueTypeSerializer_Tests.cs | 52 +++++++++++ 4 files changed, 163 insertions(+), 23 deletions(-) create mode 100644 modules/feature-management/test/Volo.Abp.FeatureManagement.Domain.Tests/Volo/Abp/FeatureManagement/FeatureDefinitionSerializer_Tests.cs create mode 100644 modules/feature-management/test/Volo.Abp.FeatureManagement.Domain.Tests/Volo/Abp/FeatureManagement/StringValueTypeSerializer_Tests.cs diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/AbpFeatureManagementApplicationContractsModule.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/AbpFeatureManagementApplicationContractsModule.cs index 0e16a5607e..a69cb893d0 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/AbpFeatureManagementApplicationContractsModule.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/AbpFeatureManagementApplicationContractsModule.cs @@ -1,11 +1,6 @@ -using System.Collections.Generic; -using Microsoft.Extensions.DependencyInjection; -using Volo.Abp.Application; +using Volo.Abp.Application; using Volo.Abp.Authorization; -using Volo.Abp.FeatureManagement.JsonConverters; using Volo.Abp.Json; -using Volo.Abp.Json.Newtonsoft; -using Volo.Abp.Json.SystemTextJson; using Volo.Abp.Modularity; using Volo.Abp.VirtualFileSystem; @@ -25,21 +20,5 @@ public class AbpFeatureManagementApplicationContractsModule : AbpModule { options.FileSets.AddEmbedded(); }); - - var contractsOptionsActions = context.Services.GetPreConfigureActions(); - Configure(options => - { - contractsOptionsActions.Configure(options); - }); - - Configure(options => - { - options.Converters.Add(); - }); - - Configure(options => - { - options.JsonSerializerOptions.Converters.AddIfNotContains(new StringValueTypeJsonConverter(contractsOptionsActions.Configure())); - }); } } diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/AbpFeatureManagementDomainSharedModule.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/AbpFeatureManagementDomainSharedModule.cs index 303f4cd13f..5a4cc6fa24 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/AbpFeatureManagementDomainSharedModule.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/AbpFeatureManagementDomainSharedModule.cs @@ -1,4 +1,10 @@ -using Volo.Abp.FeatureManagement.Localization; +using System.Collections.Generic; +using System.Linq; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.FeatureManagement.JsonConverters; +using Volo.Abp.FeatureManagement.Localization; +using Volo.Abp.Json.Newtonsoft; +using Volo.Abp.Json.SystemTextJson; using Volo.Abp.Localization; using Volo.Abp.Localization.ExceptionHandling; using Volo.Abp.Modularity; @@ -33,5 +39,21 @@ public class AbpFeatureManagementDomainSharedModule : AbpModule { options.MapCodeNamespace("Volo.Abp.FeatureManagement", typeof(AbpFeatureManagementResource)); }); + + Configure(options => + { + options.Converters.Add(); + }); + + var contractsOptionsActions = context.Services.GetPreConfigureActions(); + Configure(options => + { + contractsOptionsActions.Configure(options); + }); + + Configure(options => + { + options.JsonSerializerOptions.Converters.Add(new StringValueTypeJsonConverter(contractsOptionsActions.Configure())); + }); } } diff --git a/modules/feature-management/test/Volo.Abp.FeatureManagement.Domain.Tests/Volo/Abp/FeatureManagement/FeatureDefinitionSerializer_Tests.cs b/modules/feature-management/test/Volo.Abp.FeatureManagement.Domain.Tests/Volo/Abp/FeatureManagement/FeatureDefinitionSerializer_Tests.cs new file mode 100644 index 0000000000..b025d1fa48 --- /dev/null +++ b/modules/feature-management/test/Volo.Abp.FeatureManagement.Domain.Tests/Volo/Abp/FeatureManagement/FeatureDefinitionSerializer_Tests.cs @@ -0,0 +1,87 @@ +using System.Threading.Tasks; +using Shouldly; +using Volo.Abp.Data; +using Volo.Abp.FeatureManagement.Localization; +using Volo.Abp.Features; +using Volo.Abp.Localization; +using Volo.Abp.Validation.StringValues; +using Xunit; + +namespace Volo.Abp.FeatureManagement; + +public class FeatureDefinitionSerializer_Tests : FeatureManagementDomainTestBase +{ + private readonly IFeatureDefinitionSerializer _serializer; + + public FeatureDefinitionSerializer_Tests() + { + _serializer = GetRequiredService(); + } + + [Fact] + public async Task Serialize_Feature_Group_Definition() + { + // Arrange + + var context = new FeatureDefinitionContext(); + var group1 = CreateFeatureGroup1(context); + + // Act + + var featureGroupRecord = await _serializer.SerializeAsync(group1); + + //Assert + + featureGroupRecord.Name.ShouldBe("Group1"); + featureGroupRecord.DisplayName.ShouldBe("F:Group one"); + featureGroupRecord.GetProperty("CustomProperty1").ShouldBe("CustomValue1"); + } + + [Fact] + public async Task Serialize_Complex_Feature_Definition() + { + // Arrange + + var context = new FeatureDefinitionContext(); + var group1 = CreateFeatureGroup1(context); + var feature1 = group1.AddFeature( + "Feature1", + "default", + new LocalizableString(typeof(AbpFeatureManagementResource), "Feature1"), + new LocalizableString(typeof(AbpFeatureManagementResource), "Feature1"), + new ToggleStringValueType(), + isVisibleToClients: true + ) + .WithProviders("ProviderA", "ProviderB") + .WithProperty("CustomProperty2", "CustomValue2"); + + // Act + + var featureRecord = await _serializer.SerializeAsync( + feature1, + group1 + ); + + //Assert + + featureRecord.Name.ShouldBe("Feature1"); + featureRecord.GroupName.ShouldBe("Group1"); + featureRecord.DisplayName.ShouldBe("L:AbpFeatureManagement,Feature1"); + featureRecord.ValueType.ShouldBe("{\"name\":\"ToggleStringValueType\",\"properties\":{},\"validator\":{\"name\":\"BOOLEAN\",\"properties\":{}}}"); + featureRecord.GetProperty("CustomProperty2").ShouldBe("CustomValue2"); + featureRecord.AllowedProviders.ShouldBe("ProviderA,ProviderB"); + } + + private static FeatureGroupDefinition CreateFeatureGroup1( + IFeatureDefinitionContext context) + { + var group = context.AddGroup( + "Group1", + displayName: new FixedLocalizableString("Group one") + ); + + group["CustomProperty1"] = "CustomValue1"; + + return group; + } +} diff --git a/modules/feature-management/test/Volo.Abp.FeatureManagement.Domain.Tests/Volo/Abp/FeatureManagement/StringValueTypeSerializer_Tests.cs b/modules/feature-management/test/Volo.Abp.FeatureManagement.Domain.Tests/Volo/Abp/FeatureManagement/StringValueTypeSerializer_Tests.cs new file mode 100644 index 0000000000..1eb9fe11ce --- /dev/null +++ b/modules/feature-management/test/Volo.Abp.FeatureManagement.Domain.Tests/Volo/Abp/FeatureManagement/StringValueTypeSerializer_Tests.cs @@ -0,0 +1,52 @@ +using System; +using Shouldly; +using Volo.Abp.Validation.StringValues; +using Xunit; + +namespace Volo.Abp.FeatureManagement; + +public class StringValueTypeSerializer_Tests : FeatureManagementDomainTestBase +{ + private readonly StringValueTypeSerializer _serializer; + + public StringValueTypeSerializer_Tests() + { + _serializer = GetRequiredService(); + } + + [Fact] + public void Serialize_And_Deserialize_Test() + { + // Arrange + + var valueType = new SelectionStringValueType + { + ItemSource = new StaticSelectionStringValueItemSource( + new LocalizableSelectionStringValueItem + { + Value = "TestValue", + DisplayText = new LocalizableStringInfo("TestResourceName", "TestName") + }), + Validator = new AlwaysValidValueValidator() + }; + + // Act + + var valueTypeJson = _serializer.Serialize(valueType); + + //Assert + valueTypeJson.ShouldBe("{\"itemSource\":{\"items\":[{\"value\":\"TestValue\",\"displayText\":{\"resourceName\":\"TestResourceName\",\"name\":\"TestName\"}}]},\"name\":\"SelectionStringValueType\",\"properties\":{},\"validator\":{\"name\":\"NULL\",\"properties\":{}}}"); + + // Act + var valueType2 = _serializer.Deserialize(valueTypeJson); + + //Assert + valueType2.ShouldBeOfType(); + valueType2.Validator.ShouldBeOfType(); + valueType2.As().ItemSource.Items.ShouldBeOfType(); + valueType2.As().ItemSource.Items.ShouldContain(x => + x.Value == "TestValue" && x.DisplayText.ResourceName == "TestResourceName" && + x.DisplayText.Name == "TestName"); + } + +}