Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 40 additions & 23 deletions sdk/src/test/java/com/amplitude/experiment/ExperimentClientTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,23 @@ private const val SERVER_API_KEY = "server-qz35UwzJ5akieoAdIgzM4m9MIiOLXLoz"
private const val KEY = "sdk-ci-test"
private const val INITIAL_KEY = "initial-key"

/**
* To assert two variants. These fields are not consistent across evaluation, simply assert not null.
* - metadata.evaluationId
*/
fun assertVariantEquals(
expected: Variant,
actual: Variant,
) {
Assert.assertEquals(expected.key, actual.key)
Assert.assertEquals(expected.value, actual.value)
Assert.assertEquals(expected.payload, actual.payload)
Assert.assertEquals(expected.expKey, actual.expKey)
if (expected.metadata?.get("evaluationId") != null) {
Assert.assertNotNull(actual.metadata?.get("evaluationId"))
}
}

class ExperimentClientTest {
init {
Logger.implementation = SystemLogger(true)
Expand All @@ -37,7 +54,7 @@ class ExperimentClientTest {
private var mockStorage = MockStorage()
private val testUser = ExperimentUser(userId = "test_user")

private val serverVariant = Variant(key = "on", value = "on", payload = "payload")
private val serverVariant = Variant(key = "on", value = "on", payload = "payload", metadata = mapOf("evaluationId" to ""))
private val fallbackVariant = Variant(key = "fallback", value = "fallback")
private val initialVariant = Variant(key = "initial", value = "initial")
private val inlineVariant = Variant(key = "inline", value = "inline")
Expand Down Expand Up @@ -109,7 +126,7 @@ class ExperimentClientTest {
client.fetch(testUser).get()
val variant = client.variant(KEY)
Assert.assertNotNull(variant)
Assert.assertEquals(serverVariant, variant)
assertVariantEquals(serverVariant, variant)
}

@Test
Expand Down Expand Up @@ -137,7 +154,7 @@ class ExperimentClientTest {
Thread.sleep(1000)
val variant = timeoutClient.variant(KEY)
Assert.assertNotNull(variant)
Assert.assertEquals(serverVariant, variant)
assertVariantEquals(serverVariant, variant)
return
}
Assert.fail("expected timeout exception")
Expand All @@ -150,30 +167,30 @@ class ExperimentClientTest {
Assert.assertEquals(firstFallback, variant)

variant = client.variant("asdf")
Assert.assertEquals(fallbackVariant, variant)
assertVariantEquals(fallbackVariant, variant)

variant = client.variant(INITIAL_KEY, firstFallback)
Assert.assertEquals(firstFallback, variant)

variant = client.variant(INITIAL_KEY)
Assert.assertEquals(initialVariant, variant)
assertVariantEquals(initialVariant, variant)

client.fetch(testUser).get()

variant = client.variant("asdf", firstFallback)
Assert.assertEquals(firstFallback, variant)

variant = client.variant("asdf")
Assert.assertEquals(fallbackVariant, variant)
assertVariantEquals(fallbackVariant, variant)

variant = client.variant(INITIAL_KEY, firstFallback)
Assert.assertEquals(firstFallback, variant)

variant = client.variant(INITIAL_KEY)
Assert.assertEquals(initialVariant, variant)
assertVariantEquals(initialVariant, variant)

variant = client.variant(KEY, firstFallback)
Assert.assertEquals(serverVariant, variant)
assertVariantEquals(serverVariant, variant)
}

@Test
Expand All @@ -186,7 +203,7 @@ class ExperimentClientTest {
fun `clear the flag config in storage`() {
generalClient.fetch(testUser).get()
val variant = generalClient.variant("sdk-ci-test")
Assert.assertEquals(Variant(key = "on", value = "on", payload = "payload"), variant)
assertVariantEquals(Variant(key = "on", value = "on", payload = "payload"), variant)
generalClient.clear()
val clearedVariants = generalClient.all()
Assert.assertEquals(0, clearedVariants.entries.size)
Expand Down Expand Up @@ -217,7 +234,7 @@ class ExperimentClientTest {
client.fetch(testUser, FetchOptions(flagKeys = listOf(KEY))).get()
val variant = client.variant(KEY)
Assert.assertNotNull(variant)
Assert.assertEquals(serverVariant, variant)
assertVariantEquals(serverVariant, variant)
}

@Test
Expand All @@ -226,14 +243,14 @@ class ExperimentClientTest {
client.fetch(testUser, FetchOptions(flagKeys = listOf(KEY, INITIAL_KEY, invalidKey))).get()
val variant = client.variant(KEY)
Assert.assertNotNull(variant)
Assert.assertEquals(serverVariant, variant)
assertVariantEquals(serverVariant, variant)

val firstFallback = Variant("first")
val initialVariant = client.variant(INITIAL_KEY, firstFallback)
Assert.assertEquals(firstFallback, initialVariant)

val invalidVariant = client.variant(invalidKey)
Assert.assertEquals(fallbackVariant, invalidVariant)
assertVariantEquals(fallbackVariant, invalidVariant)
}

@Test
Expand All @@ -254,13 +271,13 @@ class ExperimentClientTest {
)

Assert.assertEquals(KEY, event.key)
Assert.assertEquals(serverVariant, event.variant)
assertVariantEquals(serverVariant, event.variant)
didExposureGetTracked = true
}

override fun setUserProperty(event: ExperimentAnalyticsEvent) {
Assert.assertEquals("[Experiment] $KEY", event.userProperty)
Assert.assertEquals(serverVariant, event.variant)
assertVariantEquals(serverVariant, event.variant)
didUserPropertyGetSet = true
}

Expand Down Expand Up @@ -634,7 +651,7 @@ class ExperimentClientTest {
)
client.start(user).get()
val variant = client.variant("sdk-ci-test", inlineVariant)
Assert.assertEquals(inlineVariant, variant)
assertVariantEquals(inlineVariant, variant)
verify(exactly = 1) {
exposureTrackingProvider.track(
match {
Expand Down Expand Up @@ -665,7 +682,7 @@ class ExperimentClientTest {
)
client.start(user).get()
val variant = client.variant("sdk-ci-test")
Assert.assertEquals(initialVariant, variant)
assertVariantEquals(initialVariant, variant)
verify(exactly = 1) {
exposureTrackingProvider.track(
match {
Expand Down Expand Up @@ -759,7 +776,7 @@ class ExperimentClientTest {
)
client.start(user).get()
val variant = client.variant("sdk-ci-test")
Assert.assertEquals(initialVariant, variant)
assertVariantEquals(initialVariant, variant)
verify(exactly = 1) {
exposureTrackingProvider.track(
match {
Expand Down Expand Up @@ -823,7 +840,7 @@ class ExperimentClientTest {
)
client.start(user).get()
val variant = client.variant("sdk-ci-test", inlineVariant)
Assert.assertEquals(inlineVariant, variant)
assertVariantEquals(inlineVariant, variant)
verify(exactly = 1) {
exposureTrackingProvider.track(
match {
Expand Down Expand Up @@ -854,7 +871,7 @@ class ExperimentClientTest {
)
client.start(user).get()
val variant = client.variant("sdk-ci-test")
Assert.assertEquals(fallbackVariant, variant)
assertVariantEquals(fallbackVariant, variant)
verify(exactly = 1) {
exposureTrackingProvider.track(
match {
Expand Down Expand Up @@ -884,7 +901,7 @@ class ExperimentClientTest {
)
client.start(user).get()
val variant = client.variant("sdk-ci-test")
Assert.assertEquals(Variant(key = "off", metadata = mapOf("default" to true)), variant)
assertVariantEquals(Variant(key = "off", metadata = mapOf("default" to true)), variant)
verify(exactly = 1) {
exposureTrackingProvider.track(
match {
Expand Down Expand Up @@ -948,7 +965,7 @@ class ExperimentClientTest {
)
client.start(user).get()
val variant = client.variant("sdk-ci-test-local", inlineVariant)
Assert.assertEquals(inlineVariant, variant)
assertVariantEquals(inlineVariant, variant)
verify(exactly = 1) {
exposureTrackingProvider.track(
match {
Expand Down Expand Up @@ -979,7 +996,7 @@ class ExperimentClientTest {
)
client.start(user).get()
val variant = client.variant("sdk-ci-test-local")
Assert.assertEquals(initialVariant, variant)
assertVariantEquals(initialVariant, variant)
verify(exactly = 1) {
exposureTrackingProvider.track(
match {
Expand Down Expand Up @@ -1010,7 +1027,7 @@ class ExperimentClientTest {
)
client.start(user).get()
val variant = client.variant("sdk-ci-test-local")
Assert.assertEquals(fallbackVariant, variant)
assertVariantEquals(fallbackVariant, variant)
verify(exactly = 1) {
exposureTrackingProvider.track(
match {
Expand Down