diff --git a/src/main/java/dev/openfeature/sdk/ImmutableMetadata.java b/src/main/java/dev/openfeature/sdk/ImmutableMetadata.java index 7f57a174d..f6c1d742e 100644 --- a/src/main/java/dev/openfeature/sdk/ImmutableMetadata.java +++ b/src/main/java/dev/openfeature/sdk/ImmutableMetadata.java @@ -1,5 +1,6 @@ package dev.openfeature.sdk; +import java.util.Collections; import java.util.HashMap; import java.util.Map; import lombok.EqualsAndHashCode; @@ -97,6 +98,10 @@ public T getValue(final String key, final Class type) { } } + public Map asUnmodifiableMap() { + return Collections.unmodifiableMap(metadata); + } + public boolean isEmpty() { return metadata.isEmpty(); } diff --git a/src/test/java/dev/openfeature/sdk/ImmutableMetadataTest.java b/src/test/java/dev/openfeature/sdk/ImmutableMetadataTest.java index e3bd03165..108fac0fe 100644 --- a/src/test/java/dev/openfeature/sdk/ImmutableMetadataTest.java +++ b/src/test/java/dev/openfeature/sdk/ImmutableMetadataTest.java @@ -3,6 +3,8 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotEquals; +import java.util.Map; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; class ImmutableMetadataTest { @@ -25,4 +27,15 @@ void equalImmutableMetadataAreEqual() { assertEquals(i1, i2); } + + @Test + void retrieveAsUnmodifiableMap() { + ImmutableMetadata metadata = + ImmutableMetadata.builder().addString("key1", "value1").build(); + + Map unmodifiableMap = metadata.asUnmodifiableMap(); + assertEquals(unmodifiableMap.size(), 1); + assertEquals(unmodifiableMap.get("key1"), "value1"); + Assertions.assertThrows(UnsupportedOperationException.class, () -> unmodifiableMap.put("key3", "value3")); + } }