diff --git a/src/OpenFeature.Contrib.Providers.Flagsmith/FlagsmithProvider.cs b/src/OpenFeature.Contrib.Providers.Flagsmith/FlagsmithProvider.cs index 8be26c89..ae78a0f9 100644 --- a/src/OpenFeature.Contrib.Providers.Flagsmith/FlagsmithProvider.cs +++ b/src/OpenFeature.Contrib.Providers.Flagsmith/FlagsmithProvider.cs @@ -66,9 +66,16 @@ public FlagsmithProvider(IFlagsmithProviderConfiguration providerOptions, IFlags private Task GetFlags(EvaluationContext ctx) { string key = null; - if (ctx != null && ctx.TryGetValue(Configuration.TargetingKey, out var value)) + if (ctx != null) { - key = value?.AsString; + if (ctx.TargetingKey is string { Length: > 0 } targetingKey) + { + key = targetingKey; + } + else if (ctx.TryGetValue(Configuration.TargetingKey, out var value)) + { + key = value?.AsString; + } } return string.IsNullOrEmpty(key) diff --git a/test/OpenFeature.Contrib.Providers.Flagsmith.Test/FlagsmithProviderTest.cs b/test/OpenFeature.Contrib.Providers.Flagsmith.Test/FlagsmithProviderTest.cs index 796e8edd..69677e4f 100644 --- a/test/OpenFeature.Contrib.Providers.Flagsmith.Test/FlagsmithProviderTest.cs +++ b/test/OpenFeature.Contrib.Providers.Flagsmith.Test/FlagsmithProviderTest.cs @@ -449,5 +449,29 @@ public async Task GetStructureValue_ForEnabledFeatureWithWrongFormatValue_Throws // Act and Assert await Assert.ThrowsAsync(() => flagsmithProvider.ResolveStructureValue("example-feature", defaultObject)); } + + [Theory] + [InlineData("property", "attribute", "property")] + [InlineData(null, "attribute", "attribute")] + [InlineData("", "attribute", "attribute")] + [InlineData("property", null, "property")] + [InlineData("property", "", "property")] + public async Task GetValue_WithTargetingKey_UsesPropertyOverAttribute(string property, string attribute, string expected) + { + // Arrange + var flagsmithClient = Substitute.For(); + var providerConfig = GetDefaultFlagsmithProviderConfigurationConfiguration(); + var flagsmithProvider = new FlagsmithProvider(providerConfig, flagsmithClient); + + var contextBuilder = EvaluationContext.Builder() + .SetTargetingKey(property) + .Set(FlagsmithProviderConfiguration.DefaultTargetingKey, attribute); + + // Act + await flagsmithProvider.ResolveBooleanValue("example-feature", false, contextBuilder.Build()); + + // Assert + await flagsmithClient.Received().GetIdentityFlags(expected, Arg.Any>()); + } } }