Skip to content

Commit

Permalink
Merge pull request #534 from Azure/preview
Browse files Browse the repository at this point in the history
Merge preview to release/preview/v8 for 8.0.0-preview.2 release
  • Loading branch information
amerjusupovic authored Mar 14, 2024
2 parents 113348a + f1af43c commit 17f708b
Show file tree
Hide file tree
Showing 6 changed files with 113 additions and 37 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
<!-- Nuget Package Version Settings -->

<PropertyGroup>
<OfficialVersion>8.0.0-preview</OfficialVersion>
<OfficialVersion>8.0.0-preview.2</OfficialVersion>
</PropertyGroup>

<PropertyGroup Condition="'$(CDP_PATCH_NUMBER)'!='' AND '$(CDP_BUILD_TYPE)'=='Official'">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
<!-- Nuget Package Version Settings -->

<PropertyGroup>
<OfficialVersion>8.0.0-preview</OfficialVersion>
<OfficialVersion>8.0.0-preview.2</OfficialVersion>
</PropertyGroup>

<PropertyGroup Condition="'$(CDP_PATCH_NUMBER)'!='' AND '$(CDP_BUILD_TYPE)'=='Official'">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,9 +93,10 @@ public Task<IEnumerable<KeyValuePair<string, string>>> ProcessKeyValue(Configura

keyValues.Add(new KeyValuePair<string, string>($"{variantsPath}:{FeatureManagementConstants.Name}", featureVariant.Name));

if (featureVariant.ConfigurationValue != null)
foreach (KeyValuePair<string, string> kvp in new JsonFlattener().FlattenJson(featureVariant.ConfigurationValue))
{
keyValues.Add(new KeyValuePair<string, string>($"{variantsPath}:{FeatureManagementConstants.ConfigurationValue}", featureVariant.ConfigurationValue));
keyValues.Add(new KeyValuePair<string, string>($"{variantsPath}:{FeatureManagementConstants.ConfigurationValue}" +
(string.IsNullOrEmpty(kvp.Key) ? "" : $":{kvp.Key}"), kvp.Value));
}

if (featureVariant.ConfigurationReference != null)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
//
using System.Text.Json;
using System.Text.Json.Serialization;

namespace Microsoft.Extensions.Configuration.AzureAppConfiguration.FeatureManagement
Expand All @@ -11,7 +12,7 @@ internal class FeatureVariant
public string Name { get; set; }

[JsonPropertyName("configuration_value")]
public string ConfigurationValue { get; set; }
public JsonElement ConfigurationValue { get; set; }

[JsonPropertyName("configuration_reference")]
public string ConfigurationReference { get; set; }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
<!-- Nuget Package Version Settings -->

<PropertyGroup>
<OfficialVersion>8.0.0-preview</OfficialVersion>
<OfficialVersion>8.0.0-preview.2</OfficialVersion>
</PropertyGroup>

<PropertyGroup Condition="'$(CDP_PATCH_NUMBER)'!='' AND '$(CDP_BUILD_TYPE)'=='Official'">
Expand Down
136 changes: 105 additions & 31 deletions tests/Tests.AzureAppConfiguration/FeatureManagementTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -188,13 +188,13 @@ public class FeatureManagementTests
eTag: new ETag("0a76e3d7-7ec1-4e37-883c-9ea6d0d89e63"),
contentType: "text");

private ConfigurationSetting _variantsKv = ConfigurationModelFactory.ConfigurationSetting(
key: FeatureManagementConstants.FeatureFlagMarker + "VariantsFeature",
private ConfigurationSetting _variantsKv1 = ConfigurationModelFactory.ConfigurationSetting(
key: FeatureManagementConstants.FeatureFlagMarker + "VariantsFeature1",
value: @"
{
""id"": ""VariantsFeature"",
""id"": ""VariantsFeature1"",
""description"": """",
""display_name"": ""Variants Feature"",
""display_name"": ""Variants Feature 1"",
""enabled"": true,
""conditions"": {
""client_filters"": [
Expand Down Expand Up @@ -265,6 +265,54 @@ public class FeatureManagementTests
contentType: FeatureManagementConstants.ContentType + ";charset=utf-8",
eTag: new ETag("c3c231fd-39a0-4cb6-3237-4614474b92c1"));

private ConfigurationSetting _variantsKv2 = ConfigurationModelFactory.ConfigurationSetting(
key: FeatureManagementConstants.FeatureFlagMarker + "VariantsFeature2",
value: @"
{
""id"": ""VariantsFeature2"",
""description"": """",
""display_name"": ""Variants Feature 2"",
""enabled"": false,
""conditions"": {
""client_filters"": [
]
},
""variants"": [
{
""name"": ""ObjectVariant"",
""configuration_value"": {
""Key1"": ""Value1"",
""Key2"": {
""InsideKey2"": ""Value2""
}
}
},
{
""name"": ""NumberVariant"",
""configuration_value"": 100
},
{
""name"": ""NullVariant"",
""configuration_value"": null
},
{
""name"": ""MissingValueVariant""
},
{
""name"": ""BooleanVariant"",
""configuration_value"": true
}
],
""allocation"": {
""default_when_disabled"": ""ObjectVariant"",
""default_when_enabled"": ""ObjectVariant""
}
}
",
label: default,
contentType: FeatureManagementConstants.ContentType + ";charset=utf-8",
eTag: new ETag("c3c231fd-39a0-4cb6-3237-4614474b92c1"));

private ConfigurationSetting _telemetryKv = ConfigurationModelFactory.ConfigurationSetting(
key: FeatureManagementConstants.FeatureFlagMarker + "TelemetryFeature",
value: @"
Expand Down Expand Up @@ -1266,7 +1314,8 @@ public void WithVariants()
{
var featureFlags = new List<ConfigurationSetting>()
{
_variantsKv
_variantsKv1,
_variantsKv2
};

var mockResponse = new Mock<Response>();
Expand All @@ -1283,32 +1332,57 @@ public void WithVariants()
})
.Build();

Assert.Equal("AlwaysOn", config["FeatureManagement:VariantsFeature:EnabledFor:0:Name"]);
Assert.Equal("Big", config["FeatureManagement:VariantsFeature:Variants:0:Name"]);
Assert.Equal("600px", config["FeatureManagement:VariantsFeature:Variants:0:ConfigurationValue"]);
Assert.Equal("Small", config["FeatureManagement:VariantsFeature:Variants:1:Name"]);
Assert.Equal("ShoppingCart:Small", config["FeatureManagement:VariantsFeature:Variants:1:ConfigurationReference"]);
Assert.Equal("Disabled", config["FeatureManagement:VariantsFeature:Variants:1:StatusOverride"]);
Assert.Equal("Small", config["FeatureManagement:VariantsFeature:Allocation:DefaultWhenDisabled"]);
Assert.Equal("Small", config["FeatureManagement:VariantsFeature:Allocation:DefaultWhenEnabled"]);
Assert.Equal("Big", config["FeatureManagement:VariantsFeature:Allocation:User:0:Variant"]);
Assert.Equal("Marsha", config["FeatureManagement:VariantsFeature:Allocation:User:0:Users:0"]);
Assert.Equal("John", config["FeatureManagement:VariantsFeature:Allocation:User:0:Users:1"]);
Assert.Equal("Small", config["FeatureManagement:VariantsFeature:Allocation:User:1:Variant"]);
Assert.Equal("Alice", config["FeatureManagement:VariantsFeature:Allocation:User:1:Users:0"]);
Assert.Equal("Bob", config["FeatureManagement:VariantsFeature:Allocation:User:1:Users:1"]);
Assert.Equal("Big", config["FeatureManagement:VariantsFeature:Allocation:Group:0:Variant"]);
Assert.Equal("Ring1", config["FeatureManagement:VariantsFeature:Allocation:Group:0:Groups:0"]);
Assert.Equal("Small", config["FeatureManagement:VariantsFeature:Allocation:Group:1:Variant"]);
Assert.Equal("Ring2", config["FeatureManagement:VariantsFeature:Allocation:Group:1:Groups:0"]);
Assert.Equal("Ring3", config["FeatureManagement:VariantsFeature:Allocation:Group:1:Groups:1"]);
Assert.Equal("Big", config["FeatureManagement:VariantsFeature:Allocation:Percentile:0:Variant"]);
Assert.Equal("0", config["FeatureManagement:VariantsFeature:Allocation:Percentile:0:From"]);
Assert.Equal("50", config["FeatureManagement:VariantsFeature:Allocation:Percentile:0:To"]);
Assert.Equal("Small", config["FeatureManagement:VariantsFeature:Allocation:Percentile:1:Variant"]);
Assert.Equal("50", config["FeatureManagement:VariantsFeature:Allocation:Percentile:1:From"]);
Assert.Equal("100", config["FeatureManagement:VariantsFeature:Allocation:Percentile:1:To"]);
Assert.Equal("13992821", config["FeatureManagement:VariantsFeature:Allocation:Seed"]);
Assert.Equal("AlwaysOn", config["FeatureManagement:VariantsFeature1:EnabledFor:0:Name"]);
Assert.Equal("Big", config["FeatureManagement:VariantsFeature1:Variants:0:Name"]);
Assert.Equal("600px", config["FeatureManagement:VariantsFeature1:Variants:0:ConfigurationValue"]);
Assert.Equal("Small", config["FeatureManagement:VariantsFeature1:Variants:1:Name"]);
Assert.Equal("ShoppingCart:Small", config["FeatureManagement:VariantsFeature1:Variants:1:ConfigurationReference"]);
Assert.Equal("Disabled", config["FeatureManagement:VariantsFeature1:Variants:1:StatusOverride"]);
Assert.Equal("Small", config["FeatureManagement:VariantsFeature1:Allocation:DefaultWhenDisabled"]);
Assert.Equal("Small", config["FeatureManagement:VariantsFeature1:Allocation:DefaultWhenEnabled"]);
Assert.Equal("Big", config["FeatureManagement:VariantsFeature1:Allocation:User:0:Variant"]);
Assert.Equal("Marsha", config["FeatureManagement:VariantsFeature1:Allocation:User:0:Users:0"]);
Assert.Equal("John", config["FeatureManagement:VariantsFeature1:Allocation:User:0:Users:1"]);
Assert.Equal("Small", config["FeatureManagement:VariantsFeature1:Allocation:User:1:Variant"]);
Assert.Equal("Alice", config["FeatureManagement:VariantsFeature1:Allocation:User:1:Users:0"]);
Assert.Equal("Bob", config["FeatureManagement:VariantsFeature1:Allocation:User:1:Users:1"]);
Assert.Equal("Big", config["FeatureManagement:VariantsFeature1:Allocation:Group:0:Variant"]);
Assert.Equal("Ring1", config["FeatureManagement:VariantsFeature1:Allocation:Group:0:Groups:0"]);
Assert.Equal("Small", config["FeatureManagement:VariantsFeature1:Allocation:Group:1:Variant"]);
Assert.Equal("Ring2", config["FeatureManagement:VariantsFeature1:Allocation:Group:1:Groups:0"]);
Assert.Equal("Ring3", config["FeatureManagement:VariantsFeature1:Allocation:Group:1:Groups:1"]);
Assert.Equal("Big", config["FeatureManagement:VariantsFeature1:Allocation:Percentile:0:Variant"]);
Assert.Equal("0", config["FeatureManagement:VariantsFeature1:Allocation:Percentile:0:From"]);
Assert.Equal("50", config["FeatureManagement:VariantsFeature1:Allocation:Percentile:0:To"]);
Assert.Equal("Small", config["FeatureManagement:VariantsFeature1:Allocation:Percentile:1:Variant"]);
Assert.Equal("50", config["FeatureManagement:VariantsFeature1:Allocation:Percentile:1:From"]);
Assert.Equal("100", config["FeatureManagement:VariantsFeature1:Allocation:Percentile:1:To"]);
Assert.Equal("13992821", config["FeatureManagement:VariantsFeature1:Allocation:Seed"]);

Assert.Equal("Disabled", config["FeatureManagement:VariantsFeature2:Status"]);
Assert.Equal("ObjectVariant", config["FeatureManagement:VariantsFeature2:Variants:0:Name"]);
Assert.Equal("Value1", config["FeatureManagement:VariantsFeature2:Variants:0:ConfigurationValue:Key1"]);
Assert.Equal("Value2", config["FeatureManagement:VariantsFeature2:Variants:0:ConfigurationValue:Key2:InsideKey2"]);
Assert.Equal("NumberVariant", config["FeatureManagement:VariantsFeature2:Variants:1:Name"]);
Assert.Equal("100", config["FeatureManagement:VariantsFeature2:Variants:1:ConfigurationValue"]);
Assert.Equal("NullVariant", config["FeatureManagement:VariantsFeature2:Variants:2:Name"]);
Assert.Equal("", config["FeatureManagement:VariantsFeature2:Variants:2:ConfigurationValue"]);
Assert.True(config
.GetSection("FeatureManagement:VariantsFeature2:Variants:2")
.AsEnumerable()
.ToDictionary(x => x.Key, x => x.Value)
.ContainsKey("FeatureManagement:VariantsFeature2:Variants:2:ConfigurationValue"));
Assert.Equal("MissingValueVariant", config["FeatureManagement:VariantsFeature2:Variants:3:Name"]);
Assert.Null(config["FeatureManagement:VariantsFeature2:Variants:3:ConfigurationValue"]);
Assert.False(config
.GetSection("FeatureManagement:VariantsFeature2:Variants:3")
.AsEnumerable()
.ToDictionary(x => x.Key, x => x.Value)
.ContainsKey("FeatureManagement:VariantsFeature2:Variants:3:ConfigurationValue"));
Assert.Equal("BooleanVariant", config["FeatureManagement:VariantsFeature2:Variants:4:Name"]);
Assert.Equal("True", config["FeatureManagement:VariantsFeature2:Variants:4:ConfigurationValue"]);
Assert.Equal("ObjectVariant", config["FeatureManagement:VariantsFeature2:Allocation:DefaultWhenDisabled"]);
Assert.Equal("ObjectVariant", config["FeatureManagement:VariantsFeature2:Allocation:DefaultWhenEnabled"]);
}

[Fact]
Expand Down

0 comments on commit 17f708b

Please sign in to comment.