Skip to content

Commit 2f7ea06

Browse files
feat(flagd): in-process evaluator returns DISABLED reason for disabled flags
Signed-off-by: Jonathan Norris <jonathan.norris@dynatrace.com>
1 parent a8d756b commit 2f7ea06

2 files changed

Lines changed: 22 additions & 10 deletions

File tree

src/OpenFeature.Providers.Flagd/Resolver/InProcess/JsonEvaluator.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -230,8 +230,11 @@ private ResolutionDetails<T> ResolveValue<T>(string flagKey, T defaultValue,
230230
{
231231
if ("DISABLED" == flagConfiguration.State)
232232
{
233-
throw new FeatureProviderException(ErrorType.FlagNotFound,
234-
"FLAG_NOT_FOUND: flag '" + flagKey + "' is disabled");
233+
return new ResolutionDetails<T>(
234+
flagKey: flagKey,
235+
defaultValue,
236+
reason: Reason.Disabled
237+
);
235238
}
236239

237240
Dictionary<string, object> combinedMetadata = _flagSetMetadata.ToDictionary(

test/OpenFeature.Providers.Flagd.Test/JsonEvaluatorTest.cs

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -245,19 +245,28 @@ public void TestJsonEvaluatorDynamicObjectEvaluation()
245245
}
246246

247247
[Fact]
248-
public void TestJsonEvaluatorDisabledBoolEvaluation()
248+
public void TestJsonEvaluatorDisabledFlagReturnsDisabledReason()
249249
{
250250
_jsonEvaluator.Sync(FlagConfigurationUpdateType.ALL, Utils.flags);
251251

252-
var attributes = ImmutableDictionary.CreateBuilder<string, Value>();
253-
attributes.Add("color", new Value("yellow"));
252+
var result = _jsonEvaluator.ResolveBooleanValueAsync("disabledFlag", false);
254253

255-
var builder = EvaluationContext.Builder();
256-
builder
257-
.Set("color", "yellow");
254+
Assert.False(result.Value);
255+
Assert.Equal(Reason.Disabled, result.Reason);
256+
Assert.Null(result.Variant);
257+
}
258258

259-
Assert.Throws<FeatureProviderException>(() =>
260-
_jsonEvaluator.ResolveBooleanValueAsync("disabledFlag", false, builder.Build()));
259+
[Fact]
260+
public void TestJsonEvaluatorDisabledFlagIgnoresTargeting()
261+
{
262+
_jsonEvaluator.Sync(FlagConfigurationUpdateType.ALL, Utils.flags);
263+
264+
var context = EvaluationContext.Builder().Set("color", "yellow").Build();
265+
var result = _jsonEvaluator.ResolveBooleanValueAsync("disabledFlag", false, context);
266+
267+
Assert.False(result.Value);
268+
Assert.Equal(Reason.Disabled, result.Reason);
269+
Assert.Null(result.Variant);
261270
}
262271

263272
[Fact]

0 commit comments

Comments
 (0)