Skip to content

Commit

Permalink
Implement Stucture with JSON string
Browse files Browse the repository at this point in the history
  • Loading branch information
luizbon committed Dec 21, 2023
1 parent 263705e commit 0feff69
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 3 deletions.
8 changes: 5 additions & 3 deletions src/OpenFeature.Contrib.ConfigCat/ConfigCatProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -58,10 +58,12 @@ public override Task<ResolutionDetails<double>> ResolveDoubleValue(string flagKe
}

/// <inheritdoc/>
public override Task<ResolutionDetails<Value>> ResolveStructureValue(string flagKey, Value defaultValue, EvaluationContext context = null)
public override async Task<ResolutionDetails<Value>> ResolveStructureValue(string flagKey, Value defaultValue, EvaluationContext context = null)
{
throw new NotSupportedException(
"ConfigCat does not support structure values. Use JSON string instead.");
var stringDefaultValue = defaultValue?.AsString;
var result = await ProcessFlag(flagKey, context, stringDefaultValue);
var returnValue = result.Value == null ? defaultValue : new Value(result.Value);
return new ResolutionDetails<Value>(flagKey, returnValue, variant: result.Variant, errorMessage: result.ErrorMessage);
}

private async Task<ResolutionDetails<T>> ProcessFlag<T>(string flagKey, EvaluationContext context, T defaultValue)
Expand Down
16 changes: 16 additions & 0 deletions test/OpenFeature.Contrib.ConfigCat.Test/ConfigCatProviderTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,22 @@ public Task GetIntValue_ForFeature_ReturnExpectedResult(object value, int defaul
return ExecuteResolveTest(value, defaultValue, expectedValue, expectedErrorType, sdkKey, (provider, key, def) => provider.ResolveIntegerValue(key, def));
}

[Theory]
[AutoData]
public async Task GetStructureValue_ForFeature_ReturnExpectedResult(string sdkKey)
{
const string jsonValue = "{ \"key\": \"value\" }";
var defaultValue = new Value(jsonValue);
var configCatProvider = new ConfigCatProvider(sdkKey,
options => { options.FlagOverrides = BuildFlagOverrides(("example-feature", defaultValue)); });

var result = await configCatProvider.ResolveStructureValue( "example-feature", defaultValue);

Assert.Equal(defaultValue.AsString, result.Value.AsString);
Assert.Equal("example-feature", result.FlagKey);
Assert.Equal(ErrorType.None, result.ErrorType);
}

private static async Task ExecuteResolveTest<T>(object value, T defaultValue, T expectedValue, ErrorType expectedErrorType, string sdkKey, Func<ConfigCatProvider, string, T, Task<ResolutionDetails<T>>> resolveFunc)
{
var configCatProvider = new ConfigCatProvider(sdkKey,
Expand Down

0 comments on commit 0feff69

Please sign in to comment.