Beispiel #1
0
    public virtual async Task <GetFeatureListResultDto> GetAsync([NotNull] string providerName, string providerKey)
    {
        await CheckProviderPolicy(providerName, providerKey);

        var result = new GetFeatureListResultDto
        {
            Groups = new List <FeatureGroupDto>()
        };

        foreach (var group in FeatureDefinitionManager.GetGroups())
        {
            var groupDto = new FeatureGroupDto
            {
                Name        = group.Name,
                DisplayName = group.DisplayName.Localize(StringLocalizerFactory),
                Features    = new List <FeatureDto>()
            };

            foreach (var featureDefinition in group.GetFeaturesWithChildren())
            {
                if (providerName == TenantFeatureValueProvider.ProviderName &&
                    CurrentTenant.Id == null &&
                    providerKey == null &&
                    !featureDefinition.IsAvailableToHost)
                {
                    continue;
                }

                var feature = await FeatureManager.GetOrNullWithProviderAsync(featureDefinition.Name, providerName, providerKey);

                groupDto.Features.Add(new FeatureDto
                {
                    Name        = featureDefinition.Name,
                    DisplayName = featureDefinition.DisplayName?.Localize(StringLocalizerFactory),
                    ValueType   = featureDefinition.ValueType,
                    Description = featureDefinition.Description?.Localize(StringLocalizerFactory),
                    ParentName  = featureDefinition.Parent?.Name,
                    Value       = feature.Value,
                    Provider    = new FeatureProviderDto
                    {
                        Name = feature.Provider?.Name,
                        Key  = feature.Provider?.Key
                    }
                });
            }

            SetFeatureDepth(groupDto.Features, providerName, providerKey);

            if (groupDto.Features.Any())
            {
                result.Groups.Add(groupDto);
            }
        }

        return(result);
    }
Beispiel #2
0
    public void Should_Serialize_And_Deserialize()
    {
        var featureListDto = new GetFeatureListResultDto
        {
            Groups = new List <FeatureGroupDto>
            {
                new FeatureGroupDto
                {
                    Name        = "MyGroup",
                    DisplayName = "MyGroup",
                    Features    = new List <FeatureDto>
                    {
                        new FeatureDto
                        {
                            ValueType = new FreeTextStringValueType
                            {
                                Validator = new BooleanValueValidator()
                            }
                        },
                        new FeatureDto
                        {
                            ValueType = new SelectionStringValueType
                            {
                                ItemSource = new StaticSelectionStringValueItemSource(
                                    new LocalizableSelectionStringValueItem
                                {
                                    Value       = "TestValue",
                                    DisplayText = new LocalizableStringInfo("TestResourceName", "TestName")
                                }),
                                Validator = new AlwaysValidValueValidator()
                            }
                        },
                        new FeatureDto
                        {
                            ValueType = new ToggleStringValueType
                            {
                                Validator = new NumericValueValidator
                                {
                                    MaxValue = 1000,
                                    MinValue = 10
                                }
                            }
                        },
                        new FeatureDto
                        {
                            Provider = new FeatureProviderDto
                            {
                                Name = "FeatureName",
                                Key  = "FeatureKey"
                            }
                        },
                        new FeatureDto
                        {
                            ValueType = new FreeTextStringValueType
                            {
                                Validator = new UrlValueValidator("https")
                            }
                        }
                    }
                }
            }
        };

        var serialized = _jsonSerializer.Serialize(featureListDto, indented: true);

        var featureListDto2 = _jsonSerializer.Deserialize <GetFeatureListResultDto>(serialized);

        featureListDto2.ShouldNotBeNull();
        featureListDto2.Groups[0].Features[0].ValueType.ShouldBeOfType <FreeTextStringValueType>();
        featureListDto2.Groups[0].Features[0].ValueType.Validator.ShouldBeOfType <BooleanValueValidator>();

        featureListDto2.Groups[0].Features[1].ValueType.ShouldBeOfType <SelectionStringValueType>();
        featureListDto2.Groups[0].Features[1].ValueType.Validator.ShouldBeOfType <AlwaysValidValueValidator>();
        featureListDto2.Groups[0].Features[1].ValueType.As <SelectionStringValueType>().ItemSource.Items.ShouldBeOfType <LocalizableSelectionStringValueItem[]>();
        featureListDto2.Groups[0].Features[1].ValueType.As <SelectionStringValueType>().ItemSource.Items.ShouldContain(x =>
                                                                                                                       x.Value == "TestValue" && x.DisplayText.ResourceName == "TestResourceName" &&
                                                                                                                       x.DisplayText.Name == "TestName");

        featureListDto2.Groups[0].Features[2].ValueType.ShouldBeOfType <ToggleStringValueType>();
        featureListDto2.Groups[0].Features[2].ValueType.Validator.ShouldBeOfType <NumericValueValidator>();
        featureListDto2.Groups[0].Features[2].ValueType.Validator.As <NumericValueValidator>().MaxValue.ShouldBe(1000);
        featureListDto2.Groups[0].Features[2].ValueType.Validator.As <NumericValueValidator>().MinValue.ShouldBe(10);

        featureListDto2.Groups[0].Features[3].Provider.Name.ShouldBe("FeatureName");
        featureListDto2.Groups[0].Features[3].Provider.Key.ShouldBe("FeatureKey");

        featureListDto2.Groups[0].Features[4].ValueType.ShouldBeOfType <FreeTextStringValueType>();
        featureListDto2.Groups[0].Features[4].ValueType.Validator.ShouldBeOfType <UrlValueValidator>();
        featureListDto2.Groups[0].Features[4].ValueType.Validator.As <UrlValueValidator>().Scheme.ShouldBe("https");
    }