From d0c62222195df8d82e87d4448bd479b49a4c069d Mon Sep 17 00:00:00 2001 From: Mark Phelps <209477+markphelps@users.noreply.github.com> Date: Tue, 17 Sep 2024 19:20:30 -0400 Subject: [PATCH] chore: recommit changes without submodule updates Signed-off-by: Mark Phelps <209477+markphelps@users.noreply.github.com> --- .../providers/flipt/FliptProvider.java | 20 +++++++++--- .../providers/flipt/FliptProviderTest.java | 31 +++++++++++++++++-- 2 files changed, 44 insertions(+), 7 deletions(-) diff --git a/providers/flipt/src/main/java/dev/openfeature/contrib/providers/flipt/FliptProvider.java b/providers/flipt/src/main/java/dev/openfeature/contrib/providers/flipt/FliptProvider.java index c0cdb9f0d..070bccad1 100644 --- a/providers/flipt/src/main/java/dev/openfeature/contrib/providers/flipt/FliptProvider.java +++ b/providers/flipt/src/main/java/dev/openfeature/contrib/providers/flipt/FliptProvider.java @@ -123,7 +123,8 @@ public ProviderEvaluation getBooleanEvaluation(String key, Boolean defa @Override public ProviderEvaluation getStringEvaluation(String key, String defaultValue, EvaluationContext ctx) { - ProviderEvaluation valueProviderEvaluation = getObjectEvaluation(key, new Value(defaultValue), ctx); + ProviderEvaluation valueProviderEvaluation = + evaluateVariant(String.class, key, new Value(defaultValue), ctx); return ProviderEvaluation.builder() .value(valueProviderEvaluation.getValue().asString()) .variant(valueProviderEvaluation.getVariant()) @@ -135,7 +136,8 @@ public ProviderEvaluation getStringEvaluation(String key, String default @Override public ProviderEvaluation getIntegerEvaluation(String key, Integer defaultValue, EvaluationContext ctx) { - ProviderEvaluation valueProviderEvaluation = getObjectEvaluation(key, new Value(defaultValue), ctx); + ProviderEvaluation valueProviderEvaluation = + evaluateVariant(Integer.class, key, new Value(defaultValue), ctx); Integer value = getIntegerValue(valueProviderEvaluation, defaultValue); return ProviderEvaluation.builder() .value(value) @@ -157,7 +159,8 @@ private static Integer getIntegerValue(ProviderEvaluation valueProviderEv @Override public ProviderEvaluation getDoubleEvaluation(String key, Double defaultValue, EvaluationContext ctx) { - ProviderEvaluation valueProviderEvaluation = getObjectEvaluation(key, new Value(defaultValue), ctx); + ProviderEvaluation valueProviderEvaluation = + evaluateVariant(Double.class, key, new Value(defaultValue), ctx); Double value = getDoubleValue(valueProviderEvaluation, defaultValue); return ProviderEvaluation.builder() .value(value) @@ -179,12 +182,18 @@ private static Double getDoubleValue(ProviderEvaluation valueProviderEval @Override public ProviderEvaluation getObjectEvaluation(String key, Value defaultValue, EvaluationContext ctx) { + return evaluateVariant(Value.class, key, defaultValue, ctx); + } + + private ProviderEvaluation evaluateVariant(Class clazz, String key, Value defaultValue, + EvaluationContext ctx) { if (!ProviderState.READY.equals(state)) { if (ProviderState.NOT_READY.equals(state)) { throw new ProviderNotReadyError(PROVIDER_NOT_YET_INITIALIZED); } throw new GeneralError(UNKNOWN_ERROR); } + Map contextMap = ContextTransformer.transform(ctx); EvaluationRequest request = EvaluationRequest.builder().namespaceKey(fliptProviderConfig.getNamespace()) .flagKey(key).entityId(ctx.getTargetingKey()).context(contextMap).build(); @@ -209,7 +218,10 @@ public ProviderEvaluation getObjectEvaluation(String key, Value defaultVa ImmutableMetadata.ImmutableMetadataBuilder flagMetadataBuilder = ImmutableMetadata.builder(); if (response.getVariantAttachment() != null && !response.getVariantAttachment().isEmpty()) { flagMetadataBuilder.addString("variant-attachment", response.getVariantAttachment()); - value = new Value(response.getVariantAttachment()); + + if (clazz.isAssignableFrom(Value.class)) { + value = new Value(response.getVariantAttachment()); + } } return ProviderEvaluation.builder() diff --git a/providers/flipt/src/test/java/dev/openfeature/contrib/providers/flipt/FliptProviderTest.java b/providers/flipt/src/test/java/dev/openfeature/contrib/providers/flipt/FliptProviderTest.java index 3265b6c3d..8099f46aa 100644 --- a/providers/flipt/src/test/java/dev/openfeature/contrib/providers/flipt/FliptProviderTest.java +++ b/providers/flipt/src/test/java/dev/openfeature/contrib/providers/flipt/FliptProviderTest.java @@ -5,6 +5,16 @@ import com.github.tomakehurst.wiremock.client.WireMock; import com.github.tomakehurst.wiremock.junit5.WireMockRuntimeInfo; import com.github.tomakehurst.wiremock.junit5.WireMockTest; +import dev.openfeature.sdk.Client; +import dev.openfeature.sdk.FlagEvaluationDetails; +import dev.openfeature.sdk.ImmutableContext; +import dev.openfeature.sdk.ImmutableMetadata; +import dev.openfeature.sdk.MutableContext; +import dev.openfeature.sdk.OpenFeatureAPI; +import dev.openfeature.sdk.ProviderEvaluation; +import dev.openfeature.sdk.ProviderEventDetails; +import dev.openfeature.sdk.ProviderState; +import dev.openfeature.sdk.Value; import dev.openfeature.sdk.exceptions.GeneralError; import dev.openfeature.sdk.exceptions.ProviderNotReadyError; import lombok.SneakyThrows; @@ -16,8 +26,6 @@ import java.net.URL; import java.nio.file.Files; import java.nio.file.Paths; -import java.util.HashMap; -import java.util.Map; import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; import static com.github.tomakehurst.wiremock.client.WireMock.equalTo; @@ -46,7 +54,6 @@ class FliptProviderTest { private static FliptProvider fliptProvider; private static Client client; - private String apiUrl; @BeforeAll @@ -167,6 +174,24 @@ void getEvaluationMetadataTest() { assertNull(nonExistingFlagEvaluation.getFlagMetadata().getBoolean("variant-attachment")); } + @SneakyThrows + @Test + void getObjectEvaluationTest() { + mockFliptAPI("/evaluate/v1/variant", "variant-object.json", OBJECT_FLAG_NAME); + MutableContext evaluationContext = new MutableContext(); + evaluationContext.setTargetingKey(TARGETING_KEY); + evaluationContext.add("userId", "object"); + + Value expectedValue = new Value("{\"key1\":\"value1\",\"key2\":42,\"key3\":true}"); + Value emptyValue = new Value(); + + assertEquals(expectedValue, client.getObjectValue(OBJECT_FLAG_NAME, emptyValue, evaluationContext)); + assertEquals(emptyValue, client.getObjectValue("non-existing", emptyValue, evaluationContext)); + + // non-object flag value + assertEquals(emptyValue, client.getObjectValue(VARIANT_FLAG_NAME, emptyValue, evaluationContext)); + } + @SneakyThrows @Test void shouldThrowIfNotInitialized() {