-
Notifications
You must be signed in to change notification settings - Fork 39
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
add MutableContextTest for test coverage
Signed-off-by: liran2000 <liran2000@gmail.com>
- Loading branch information
1 parent
2be7f2b
commit f3b6bac
Showing
1 changed file
with
105 additions
and
0 deletions.
There are no files selected for viewing
105 changes: 105 additions & 0 deletions
105
src/test/java/dev/openfeature/sdk/MutableContextTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,105 @@ | ||
package dev.openfeature.sdk; | ||
|
||
import org.junit.jupiter.api.DisplayName; | ||
import org.junit.jupiter.api.Test; | ||
|
||
import java.util.HashMap; | ||
|
||
import static dev.openfeature.sdk.EvaluationContext.TARGETING_KEY; | ||
import static org.junit.jupiter.api.Assertions.assertArrayEquals; | ||
import static org.junit.jupiter.api.Assertions.assertEquals; | ||
import static org.junit.jupiter.api.Assertions.assertTrue; | ||
|
||
class MutableContextTest { | ||
|
||
@DisplayName("targeting key should be changed from the overriding context") | ||
@Test | ||
void shouldChangeTargetingKeyFromOverridingContext() { | ||
HashMap<String, Value> attributes = new HashMap<>(); | ||
attributes.put("key1", new Value("val1")); | ||
attributes.put("key2", new Value("val2")); | ||
EvaluationContext ctx = new MutableContext("targeting key", attributes); | ||
EvaluationContext overriding = new MutableContext("overriding_key"); | ||
EvaluationContext merge = ctx.merge(overriding); | ||
assertEquals("overriding_key", merge.getTargetingKey()); | ||
} | ||
|
||
@DisplayName("targeting key should not changed from the overriding context if missing") | ||
@Test | ||
void shouldRetainTargetingKeyWhenOverridingContextTargetingKeyValueIsEmpty() { | ||
HashMap<String, Value> attributes = new HashMap<>(); | ||
attributes.put("key1", new Value("val1")); | ||
attributes.put("key2", new Value("val2")); | ||
EvaluationContext ctx = new MutableContext("targeting_key", attributes); | ||
EvaluationContext overriding = new MutableContext(""); | ||
EvaluationContext merge = ctx.merge(overriding); | ||
assertEquals("targeting_key", merge.getTargetingKey()); | ||
} | ||
@DisplayName("missing targeting key should return null") | ||
@Test | ||
void missingTargetingKeyShould() { | ||
EvaluationContext ctx = new MutableContext(); | ||
assertEquals(null, ctx.getTargetingKey()); | ||
} | ||
|
||
@DisplayName("Merge should retain all the attributes from the existing context when overriding context is null") | ||
@Test | ||
void mergeShouldReturnAllTheValuesFromTheContextWhenOverridingContextIsNull() { | ||
HashMap<String, Value> attributes = new HashMap<>(); | ||
attributes.put("key1", new Value("val1")); | ||
attributes.put("key2", new Value("val2")); | ||
EvaluationContext ctx = new MutableContext("targeting_key", attributes); | ||
EvaluationContext merge = ctx.merge(null); | ||
assertEquals("targeting_key", merge.getTargetingKey()); | ||
assertArrayEquals(new Object[]{"key1", "key2", TARGETING_KEY}, merge.keySet().toArray()); | ||
} | ||
|
||
@DisplayName("Merge should retain subkeys from the existing context when the overriding context has the same targeting key") | ||
@Test | ||
void mergeShouldRetainItsSubkeysWhenOverridingContextHasTheSameKey() { | ||
HashMap<String, Value> attributes = new HashMap<>(); | ||
HashMap<String, Value> overridingAttributes = new HashMap<>(); | ||
HashMap<String, Value> key1Attributes = new HashMap<>(); | ||
HashMap<String, Value> ovKey1Attributes = new HashMap<>(); | ||
|
||
key1Attributes.put("key1_1", new Value("val1_1")); | ||
attributes.put("key1", new Value(new ImmutableStructure(key1Attributes))); | ||
attributes.put("key2", new Value("val2")); | ||
ovKey1Attributes.put("overriding_key1_1", new Value("overriding_val_1_1")); | ||
overridingAttributes.put("key1", new Value(new ImmutableStructure(ovKey1Attributes))); | ||
|
||
EvaluationContext ctx = new MutableContext("targeting_key", attributes); | ||
EvaluationContext overriding = new MutableContext("targeting_key", overridingAttributes); | ||
EvaluationContext merge = ctx.merge(overriding); | ||
assertEquals("targeting_key", merge.getTargetingKey()); | ||
assertArrayEquals(new Object[]{"key1", "key2", TARGETING_KEY}, merge.keySet().toArray()); | ||
|
||
Value key1 = merge.getValue("key1"); | ||
assertTrue(key1.isStructure()); | ||
|
||
Structure value = key1.asStructure(); | ||
assertArrayEquals(new Object[]{"key1_1","overriding_key1_1"}, value.keySet().toArray()); | ||
} | ||
|
||
@DisplayName("Merge should retain subkeys from the existing context when the overriding context doesn't have targeting key") | ||
@Test | ||
void mergeShouldRetainItsSubkeysWhenOverridingContextHasNoTargetingKey() { | ||
HashMap<String, Value> attributes = new HashMap<>(); | ||
HashMap<String, Value> key1Attributes = new HashMap<>(); | ||
|
||
key1Attributes.put("key1_1", new Value("val1_1")); | ||
attributes.put("key1", new Value(new ImmutableStructure(key1Attributes))); | ||
attributes.put("key2", new Value("val2")); | ||
|
||
EvaluationContext ctx = new MutableContext(attributes); | ||
EvaluationContext overriding = new MutableContext(); | ||
EvaluationContext merge = ctx.merge(overriding); | ||
assertArrayEquals(new Object[]{"key1", "key2"}, merge.keySet().toArray()); | ||
|
||
Value key1 = merge.getValue("key1"); | ||
assertTrue(key1.isStructure()); | ||
|
||
Structure value = key1.asStructure(); | ||
assertArrayEquals(new Object[]{"key1_1"}, value.keySet().toArray()); | ||
} | ||
} |