From 877a97730acce63ca165d622cd5094f04d9403e7 Mon Sep 17 00:00:00 2001 From: jarebudev <23311805+jarebudev@users.noreply.github.com> Date: Fri, 7 Nov 2025 13:53:49 +0000 Subject: [PATCH 1/3] added missing unit tests to increase test coverage Signed-off-by: jarebudev <23311805+jarebudev@users.noreply.github.com> --- .../dev/openfeature/sdk/BooleanHookTest.java | 31 +++++++++++++++++++ .../dev/openfeature/sdk/DoubleHookTest.java | 31 +++++++++++++++++++ .../openfeature/sdk/ImmutableContextTest.java | 13 ++++++++ .../dev/openfeature/sdk/IntegerHookTest.java | 31 +++++++++++++++++++ .../dev/openfeature/sdk/ObjectHookTest.java | 31 +++++++++++++++++++ .../dev/openfeature/sdk/StringHookTest.java | 31 +++++++++++++++++++ .../sdk/fixtures/HookFixtures.java | 5 +++ 7 files changed, 173 insertions(+) create mode 100644 src/test/java/dev/openfeature/sdk/BooleanHookTest.java create mode 100644 src/test/java/dev/openfeature/sdk/DoubleHookTest.java create mode 100644 src/test/java/dev/openfeature/sdk/IntegerHookTest.java create mode 100644 src/test/java/dev/openfeature/sdk/ObjectHookTest.java create mode 100644 src/test/java/dev/openfeature/sdk/StringHookTest.java diff --git a/src/test/java/dev/openfeature/sdk/BooleanHookTest.java b/src/test/java/dev/openfeature/sdk/BooleanHookTest.java new file mode 100644 index 000000000..a38f3ff79 --- /dev/null +++ b/src/test/java/dev/openfeature/sdk/BooleanHookTest.java @@ -0,0 +1,31 @@ +package dev.openfeature.sdk; + +import static org.assertj.core.api.Assertions.assertThat; + +import dev.openfeature.sdk.fixtures.HookFixtures; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +class BooleanHookTest implements HookFixtures { + + private Hook hook; + + @BeforeEach + void setupTest() { + hook = mockBooleanHook(); + } + + @Test + void verifyFlagValueTypeIsSupportedByHook() { + boolean hookSupported = hook.supportsFlagValueType(FlagValueType.BOOLEAN); + + assertThat(hookSupported).isTrue(); + } + + @Test + void verifyFlagValueTypeIsNotSupportedByHook() { + boolean hookSupported = hook.supportsFlagValueType(FlagValueType.INTEGER); + + assertThat(hookSupported).isFalse(); + } +} diff --git a/src/test/java/dev/openfeature/sdk/DoubleHookTest.java b/src/test/java/dev/openfeature/sdk/DoubleHookTest.java new file mode 100644 index 000000000..9b198ee83 --- /dev/null +++ b/src/test/java/dev/openfeature/sdk/DoubleHookTest.java @@ -0,0 +1,31 @@ +package dev.openfeature.sdk; + +import static org.assertj.core.api.Assertions.assertThat; + +import dev.openfeature.sdk.fixtures.HookFixtures; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +class DoubleHookTest implements HookFixtures { + + private Hook hook; + + @BeforeEach + void setupTest() { + hook = mockDoubleHook(); + } + + @Test + void verifyFlagValueTypeIsSupportedByHook() { + boolean hookSupported = hook.supportsFlagValueType(FlagValueType.DOUBLE); + + assertThat(hookSupported).isTrue(); + } + + @Test + void verifyFlagValueTypeIsNotSupportedByHook() { + boolean hookSupported = hook.supportsFlagValueType(FlagValueType.STRING); + + assertThat(hookSupported).isFalse(); + } +} diff --git a/src/test/java/dev/openfeature/sdk/ImmutableContextTest.java b/src/test/java/dev/openfeature/sdk/ImmutableContextTest.java index 2b39be741..d2b54435d 100644 --- a/src/test/java/dev/openfeature/sdk/ImmutableContextTest.java +++ b/src/test/java/dev/openfeature/sdk/ImmutableContextTest.java @@ -135,6 +135,19 @@ void mergeShouldRetainItsSubkeysWhenOverridingContextHasNoTargetingKey() { assertArrayEquals(new Object[] {"key1_1"}, value.keySet().toArray()); } + @DisplayName("Merge should obtain keys from the overriding context when the existing context is empty") + @Test + void mergeShouldObtainKeysFromOverridingContextWhenExistingContextIsEmpty() { + HashMap attributes = new HashMap<>(); + attributes.put("key1", new Value("val1")); + attributes.put("key2", new Value("val2")); + + EvaluationContext ctx = new ImmutableContext(); + EvaluationContext overriding = new ImmutableContext(attributes); + EvaluationContext merge = ctx.merge(overriding); + assertArrayEquals(new Object[] {"key1", "key2"}, merge.keySet().toArray()); + } + @DisplayName("Two different MutableContext objects with the different contents are not considered equal") @Test void unequalImmutableContextsAreNotEqual() { diff --git a/src/test/java/dev/openfeature/sdk/IntegerHookTest.java b/src/test/java/dev/openfeature/sdk/IntegerHookTest.java new file mode 100644 index 000000000..1dee4bd8f --- /dev/null +++ b/src/test/java/dev/openfeature/sdk/IntegerHookTest.java @@ -0,0 +1,31 @@ +package dev.openfeature.sdk; + +import static org.assertj.core.api.Assertions.assertThat; + +import dev.openfeature.sdk.fixtures.HookFixtures; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +class IntegerHookTest implements HookFixtures { + + private Hook hook; + + @BeforeEach + void setupTest() { + hook = mockIntegerHook(); + } + + @Test + void verifyFlagValueTypeIsSupportedByHook() { + boolean hookSupported = hook.supportsFlagValueType(FlagValueType.INTEGER); + + assertThat(hookSupported).isTrue(); + } + + @Test + void verifyFlagValueTypeIsNotSupportedByHook() { + boolean hookSupported = hook.supportsFlagValueType(FlagValueType.STRING); + + assertThat(hookSupported).isFalse(); + } +} diff --git a/src/test/java/dev/openfeature/sdk/ObjectHookTest.java b/src/test/java/dev/openfeature/sdk/ObjectHookTest.java new file mode 100644 index 000000000..addfde741 --- /dev/null +++ b/src/test/java/dev/openfeature/sdk/ObjectHookTest.java @@ -0,0 +1,31 @@ +package dev.openfeature.sdk; + +import static org.assertj.core.api.Assertions.assertThat; + +import dev.openfeature.sdk.fixtures.HookFixtures; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +public class ObjectHookTest implements HookFixtures { + + private Hook hook; + + @BeforeEach + void setupTest() { + hook = mockObjectHook(); + } + + @Test + void verifyFlagValueTypeIsSupportedByHook() { + boolean hookSupported = hook.supportsFlagValueType(FlagValueType.OBJECT); + + assertThat(hookSupported).isTrue(); + } + + @Test + void verifyFlagValueTypeIsNotSupportedByHook() { + boolean hookSupported = hook.supportsFlagValueType(FlagValueType.INTEGER); + + assertThat(hookSupported).isFalse(); + } +} diff --git a/src/test/java/dev/openfeature/sdk/StringHookTest.java b/src/test/java/dev/openfeature/sdk/StringHookTest.java new file mode 100644 index 000000000..16c0cd41b --- /dev/null +++ b/src/test/java/dev/openfeature/sdk/StringHookTest.java @@ -0,0 +1,31 @@ +package dev.openfeature.sdk; + +import static org.assertj.core.api.Assertions.assertThat; + +import dev.openfeature.sdk.fixtures.HookFixtures; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +class StringHookTest implements HookFixtures { + + private Hook hook; + + @BeforeEach + void setupTest() { + hook = mockStringHook(); + } + + @Test + void verifyFlagValueTypeIsSupportedByHook() { + boolean hookSupported = hook.supportsFlagValueType(FlagValueType.STRING); + + assertThat(hookSupported).isTrue(); + } + + @Test + void verifyFlagValueTypeIsNotSupportedByHook() { + boolean hookSupported = hook.supportsFlagValueType(FlagValueType.INTEGER); + + assertThat(hookSupported).isFalse(); + } +} diff --git a/src/test/java/dev/openfeature/sdk/fixtures/HookFixtures.java b/src/test/java/dev/openfeature/sdk/fixtures/HookFixtures.java index b94e58a11..d2d51bac7 100644 --- a/src/test/java/dev/openfeature/sdk/fixtures/HookFixtures.java +++ b/src/test/java/dev/openfeature/sdk/fixtures/HookFixtures.java @@ -6,6 +6,7 @@ import dev.openfeature.sdk.DoubleHook; import dev.openfeature.sdk.Hook; import dev.openfeature.sdk.IntegerHook; +import dev.openfeature.sdk.ObjectHook; import dev.openfeature.sdk.StringHook; public interface HookFixtures { @@ -26,6 +27,10 @@ default Hook mockDoubleHook() { return spy(DoubleHook.class); } + default Hook mockObjectHook() { + return spy(ObjectHook.class); + } + default Hook mockGenericHook() { return spy(Hook.class); } From 13f7c86979c15ec1c81f650a971b7c896d2e9264 Mon Sep 17 00:00:00 2001 From: jarebudev <23311805+jarebudev@users.noreply.github.com> Date: Fri, 7 Nov 2025 14:03:37 +0000 Subject: [PATCH 2/3] applied gemini code review suggestion Signed-off-by: jarebudev <23311805+jarebudev@users.noreply.github.com> --- src/test/java/dev/openfeature/sdk/ObjectHookTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/dev/openfeature/sdk/ObjectHookTest.java b/src/test/java/dev/openfeature/sdk/ObjectHookTest.java index addfde741..7e474c0bd 100644 --- a/src/test/java/dev/openfeature/sdk/ObjectHookTest.java +++ b/src/test/java/dev/openfeature/sdk/ObjectHookTest.java @@ -6,7 +6,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -public class ObjectHookTest implements HookFixtures { +class ObjectHookTest implements HookFixtures { private Hook hook; From 040fc11df2d0c585e079de4c9558fa82033645d3 Mon Sep 17 00:00:00 2001 From: Todd Baert Date: Fri, 7 Nov 2025 11:00:26 -0500 Subject: [PATCH 3/3] Apply suggestion from @gemini-code-assist[bot] Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> Signed-off-by: Todd Baert --- src/test/java/dev/openfeature/sdk/ImmutableContextTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/dev/openfeature/sdk/ImmutableContextTest.java b/src/test/java/dev/openfeature/sdk/ImmutableContextTest.java index d2b54435d..0b8a44d0d 100644 --- a/src/test/java/dev/openfeature/sdk/ImmutableContextTest.java +++ b/src/test/java/dev/openfeature/sdk/ImmutableContextTest.java @@ -145,7 +145,7 @@ void mergeShouldObtainKeysFromOverridingContextWhenExistingContextIsEmpty() { EvaluationContext ctx = new ImmutableContext(); EvaluationContext overriding = new ImmutableContext(attributes); EvaluationContext merge = ctx.merge(overriding); - assertArrayEquals(new Object[] {"key1", "key2"}, merge.keySet().toArray()); + assertEquals(new java.util.HashSet<>(java.util.Arrays.asList("key1", "key2")), merge.keySet()); } @DisplayName("Two different MutableContext objects with the different contents are not considered equal")