From c56b3901e24e53f63ea527493b7581af3f7886fd Mon Sep 17 00:00:00 2001 From: Justin Abrahms Date: Fri, 27 May 2022 21:10:50 -0700 Subject: [PATCH] Tests which validate the backend providers are actually called. Fixes #10 --- .../javasdk/OpenFeatureClient.java | 4 ++ .../javasdk/FlagEvaluationSpecTests.java | 48 +++++++++++++++---- 2 files changed, 42 insertions(+), 10 deletions(-) diff --git a/lib/src/main/java/dev/openfeature/javasdk/OpenFeatureClient.java b/lib/src/main/java/dev/openfeature/javasdk/OpenFeatureClient.java index ba04e967..1b7fe7ab 100644 --- a/lib/src/main/java/dev/openfeature/javasdk/OpenFeatureClient.java +++ b/lib/src/main/java/dev/openfeature/javasdk/OpenFeatureClient.java @@ -65,6 +65,10 @@ public class OpenFeatureClient implements Client { if (type == FlagValueType.BOOLEAN) { // TODO: Can we guarantee that defaultValue is a boolean? If not, how to we handle that? providerEval = (ProviderEvaluation) provider.getBooleanEvaluation(key, (Boolean) defaultValue, invocationContext, options); + } else if(type == FlagValueType.STRING) { + providerEval = (ProviderEvaluation) provider.getStringEvaluation(key, (String) defaultValue, invocationContext, options); + } else if (type == FlagValueType.INTEGER) { + providerEval = (ProviderEvaluation) provider.getIntegerEvaluation(key, (Integer) defaultValue, invocationContext, options); } else { // TODO: Support other flag types. throw new GeneralError("Unknown flag type"); diff --git a/lib/src/test/java/dev/openfeature/javasdk/FlagEvaluationSpecTests.java b/lib/src/test/java/dev/openfeature/javasdk/FlagEvaluationSpecTests.java index 1eb09348..0ef9c52c 100644 --- a/lib/src/test/java/dev/openfeature/javasdk/FlagEvaluationSpecTests.java +++ b/lib/src/test/java/dev/openfeature/javasdk/FlagEvaluationSpecTests.java @@ -81,20 +81,48 @@ public class FlagEvaluationSpecTests { @Specification(spec="flag evaluation", number="1.8.1",text="The client MUST provide methods for typed flag " + "evaluation, including boolean, numeric, string, and structure.") @Test void value_flags() { - Client c = _client(); + OpenFeatureAPI api = OpenFeatureAPI.getInstance(); + api.setProvider(new FeatureProvider() { + @Override + public String getName() { + return "test"; + } + + @Override + public ProviderEvaluation getBooleanEvaluation(String key, Boolean defaultValue, EvaluationContext ctx, FlagEvaluationOptions options) { + return ProviderEvaluation.builder() + .value(!defaultValue).build(); + } + + @Override + public ProviderEvaluation getStringEvaluation(String key, String defaultValue, EvaluationContext ctx, FlagEvaluationOptions options) { + return ProviderEvaluation.builder() + .value(new StringBuilder(defaultValue).reverse().toString()) + .build(); + } + + @Override + public ProviderEvaluation getIntegerEvaluation(String key, Integer defaultValue, EvaluationContext ctx, FlagEvaluationOptions options) { + return ProviderEvaluation.builder() + .value(defaultValue * 100) + .build(); + } + }); + Client c = api.getClient(); String key = "key"; - assertFalse(c.getBooleanValue(key, false)); - assertFalse(c.getBooleanValue(key, false, new EvaluationContext())); - assertFalse(c.getBooleanValue(key, false, new EvaluationContext(), FlagEvaluationOptions.builder().build())); + + assertEquals(true, c.getBooleanValue(key, false)); + assertEquals(true, c.getBooleanValue(key, false, new EvaluationContext())); + assertEquals(true, c.getBooleanValue(key, false, new EvaluationContext(), FlagEvaluationOptions.builder().build())); - assertEquals("my-string", c.getStringValue(key, "my-string")); - assertEquals("my-string", c.getStringValue(key, "my-string", new EvaluationContext())); - assertEquals("my-string", c.getStringValue(key, "my-string", new EvaluationContext(), FlagEvaluationOptions.builder().build())); + assertEquals("gnirts-ym", c.getStringValue(key, "my-string")); + assertEquals("gnirts-ym", c.getStringValue(key, "my-string", new EvaluationContext())); + assertEquals("gnirts-ym", c.getStringValue(key, "my-string", new EvaluationContext(), FlagEvaluationOptions.builder().build())); - assertEquals(4, c.getIntegerValue(key, 4)); - assertEquals(4, c.getIntegerValue(key, 4, new EvaluationContext())); - assertEquals(4, c.getIntegerValue(key, 4, new EvaluationContext(), FlagEvaluationOptions.builder().build())); + assertEquals(400, c.getIntegerValue(key, 4)); + assertEquals(400, c.getIntegerValue(key, 4, new EvaluationContext())); + assertEquals(400, c.getIntegerValue(key, 4, new EvaluationContext(), FlagEvaluationOptions.builder().build())); }