From 9ff0294c48f2ce81e95ce30219e19c6db8013327 Mon Sep 17 00:00:00 2001 From: Nicklas Lundin Date: Tue, 7 Nov 2023 15:46:23 +0100 Subject: [PATCH] refactor: make targeting key immutable and update mutating functions Signed-off-by: Nicklas Lundin --- .../java/dev/openfeature/sdk/EvaluationContext.kt | 2 +- .../java/dev/openfeature/sdk/ImmutableContext.kt | 14 +++++++++----- .../java/dev/openfeature/sdk/EvalContextTests.kt | 8 +++++--- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/OpenFeature/src/main/java/dev/openfeature/sdk/EvaluationContext.kt b/OpenFeature/src/main/java/dev/openfeature/sdk/EvaluationContext.kt index 3141278d..5ac86e6a 100644 --- a/OpenFeature/src/main/java/dev/openfeature/sdk/EvaluationContext.kt +++ b/OpenFeature/src/main/java/dev/openfeature/sdk/EvaluationContext.kt @@ -2,7 +2,7 @@ package dev.openfeature.sdk interface EvaluationContext : Structure { fun getTargetingKey(): String - fun setTargetingKey(targetingKey: String) + fun withTargetingKey(targetingKey: String): EvaluationContext // Make sure these are implemented for correct object comparisons override fun hashCode(): Int diff --git a/OpenFeature/src/main/java/dev/openfeature/sdk/ImmutableContext.kt b/OpenFeature/src/main/java/dev/openfeature/sdk/ImmutableContext.kt index a0bd19d8..d60a4ad1 100644 --- a/OpenFeature/src/main/java/dev/openfeature/sdk/ImmutableContext.kt +++ b/OpenFeature/src/main/java/dev/openfeature/sdk/ImmutableContext.kt @@ -1,15 +1,19 @@ package dev.openfeature.sdk -class ImmutableContext -(private var targetingKey: String = "", attributes: Map = mapOf()) : EvaluationContext { +class ImmutableContext( + private val targetingKey: String = "", + attributes: Map = mapOf() +) : EvaluationContext { private val structure: ImmutableStructure = ImmutableStructure(attributes) override fun getTargetingKey(): String { return targetingKey } - override fun setTargetingKey(targetingKey: String) { - this.targetingKey = targetingKey - } + override fun withTargetingKey(targetingKey: String): ImmutableContext = + ImmutableContext( + targetingKey = targetingKey, + attributes = this.structure.asMap() + ) override fun keySet(): Set { return structure.keySet() diff --git a/OpenFeature/src/test/java/dev/openfeature/sdk/EvalContextTests.kt b/OpenFeature/src/test/java/dev/openfeature/sdk/EvalContextTests.kt index 7fcc6220..3d1170ab 100644 --- a/OpenFeature/src/test/java/dev/openfeature/sdk/EvalContextTests.kt +++ b/OpenFeature/src/test/java/dev/openfeature/sdk/EvalContextTests.kt @@ -7,10 +7,12 @@ import java.util.Date class EvalContextTests { @Test - fun testContextStoresTargetingKey() { + fun testContextIsImmutableButStoresTargetingKey() { val ctx = ImmutableContext() - ctx.setTargetingKey("test") - Assert.assertEquals("test", ctx.getTargetingKey()) + Assert.assertEquals("", ctx.getTargetingKey()) + + val newCtx = ctx.withTargetingKey("test") + Assert.assertEquals("test", newCtx.getTargetingKey()) } @Test