Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
add unit test and JSONArray case
Browse files Browse the repository at this point in the history
tyiuhc committed Nov 13, 2023
1 parent 2d39546 commit c1069ee
Showing 2 changed files with 35 additions and 1 deletion.
4 changes: 3 additions & 1 deletion sdk/src/main/java/com/amplitude/experiment/util/Variant.kt
Original file line number Diff line number Diff line change
@@ -98,7 +98,9 @@ internal fun EvaluationVariant.convertToVariant(): Variant {
val payload = when {
this.payload != null -> {
if (this.payload is Map<*, *>) {
JSONObject(this.payload)
this.payload.toJSONObject()
} else if (this.payload is Collection<*>) {
this.payload.toJSONArray()
} else {
this.payload
}
32 changes: 32 additions & 0 deletions sdk/src/test/java/com/amplitude/experiment/ExperimentClientTest.kt
Original file line number Diff line number Diff line change
@@ -14,6 +14,8 @@ import io.mockk.spyk
import io.mockk.verify
import okhttp3.HttpUrl.Companion.toHttpUrl
import okhttp3.OkHttpClient
import org.json.JSONArray
import org.json.JSONObject
import org.junit.Assert
import org.junit.Before
import org.junit.Test
@@ -1120,4 +1122,34 @@ class ExperimentClientTest {
spyClient.start(null).get()
verify(exactly = 0) { spyClient.fetchInternal(any(), any(), any(), any()) }
}

@Test
fun `LocalEvaluation - test payload format`() {
val user = ExperimentUser(userId = "test_user")
val exposureTrackingProvider = mockk<TestExposureTrackingProvider>()
every { exposureTrackingProvider.track(any()) } just Runs
val client = DefaultExperimentClient(
API_KEY,
ExperimentConfig(
debug = true,
exposureTrackingProvider = exposureTrackingProvider,
fetchOnStart = false,
source = Source.LOCAL_STORAGE,
),
OkHttpClient(),
mockStorage,
Experiment.executorService,
)
client.start(user).get()
var variant = client.variant("sdk-payload-ci-test")
val obj = JSONObject().put("key1", "val1").put("key2", "val2")
val array = JSONArray().put(JSONObject().put("key1", "obj1")).put(JSONObject().put("key2", "obj2"))
Assert.assertEquals(obj::class, variant.payload!!::class)
Assert.assertEquals(obj.toString(), variant.payload.toString())
// set null user to get array variant
client.start(ExperimentUser()).get()
variant = client.variant("sdk-payload-ci-test")
Assert.assertEquals(array::class, variant.payload!!::class)
Assert.assertEquals(array.toString(), variant.payload.toString())
}
}

0 comments on commit c1069ee

Please sign in to comment.