Browse Source

Add some basic unit tests.

pull/13881/head
maliming 4 years ago
parent
commit
c7cc8c044b
No known key found for this signature in database GPG Key ID: 96224957E51C89E
  1. 23
      modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/AbpFeatureManagementApplicationContractsModule.cs
  2. 24
      modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/AbpFeatureManagementDomainSharedModule.cs
  3. 87
      modules/feature-management/test/Volo.Abp.FeatureManagement.Domain.Tests/Volo/Abp/FeatureManagement/FeatureDefinitionSerializer_Tests.cs
  4. 52
      modules/feature-management/test/Volo.Abp.FeatureManagement.Domain.Tests/Volo/Abp/FeatureManagement/StringValueTypeSerializer_Tests.cs

23
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<AbpFeatureManagementApplicationContractsModule>();
});
var contractsOptionsActions = context.Services.GetPreConfigureActions<ValueValidatorFactoryOptions>();
Configure<ValueValidatorFactoryOptions>(options =>
{
contractsOptionsActions.Configure(options);
});
Configure<AbpNewtonsoftJsonSerializerOptions>(options =>
{
options.Converters.Add<NewtonsoftStringValueTypeJsonConverter>();
});
Configure<AbpSystemTextJsonSerializerOptions>(options =>
{
options.JsonSerializerOptions.Converters.AddIfNotContains(new StringValueTypeJsonConverter(contractsOptionsActions.Configure()));
});
}
}

24
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<AbpNewtonsoftJsonSerializerOptions>(options =>
{
options.Converters.Add<NewtonsoftStringValueTypeJsonConverter>();
});
var contractsOptionsActions = context.Services.GetPreConfigureActions<ValueValidatorFactoryOptions>();
Configure<ValueValidatorFactoryOptions>(options =>
{
contractsOptionsActions.Configure(options);
});
Configure<AbpSystemTextJsonSerializerOptions>(options =>
{
options.JsonSerializerOptions.Converters.Add(new StringValueTypeJsonConverter(contractsOptionsActions.Configure()));
});
}
}

87
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<IFeatureDefinitionSerializer>();
}
[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;
}
}

52
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<StringValueTypeSerializer>();
}
[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<SelectionStringValueType>();
valueType2.Validator.ShouldBeOfType<AlwaysValidValueValidator>();
valueType2.As<SelectionStringValueType>().ItemSource.Items.ShouldBeOfType<LocalizableSelectionStringValueItem[]>();
valueType2.As<SelectionStringValueType>().ItemSource.Items.ShouldContain(x =>
x.Value == "TestValue" && x.DisplayText.ResourceName == "TestResourceName" &&
x.DisplayText.Name == "TestName");
}
}
Loading…
Cancel
Save