From 421782a2b5c62b15a8b29e38e1ad29bac035b4a8 Mon Sep 17 00:00:00 2001 From: Nicklas Lundin Date: Mon, 2 Oct 2023 15:55:07 +0200 Subject: [PATCH] chore: rename package structure and artifact id (#72) --- .../com/example/confidencedemoapp/MainVm.kt | 4 +- Provider/build.gradle.kts | 8 +- .../confidence}/ConfidenceFeatureProvider.kt | 29 ++- .../spotify/confidence}/EventProcessor.kt | 2 +- .../spotify/confidence}/apply/FlagApplier.kt | 2 +- .../apply/FlagApplierWithRetries.kt | 12 +- .../spotify/confidence}/cache/DiskStorage.kt | 4 +- .../confidence}/cache/InMemoryCache.kt | 6 +- .../confidence}/cache/ProviderCache.kt | 4 +- .../confidence}/cache/StorageFileCache.kt | 4 +- .../spotify/confidence}/client/Clock.kt | 2 +- .../spotify/confidence}/client/CommonTypes.kt | 2 +- .../confidence}/client/ConfidenceClient.kt | 2 +- .../client/ConfidenceRemoteClient.kt | 14 +- .../spotify/confidence}/client/Extensions.kt | 2 +- .../spotify/confidence}/client/Types.kt | 2 +- .../client/network/ApplyFlagsInteractor.kt | 10 +- .../client/network/ResolveFlagsInteractor.kt | 10 +- .../client/serializers/Serializers.kt | 10 +- .../ConfidenceFeatureProviderTests.kt | 217 ++++++++++++++---- .../confidence}/ConfidenceIntegrationTests.kt | 10 +- .../ConfidenceRemoteClientTests.kt | 18 +- .../confidence}/StorageFileCacheTests.kt | 22 +- 23 files changed, 261 insertions(+), 135 deletions(-) rename Provider/src/main/java/{dev/openfeature/contrib/providers => com/spotify/confidence}/ConfidenceFeatureProvider.kt (92%) rename Provider/src/main/java/{dev/openfeature/contrib/providers => com/spotify/confidence}/EventProcessor.kt (98%) rename Provider/src/main/java/{dev/openfeature/contrib/providers => com/spotify/confidence}/apply/FlagApplier.kt (62%) rename Provider/src/main/java/{dev/openfeature/contrib/providers => com/spotify/confidence}/apply/FlagApplierWithRetries.kt (95%) rename Provider/src/main/java/{dev/openfeature/contrib/providers => com/spotify/confidence}/cache/DiskStorage.kt (70%) rename Provider/src/main/java/{dev/openfeature/contrib/providers => com/spotify/confidence}/cache/InMemoryCache.kt (79%) rename Provider/src/main/java/{dev/openfeature/contrib/providers => com/spotify/confidence}/cache/ProviderCache.kt (88%) rename Provider/src/main/java/{dev/openfeature/contrib/providers => com/spotify/confidence}/cache/StorageFileCache.kt (94%) rename Provider/src/main/java/{dev/openfeature/contrib/providers => com/spotify/confidence}/client/Clock.kt (89%) rename Provider/src/main/java/{dev/openfeature/contrib/providers => com/spotify/confidence}/client/CommonTypes.kt (93%) rename Provider/src/main/java/{dev/openfeature/contrib/providers => com/spotify/confidence}/client/ConfidenceClient.kt (86%) rename Provider/src/main/java/{dev/openfeature/contrib/providers => com/spotify/confidence}/client/ConfidenceRemoteClient.kt (89%) rename Provider/src/main/java/{dev/openfeature/contrib/providers => com/spotify/confidence}/client/Extensions.kt (96%) rename Provider/src/main/java/{dev/openfeature/contrib/providers => com/spotify/confidence}/client/Types.kt (95%) rename Provider/src/main/java/{dev/openfeature/contrib/providers => com/spotify/confidence}/client/network/ApplyFlagsInteractor.kt (84%) rename Provider/src/main/java/{dev/openfeature/contrib/providers => com/spotify/confidence}/client/network/ResolveFlagsInteractor.kt (82%) rename Provider/src/main/java/{dev/openfeature/contrib/providers => com/spotify/confidence}/client/serializers/Serializers.kt (97%) rename Provider/src/test/java/{dev/openfeature/contrib/providers => com/spotify/confidence}/ConfidenceFeatureProviderTests.kt (88%) rename Provider/src/test/java/{dev/openfeature/contrib/providers => com/spotify/confidence}/ConfidenceIntegrationTests.kt (95%) rename Provider/src/test/java/{dev/openfeature/contrib/providers => com/spotify/confidence}/ConfidenceRemoteClientTests.kt (97%) rename Provider/src/test/java/{dev/openfeature/contrib/providers => com/spotify/confidence}/StorageFileCacheTests.kt (90%) diff --git a/ConfidenceDemoApp/src/main/java/com/example/confidencedemoapp/MainVm.kt b/ConfidenceDemoApp/src/main/java/com/example/confidencedemoapp/MainVm.kt index 88f2b993..9f556d8a 100644 --- a/ConfidenceDemoApp/src/main/java/com/example/confidencedemoapp/MainVm.kt +++ b/ConfidenceDemoApp/src/main/java/com/example/confidencedemoapp/MainVm.kt @@ -7,8 +7,8 @@ import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.viewModelScope -import dev.openfeature.contrib.providers.ConfidenceFeatureProvider -import dev.openfeature.contrib.providers.InitialisationStrategy +import com.spotify.confidence.ConfidenceFeatureProvider +import com.spotify.confidence.InitialisationStrategy import dev.openfeature.sdk.Client import dev.openfeature.sdk.EvaluationContext import dev.openfeature.sdk.FlagEvaluationDetails diff --git a/Provider/build.gradle.kts b/Provider/build.gradle.kts index 476586c0..32fc7d62 100644 --- a/Provider/build.gradle.kts +++ b/Provider/build.gradle.kts @@ -19,12 +19,12 @@ object Versions { } android { - namespace = "dev.openfeature.contrib.providers" + namespace = "com.spotify.confidence" compileSdk = 33 defaultConfig { minSdk = 21 - version = "0.0.1" + version = Versions.providerVersion testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } @@ -64,8 +64,8 @@ afterEvaluate { publishing { publications { register("release") { - groupId = "dev.openfeature.contrib.providers" - artifactId = "confidence" + groupId = "com.spotify" + artifactId = "confidence-openfeature-provider-kotlin" version = Versions.providerVersion from(components["release"]) diff --git a/Provider/src/main/java/dev/openfeature/contrib/providers/ConfidenceFeatureProvider.kt b/Provider/src/main/java/com/spotify/confidence/ConfidenceFeatureProvider.kt similarity index 92% rename from Provider/src/main/java/dev/openfeature/contrib/providers/ConfidenceFeatureProvider.kt rename to Provider/src/main/java/com/spotify/confidence/ConfidenceFeatureProvider.kt index 78cdf8d4..4e5e7b68 100644 --- a/Provider/src/main/java/dev/openfeature/contrib/providers/ConfidenceFeatureProvider.kt +++ b/Provider/src/main/java/com/spotify/confidence/ConfidenceFeatureProvider.kt @@ -1,18 +1,17 @@ -package dev.openfeature.contrib.providers +package com.spotify.confidence import android.content.Context -import dev.openfeature.contrib.providers.apply.FlagApplier -import dev.openfeature.contrib.providers.apply.FlagApplierWithRetries -import dev.openfeature.contrib.providers.cache.DiskStorage -import dev.openfeature.contrib.providers.cache.InMemoryCache -import dev.openfeature.contrib.providers.cache.ProviderCache -import dev.openfeature.contrib.providers.cache.ProviderCache.CacheResolveResult -import dev.openfeature.contrib.providers.cache.StorageFileCache -import dev.openfeature.contrib.providers.client.ConfidenceClient -import dev.openfeature.contrib.providers.client.ConfidenceRegion -import dev.openfeature.contrib.providers.client.ConfidenceRemoteClient -import dev.openfeature.contrib.providers.client.ResolveReason -import dev.openfeature.contrib.providers.client.ResolveResponse +import com.spotify.confidence.apply.FlagApplier +import com.spotify.confidence.apply.FlagApplierWithRetries +import com.spotify.confidence.cache.DiskStorage +import com.spotify.confidence.cache.InMemoryCache +import com.spotify.confidence.cache.ProviderCache +import com.spotify.confidence.cache.ProviderCache.CacheResolveResult +import com.spotify.confidence.cache.StorageFileCache +import com.spotify.confidence.client.ConfidenceClient +import com.spotify.confidence.client.ConfidenceRegion +import com.spotify.confidence.client.ConfidenceRemoteClient +import com.spotify.confidence.client.ResolveResponse import dev.openfeature.sdk.EvaluationContext import dev.openfeature.sdk.FeatureProvider import dev.openfeature.sdk.Hook @@ -286,7 +285,7 @@ class ConfidenceFeatureProvider private constructor( parsedKey: FlagKey, defaultValue: T ): ProviderEvaluation = when (resolveReason) { - ResolveReason.RESOLVE_REASON_MATCH -> { + com.spotify.confidence.client.ResolveReason.RESOLVE_REASON_MATCH -> { val resolvedValue: Value = findValueFromValuePath(value, parsedKey.valuePath) ?: throw ParseError( "Unable to parse flag value: ${parsedKey.valuePath.joinToString(separator = "/")}" @@ -299,7 +298,7 @@ class ConfidenceFeatureProvider private constructor( reason = Reason.TARGETING_MATCH.toString() ) } - ResolveReason.RESOLVE_REASON_TARGETING_KEY_ERROR -> { + com.spotify.confidence.client.ResolveReason.RESOLVE_REASON_TARGETING_KEY_ERROR -> { ProviderEvaluation( value = defaultValue, reason = Reason.ERROR.toString(), diff --git a/Provider/src/main/java/dev/openfeature/contrib/providers/EventProcessor.kt b/Provider/src/main/java/com/spotify/confidence/EventProcessor.kt similarity index 98% rename from Provider/src/main/java/dev/openfeature/contrib/providers/EventProcessor.kt rename to Provider/src/main/java/com/spotify/confidence/EventProcessor.kt index cac362a2..84ca3e28 100644 --- a/Provider/src/main/java/dev/openfeature/contrib/providers/EventProcessor.kt +++ b/Provider/src/main/java/com/spotify/confidence/EventProcessor.kt @@ -1,4 +1,4 @@ -package dev.openfeature.contrib.providers +package com.spotify.confidence import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineExceptionHandler diff --git a/Provider/src/main/java/dev/openfeature/contrib/providers/apply/FlagApplier.kt b/Provider/src/main/java/com/spotify/confidence/apply/FlagApplier.kt similarity index 62% rename from Provider/src/main/java/dev/openfeature/contrib/providers/apply/FlagApplier.kt rename to Provider/src/main/java/com/spotify/confidence/apply/FlagApplier.kt index 8cbbacf4..d50ee7a8 100644 --- a/Provider/src/main/java/dev/openfeature/contrib/providers/apply/FlagApplier.kt +++ b/Provider/src/main/java/com/spotify/confidence/apply/FlagApplier.kt @@ -1,4 +1,4 @@ -package dev.openfeature.contrib.providers.apply +package com.spotify.confidence.apply interface FlagApplier { fun apply(flagName: String, resolveToken: String) diff --git a/Provider/src/main/java/dev/openfeature/contrib/providers/apply/FlagApplierWithRetries.kt b/Provider/src/main/java/com/spotify/confidence/apply/FlagApplierWithRetries.kt similarity index 95% rename from Provider/src/main/java/dev/openfeature/contrib/providers/apply/FlagApplierWithRetries.kt rename to Provider/src/main/java/com/spotify/confidence/apply/FlagApplierWithRetries.kt index 699f8544..d1a1aecc 100644 --- a/Provider/src/main/java/dev/openfeature/contrib/providers/apply/FlagApplierWithRetries.kt +++ b/Provider/src/main/java/com/spotify/confidence/apply/FlagApplierWithRetries.kt @@ -1,11 +1,11 @@ -package dev.openfeature.contrib.providers.apply +package com.spotify.confidence.apply import android.content.Context -import dev.openfeature.contrib.providers.EventProcessor -import dev.openfeature.contrib.providers.client.AppliedFlag -import dev.openfeature.contrib.providers.client.ConfidenceClient -import dev.openfeature.contrib.providers.client.Result -import dev.openfeature.contrib.providers.client.serializers.UUIDSerializer +import com.spotify.confidence.EventProcessor +import com.spotify.confidence.client.AppliedFlag +import com.spotify.confidence.client.ConfidenceClient +import com.spotify.confidence.client.Result +import com.spotify.confidence.client.serializers.UUIDSerializer import dev.openfeature.sdk.DateSerializer import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineExceptionHandler diff --git a/Provider/src/main/java/dev/openfeature/contrib/providers/cache/DiskStorage.kt b/Provider/src/main/java/com/spotify/confidence/cache/DiskStorage.kt similarity index 70% rename from Provider/src/main/java/dev/openfeature/contrib/providers/cache/DiskStorage.kt rename to Provider/src/main/java/com/spotify/confidence/cache/DiskStorage.kt index 8cb2fc8d..3efa30e7 100644 --- a/Provider/src/main/java/dev/openfeature/contrib/providers/cache/DiskStorage.kt +++ b/Provider/src/main/java/com/spotify/confidence/cache/DiskStorage.kt @@ -1,6 +1,6 @@ -package dev.openfeature.contrib.providers.cache +package com.spotify.confidence.cache -import dev.openfeature.contrib.providers.client.ResolvedFlag +import com.spotify.confidence.client.ResolvedFlag import dev.openfeature.sdk.EvaluationContext interface DiskStorage { diff --git a/Provider/src/main/java/dev/openfeature/contrib/providers/cache/InMemoryCache.kt b/Provider/src/main/java/com/spotify/confidence/cache/InMemoryCache.kt similarity index 79% rename from Provider/src/main/java/dev/openfeature/contrib/providers/cache/InMemoryCache.kt rename to Provider/src/main/java/com/spotify/confidence/cache/InMemoryCache.kt index 14eb025c..5b531eed 100644 --- a/Provider/src/main/java/dev/openfeature/contrib/providers/cache/InMemoryCache.kt +++ b/Provider/src/main/java/com/spotify/confidence/cache/InMemoryCache.kt @@ -1,7 +1,7 @@ -package dev.openfeature.contrib.providers.cache +package com.spotify.confidence.cache -import dev.openfeature.contrib.providers.cache.ProviderCache.CacheResolveEntry -import dev.openfeature.contrib.providers.cache.ProviderCache.CacheResolveResult +import com.spotify.confidence.cache.ProviderCache.CacheResolveEntry +import com.spotify.confidence.cache.ProviderCache.CacheResolveResult import dev.openfeature.sdk.EvaluationContext open class InMemoryCache : ProviderCache { diff --git a/Provider/src/main/java/dev/openfeature/contrib/providers/cache/ProviderCache.kt b/Provider/src/main/java/com/spotify/confidence/cache/ProviderCache.kt similarity index 88% rename from Provider/src/main/java/dev/openfeature/contrib/providers/cache/ProviderCache.kt rename to Provider/src/main/java/com/spotify/confidence/cache/ProviderCache.kt index 50d08405..4ae6cad3 100644 --- a/Provider/src/main/java/dev/openfeature/contrib/providers/cache/ProviderCache.kt +++ b/Provider/src/main/java/com/spotify/confidence/cache/ProviderCache.kt @@ -1,6 +1,6 @@ -package dev.openfeature.contrib.providers.cache +package com.spotify.confidence.cache -import dev.openfeature.contrib.providers.client.ResolveReason +import com.spotify.confidence.client.ResolveReason import dev.openfeature.sdk.EvaluationContext import dev.openfeature.sdk.Value import kotlinx.serialization.Serializable diff --git a/Provider/src/main/java/dev/openfeature/contrib/providers/cache/StorageFileCache.kt b/Provider/src/main/java/com/spotify/confidence/cache/StorageFileCache.kt similarity index 94% rename from Provider/src/main/java/dev/openfeature/contrib/providers/cache/StorageFileCache.kt rename to Provider/src/main/java/com/spotify/confidence/cache/StorageFileCache.kt index 18ceb9b2..3408e6d8 100644 --- a/Provider/src/main/java/dev/openfeature/contrib/providers/cache/StorageFileCache.kt +++ b/Provider/src/main/java/com/spotify/confidence/cache/StorageFileCache.kt @@ -1,7 +1,7 @@ -package dev.openfeature.contrib.providers.cache +package com.spotify.confidence.cache import android.content.Context -import dev.openfeature.contrib.providers.client.ResolvedFlag +import com.spotify.confidence.client.ResolvedFlag import dev.openfeature.sdk.EvaluationContext import dev.openfeature.sdk.Value import kotlinx.serialization.Serializable diff --git a/Provider/src/main/java/dev/openfeature/contrib/providers/client/Clock.kt b/Provider/src/main/java/com/spotify/confidence/client/Clock.kt similarity index 89% rename from Provider/src/main/java/dev/openfeature/contrib/providers/client/Clock.kt rename to Provider/src/main/java/com/spotify/confidence/client/Clock.kt index 70c0107c..115e97f9 100644 --- a/Provider/src/main/java/dev/openfeature/contrib/providers/client/Clock.kt +++ b/Provider/src/main/java/com/spotify/confidence/client/Clock.kt @@ -1,4 +1,4 @@ -package dev.openfeature.contrib.providers.client +package com.spotify.confidence.client import java.util.Calendar import java.util.Date diff --git a/Provider/src/main/java/dev/openfeature/contrib/providers/client/CommonTypes.kt b/Provider/src/main/java/com/spotify/confidence/client/CommonTypes.kt similarity index 93% rename from Provider/src/main/java/dev/openfeature/contrib/providers/client/CommonTypes.kt rename to Provider/src/main/java/com/spotify/confidence/client/CommonTypes.kt index b18fd2c9..f95e5bb1 100644 --- a/Provider/src/main/java/dev/openfeature/contrib/providers/client/CommonTypes.kt +++ b/Provider/src/main/java/com/spotify/confidence/client/CommonTypes.kt @@ -1,4 +1,4 @@ -package dev.openfeature.contrib.providers.client +package com.spotify.confidence.client enum class ConfidenceRegion { EUROPE, diff --git a/Provider/src/main/java/dev/openfeature/contrib/providers/client/ConfidenceClient.kt b/Provider/src/main/java/com/spotify/confidence/client/ConfidenceClient.kt similarity index 86% rename from Provider/src/main/java/dev/openfeature/contrib/providers/client/ConfidenceClient.kt rename to Provider/src/main/java/com/spotify/confidence/client/ConfidenceClient.kt index 4dfde59d..81bc2563 100644 --- a/Provider/src/main/java/dev/openfeature/contrib/providers/client/ConfidenceClient.kt +++ b/Provider/src/main/java/com/spotify/confidence/client/ConfidenceClient.kt @@ -1,4 +1,4 @@ -package dev.openfeature.contrib.providers.client +package com.spotify.confidence.client import dev.openfeature.sdk.EvaluationContext diff --git a/Provider/src/main/java/dev/openfeature/contrib/providers/client/ConfidenceRemoteClient.kt b/Provider/src/main/java/com/spotify/confidence/client/ConfidenceRemoteClient.kt similarity index 89% rename from Provider/src/main/java/dev/openfeature/contrib/providers/client/ConfidenceRemoteClient.kt rename to Provider/src/main/java/com/spotify/confidence/client/ConfidenceRemoteClient.kt index a8997b23..902b24ee 100644 --- a/Provider/src/main/java/dev/openfeature/contrib/providers/client/ConfidenceRemoteClient.kt +++ b/Provider/src/main/java/com/spotify/confidence/client/ConfidenceRemoteClient.kt @@ -1,11 +1,11 @@ -package dev.openfeature.contrib.providers.client +package com.spotify.confidence.client -import dev.openfeature.contrib.providers.client.network.ApplyFlagsInteractor -import dev.openfeature.contrib.providers.client.network.ApplyFlagsInteractorImpl -import dev.openfeature.contrib.providers.client.network.ApplyFlagsRequest -import dev.openfeature.contrib.providers.client.network.ResolveFlagsInteractor -import dev.openfeature.contrib.providers.client.network.ResolveFlagsInteractorImpl -import dev.openfeature.contrib.providers.client.serializers.FlagsSerializer +import com.spotify.confidence.client.network.ApplyFlagsInteractor +import com.spotify.confidence.client.network.ApplyFlagsInteractorImpl +import com.spotify.confidence.client.network.ApplyFlagsRequest +import com.spotify.confidence.client.network.ResolveFlagsInteractor +import com.spotify.confidence.client.network.ResolveFlagsInteractorImpl +import com.spotify.confidence.client.serializers.FlagsSerializer import dev.openfeature.sdk.EvaluationContext import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.Dispatchers diff --git a/Provider/src/main/java/dev/openfeature/contrib/providers/client/Extensions.kt b/Provider/src/main/java/com/spotify/confidence/client/Extensions.kt similarity index 96% rename from Provider/src/main/java/dev/openfeature/contrib/providers/client/Extensions.kt rename to Provider/src/main/java/com/spotify/confidence/client/Extensions.kt index 21b72742..deffb916 100644 --- a/Provider/src/main/java/dev/openfeature/contrib/providers/client/Extensions.kt +++ b/Provider/src/main/java/com/spotify/confidence/client/Extensions.kt @@ -1,4 +1,4 @@ -package dev.openfeature.contrib.providers.client +package com.spotify.confidence.client import dev.openfeature.sdk.EvaluationContext import dev.openfeature.sdk.ImmutableStructure diff --git a/Provider/src/main/java/dev/openfeature/contrib/providers/client/Types.kt b/Provider/src/main/java/com/spotify/confidence/client/Types.kt similarity index 95% rename from Provider/src/main/java/dev/openfeature/contrib/providers/client/Types.kt rename to Provider/src/main/java/com/spotify/confidence/client/Types.kt index bf7aa658..dc2dffb9 100644 --- a/Provider/src/main/java/dev/openfeature/contrib/providers/client/Types.kt +++ b/Provider/src/main/java/com/spotify/confidence/client/Types.kt @@ -1,4 +1,4 @@ -package dev.openfeature.contrib.providers.client +package com.spotify.confidence.client import dev.openfeature.sdk.ImmutableStructure import dev.openfeature.sdk.Structure diff --git a/Provider/src/main/java/dev/openfeature/contrib/providers/client/network/ApplyFlagsInteractor.kt b/Provider/src/main/java/com/spotify/confidence/client/network/ApplyFlagsInteractor.kt similarity index 84% rename from Provider/src/main/java/dev/openfeature/contrib/providers/client/network/ApplyFlagsInteractor.kt rename to Provider/src/main/java/com/spotify/confidence/client/network/ApplyFlagsInteractor.kt index faf9992c..03dece77 100644 --- a/Provider/src/main/java/dev/openfeature/contrib/providers/client/network/ApplyFlagsInteractor.kt +++ b/Provider/src/main/java/com/spotify/confidence/client/network/ApplyFlagsInteractor.kt @@ -1,9 +1,9 @@ -package dev.openfeature.contrib.providers.client.network +package com.spotify.confidence.client.network -import dev.openfeature.contrib.providers.client.AppliedFlag -import dev.openfeature.contrib.providers.client.await -import dev.openfeature.contrib.providers.client.serializers.StructureSerializer -import dev.openfeature.contrib.providers.client.serializers.UUIDSerializer +import com.spotify.confidence.client.AppliedFlag +import com.spotify.confidence.client.await +import com.spotify.confidence.client.serializers.StructureSerializer +import com.spotify.confidence.client.serializers.UUIDSerializer import dev.openfeature.sdk.DateSerializer import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.withContext diff --git a/Provider/src/main/java/dev/openfeature/contrib/providers/client/network/ResolveFlagsInteractor.kt b/Provider/src/main/java/com/spotify/confidence/client/network/ResolveFlagsInteractor.kt similarity index 82% rename from Provider/src/main/java/dev/openfeature/contrib/providers/client/network/ResolveFlagsInteractor.kt rename to Provider/src/main/java/com/spotify/confidence/client/network/ResolveFlagsInteractor.kt index 14ddc1c7..c51aa287 100644 --- a/Provider/src/main/java/dev/openfeature/contrib/providers/client/network/ResolveFlagsInteractor.kt +++ b/Provider/src/main/java/com/spotify/confidence/client/network/ResolveFlagsInteractor.kt @@ -1,9 +1,9 @@ -package dev.openfeature.contrib.providers.client.network +package com.spotify.confidence.client.network -import dev.openfeature.contrib.providers.client.ResolveFlagsRequest -import dev.openfeature.contrib.providers.client.await -import dev.openfeature.contrib.providers.client.serializers.StructureSerializer -import dev.openfeature.contrib.providers.client.serializers.UUIDSerializer +import com.spotify.confidence.client.ResolveFlagsRequest +import com.spotify.confidence.client.await +import com.spotify.confidence.client.serializers.StructureSerializer +import com.spotify.confidence.client.serializers.UUIDSerializer import dev.openfeature.sdk.DateSerializer import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.withContext diff --git a/Provider/src/main/java/dev/openfeature/contrib/providers/client/serializers/Serializers.kt b/Provider/src/main/java/com/spotify/confidence/client/serializers/Serializers.kt similarity index 97% rename from Provider/src/main/java/dev/openfeature/contrib/providers/client/serializers/Serializers.kt rename to Provider/src/main/java/com/spotify/confidence/client/serializers/Serializers.kt index dbce1462..4f96d457 100644 --- a/Provider/src/main/java/dev/openfeature/contrib/providers/client/serializers/Serializers.kt +++ b/Provider/src/main/java/com/spotify/confidence/client/serializers/Serializers.kt @@ -1,9 +1,9 @@ -package dev.openfeature.contrib.providers.client.serializers +package com.spotify.confidence.client.serializers -import dev.openfeature.contrib.providers.client.Flags -import dev.openfeature.contrib.providers.client.ResolveReason -import dev.openfeature.contrib.providers.client.ResolvedFlag -import dev.openfeature.contrib.providers.client.SchemaType +import com.spotify.confidence.client.Flags +import com.spotify.confidence.client.ResolveReason +import com.spotify.confidence.client.ResolvedFlag +import com.spotify.confidence.client.SchemaType import dev.openfeature.sdk.DateSerializer import dev.openfeature.sdk.ImmutableStructure import dev.openfeature.sdk.Structure diff --git a/Provider/src/test/java/dev/openfeature/contrib/providers/ConfidenceFeatureProviderTests.kt b/Provider/src/test/java/com/spotify/confidence/ConfidenceFeatureProviderTests.kt similarity index 88% rename from Provider/src/test/java/dev/openfeature/contrib/providers/ConfidenceFeatureProviderTests.kt rename to Provider/src/test/java/com/spotify/confidence/ConfidenceFeatureProviderTests.kt index d14ee2c7..9d1f7b43 100644 --- a/Provider/src/test/java/dev/openfeature/contrib/providers/ConfidenceFeatureProviderTests.kt +++ b/Provider/src/test/java/com/spotify/confidence/ConfidenceFeatureProviderTests.kt @@ -7,23 +7,23 @@ ExperimentalCoroutinesApi::class ) -package dev.openfeature.contrib.providers +package com.spotify.confidence import android.content.Context -import dev.openfeature.contrib.providers.apply.APPLY_FILE_NAME -import dev.openfeature.contrib.providers.apply.EventStatus -import dev.openfeature.contrib.providers.apply.FlagsAppliedMap -import dev.openfeature.contrib.providers.apply.json -import dev.openfeature.contrib.providers.cache.InMemoryCache -import dev.openfeature.contrib.providers.cache.toCacheData -import dev.openfeature.contrib.providers.client.AppliedFlag -import dev.openfeature.contrib.providers.client.ConfidenceClient -import dev.openfeature.contrib.providers.client.Flags -import dev.openfeature.contrib.providers.client.ResolveFlags -import dev.openfeature.contrib.providers.client.ResolveReason -import dev.openfeature.contrib.providers.client.ResolveResponse -import dev.openfeature.contrib.providers.client.ResolvedFlag -import dev.openfeature.contrib.providers.client.Result +import com.spotify.confidence.apply.APPLY_FILE_NAME +import com.spotify.confidence.apply.EventStatus +import com.spotify.confidence.apply.FlagsAppliedMap +import com.spotify.confidence.apply.json +import com.spotify.confidence.cache.InMemoryCache +import com.spotify.confidence.cache.toCacheData +import com.spotify.confidence.client.AppliedFlag +import com.spotify.confidence.client.ConfidenceClient +import com.spotify.confidence.client.Flags +import com.spotify.confidence.client.ResolveFlags +import com.spotify.confidence.client.ResolveReason +import com.spotify.confidence.client.ResolveResponse +import com.spotify.confidence.client.ResolvedFlag +import com.spotify.confidence.client.Result import dev.openfeature.sdk.ImmutableContext import dev.openfeature.sdk.ImmutableStructure import dev.openfeature.sdk.Reason @@ -128,18 +128,54 @@ internal class ConfidenceFeatureProviderTests { eventsPublisher = EventHandler.eventsPublisher(testDispatcher), dispatcher = testDispatcher ) - whenever(mockClient.resolve(eq(listOf()), any())).thenReturn(ResolveResponse.Resolved(ResolveFlags(resolvedFlags, "token1"))) + whenever(mockClient.resolve(eq(listOf()), any())).thenReturn( + ResolveResponse.Resolved( + ResolveFlags(resolvedFlags, "token1") + ) + ) confidenceFeatureProvider.initialize(ImmutableContext("foo")) advanceUntilIdle() verify(mockClient, times(1)).resolve(any(), eq(ImmutableContext("foo"))) - val evalString = confidenceFeatureProvider.getStringEvaluation("test-kotlin-flag-1.mystring", "default", ImmutableContext("foo")) - val evalBool = confidenceFeatureProvider.getBooleanEvaluation("test-kotlin-flag-1.myboolean", true, ImmutableContext("foo")) - val evalInteger = confidenceFeatureProvider.getIntegerEvaluation("test-kotlin-flag-1.myinteger", 1, ImmutableContext("foo")) - val evalDouble = confidenceFeatureProvider.getDoubleEvaluation("test-kotlin-flag-1.mydouble", 7.28, ImmutableContext("foo")) - val evalDate = confidenceFeatureProvider.getStringEvaluation("test-kotlin-flag-1.mydate", "error", ImmutableContext("foo")) - val evalObject = confidenceFeatureProvider.getObjectEvaluation("test-kotlin-flag-1.mystruct", Value.Structure(mapOf()), ImmutableContext("foo")) - val evalNested = confidenceFeatureProvider.getStringEvaluation("test-kotlin-flag-1.mystruct.innerString", "error", ImmutableContext("foo")) - val evalNull = confidenceFeatureProvider.getStringEvaluation("test-kotlin-flag-1.mynull", "error", ImmutableContext("foo")) + val evalString = confidenceFeatureProvider.getStringEvaluation( + "test-kotlin-flag-1.mystring", + "default", + ImmutableContext("foo") + ) + val evalBool = confidenceFeatureProvider.getBooleanEvaluation( + "test-kotlin-flag-1.myboolean", + true, + ImmutableContext("foo") + ) + val evalInteger = confidenceFeatureProvider.getIntegerEvaluation( + "test-kotlin-flag-1.myinteger", + 1, + ImmutableContext("foo") + ) + val evalDouble = confidenceFeatureProvider.getDoubleEvaluation( + "test-kotlin-flag-1.mydouble", + 7.28, + ImmutableContext("foo") + ) + val evalDate = confidenceFeatureProvider.getStringEvaluation( + "test-kotlin-flag-1.mydate", + "error", + ImmutableContext("foo") + ) + val evalObject = confidenceFeatureProvider.getObjectEvaluation( + "test-kotlin-flag-1.mystruct", + Value.Structure(mapOf()), + ImmutableContext("foo") + ) + val evalNested = confidenceFeatureProvider.getStringEvaluation( + "test-kotlin-flag-1.mystruct.innerString", + "error", + ImmutableContext("foo") + ) + val evalNull = confidenceFeatureProvider.getStringEvaluation( + "test-kotlin-flag-1.mynull", + "error", + ImmutableContext("foo") + ) advanceUntilIdle() verify(mockClient, times(1)).apply(any(), eq("token1")) @@ -149,7 +185,10 @@ internal class ConfidenceFeatureProviderTests { assertEquals(7, evalInteger.value) assertEquals(3.14, evalDouble.value) assertEquals("2023-03-01T14:01:46.645Z", evalDate.value) - assertEquals(Value.Structure(mapOf("innerString" to Value.String("innerValue"))), evalObject.value) + assertEquals( + Value.Structure(mapOf("innerString" to Value.String("innerValue"))), + evalObject.value + ) assertEquals("innerValue", evalNested.value) assertEquals("error", evalNull.value) @@ -203,7 +242,11 @@ internal class ConfidenceFeatureProviderTests { ) val cacheFile = File(mockContext.filesDir, APPLY_FILE_NAME) - whenever(mockClient.resolve(eq(listOf()), any())).thenReturn(ResolveResponse.Resolved(ResolveFlags(resolvedFlags, "token1"))) + whenever(mockClient.resolve(eq(listOf()), any())).thenReturn( + ResolveResponse.Resolved( + ResolveFlags(resolvedFlags, "token1") + ) + ) whenever(mockClient.apply(any(), any())).thenReturn(Result.Failure) val evaluationContext = ImmutableContext("foo") @@ -261,7 +304,11 @@ internal class ConfidenceFeatureProviderTests { whenever(mockClient.apply(any(), any())).thenReturn(Result.Success) // Evaluate a flag property in order to trigger an apply - confidenceFeatureProvider.getStringEvaluation("test-kotlin-flag-1.mystring", "empty", evaluationContext) + confidenceFeatureProvider.getStringEvaluation( + "test-kotlin-flag-1.mystring", + "empty", + evaluationContext + ) advanceUntilIdle() val captor = argumentCaptor>() @@ -275,7 +322,10 @@ internal class ConfidenceFeatureProviderTests { assertEquals(7, evalInteger.value) assertEquals(3.14, evalDouble.value) assertEquals("2023-03-01T14:01:46.645Z", evalDate.value) - assertEquals(Value.Structure(mapOf("innerString" to Value.String("innerValue"))), evalObject.value) + assertEquals( + Value.Structure(mapOf("innerString" to Value.String("innerValue"))), + evalObject.value + ) assertEquals("innerValue", evalNested.value) assertEquals("error", evalNull.value) @@ -337,7 +387,8 @@ internal class ConfidenceFeatureProviderTests { ) ) - val newExpectedValue = resolvedFlags.list[0].copy(value = ImmutableStructure(blueStringValues)) + val newExpectedValue = + resolvedFlags.list[0].copy(value = ImmutableStructure(blueStringValues)) whenever(mockClient.resolve(eq(listOf()), eq(evaluationContext2))).thenReturn( ResolveResponse.Resolved( ResolveFlags(Flags(listOf(newExpectedValue)), "token1") @@ -477,7 +528,11 @@ internal class ConfidenceFeatureProviderTests { verify(mockClient, times(1)).resolve(any(), eq(evaluationContext)) - confidenceFeatureProvider.getStringEvaluation("test-kotlin-flag-1.mystring", "empty", evaluationContext) + confidenceFeatureProvider.getStringEvaluation( + "test-kotlin-flag-1.mystring", + "empty", + evaluationContext + ) advanceUntilIdle() verify(mockClient, times(1)).apply(any(), eq("token1")) } @@ -511,7 +566,11 @@ internal class ConfidenceFeatureProviderTests { verify(mockClient, times(1)).resolve(any(), eq(evaluationContext)) - confidenceFeatureProvider.getStringEvaluation("test-kotlin-flag-1.mystring", "empty", evaluationContext) + confidenceFeatureProvider.getStringEvaluation( + "test-kotlin-flag-1.mystring", + "empty", + evaluationContext + ) advanceUntilIdle() verify(mockClient, times(1)).apply(any(), eq("token1")) } @@ -545,9 +604,17 @@ internal class ConfidenceFeatureProviderTests { verify(mockClient, times(1)).resolve(any(), eq(evaluationContext)) - confidenceFeatureProvider.getStringEvaluation("test-kotlin-flag-1.mystring", "empty", evaluationContext) + confidenceFeatureProvider.getStringEvaluation( + "test-kotlin-flag-1.mystring", + "empty", + evaluationContext + ) advanceUntilIdle() - confidenceFeatureProvider.getStringEvaluation("test-kotlin-flag-1.myboolean", "false", evaluationContext) + confidenceFeatureProvider.getStringEvaluation( + "test-kotlin-flag-1.myboolean", + "false", + evaluationContext + ) advanceUntilIdle() verify(mockClient, times(1)).apply(any(), eq("token1")) } @@ -582,9 +649,17 @@ internal class ConfidenceFeatureProviderTests { verify(mockClient, times(1)).resolve(any(), eq(evaluationContext)) - confidenceFeatureProvider.getStringEvaluation("test-kotlin-flag-1.mystring", "empty", evaluationContext) + confidenceFeatureProvider.getStringEvaluation( + "test-kotlin-flag-1.mystring", + "empty", + evaluationContext + ) advanceUntilIdle() - confidenceFeatureProvider.getStringEvaluation("test-kotlin-flag-1.myboolean", "false", evaluationContext) + confidenceFeatureProvider.getStringEvaluation( + "test-kotlin-flag-1.myboolean", + "false", + evaluationContext + ) advanceUntilIdle() verify(mockClient, times(3)).apply(any(), eq("token1")) } @@ -703,14 +778,46 @@ internal class ConfidenceFeatureProviderTests { // Simulate a case where the context in the cache is not synced with the evaluation's context val cacheData = toCacheData(resolvedFlags.list, "token2", ImmutableContext("user1")) cache.refresh(cacheData) - val evalString = confidenceFeatureProvider.getStringEvaluation("test-kotlin-flag-1.mystring", "default", ImmutableContext("user2")) - val evalBool = confidenceFeatureProvider.getBooleanEvaluation("test-kotlin-flag-1.myboolean", true, ImmutableContext("user2")) - val evalInteger = confidenceFeatureProvider.getIntegerEvaluation("test-kotlin-flag-1.myinteger", 1, ImmutableContext("user2")) - val evalDouble = confidenceFeatureProvider.getDoubleEvaluation("test-kotlin-flag-1.mydouble", 7.28, ImmutableContext("user2")) - val evalDate = confidenceFeatureProvider.getStringEvaluation("test-kotlin-flag-1.mydate", "default1", ImmutableContext("user2")) - val evalObject = confidenceFeatureProvider.getObjectEvaluation("test-kotlin-flag-1.mystruct", Value.Structure(mapOf()), ImmutableContext("user2")) - val evalNested = confidenceFeatureProvider.getStringEvaluation("test-kotlin-flag-1.mystruct.innerString", "default2", ImmutableContext("user2")) - val evalNull = confidenceFeatureProvider.getStringEvaluation("test-kotlin-flag-1.mynull", "default3", ImmutableContext("user2")) + val evalString = confidenceFeatureProvider.getStringEvaluation( + "test-kotlin-flag-1.mystring", + "default", + ImmutableContext("user2") + ) + val evalBool = confidenceFeatureProvider.getBooleanEvaluation( + "test-kotlin-flag-1.myboolean", + true, + ImmutableContext("user2") + ) + val evalInteger = confidenceFeatureProvider.getIntegerEvaluation( + "test-kotlin-flag-1.myinteger", + 1, + ImmutableContext("user2") + ) + val evalDouble = confidenceFeatureProvider.getDoubleEvaluation( + "test-kotlin-flag-1.mydouble", + 7.28, + ImmutableContext("user2") + ) + val evalDate = confidenceFeatureProvider.getStringEvaluation( + "test-kotlin-flag-1.mydate", + "default1", + ImmutableContext("user2") + ) + val evalObject = confidenceFeatureProvider.getObjectEvaluation( + "test-kotlin-flag-1.mystruct", + Value.Structure(mapOf()), + ImmutableContext("user2") + ) + val evalNested = confidenceFeatureProvider.getStringEvaluation( + "test-kotlin-flag-1.mystruct.innerString", + "default2", + ImmutableContext("user2") + ) + val evalNull = confidenceFeatureProvider.getStringEvaluation( + "test-kotlin-flag-1.mynull", + "default3", + ImmutableContext("user2") + ) assertEquals("default", evalString.value) assertEquals(true, evalBool.value) @@ -794,7 +901,11 @@ internal class ConfidenceFeatureProviderTests { ImmutableContext("user1") ) cache.refresh(cacheData) - val evalString = confidenceFeatureProvider.getStringEvaluation("test-kotlin-flag-1.mystring", "default", ImmutableContext("user1")) + val evalString = confidenceFeatureProvider.getStringEvaluation( + "test-kotlin-flag-1.mystring", + "default", + ImmutableContext("user1") + ) assertEquals("default", evalString.value) assertEquals(Reason.ERROR.toString(), evalString.reason) assertEquals(evalString.errorMessage, "Invalid targeting key") @@ -874,7 +985,11 @@ internal class ConfidenceFeatureProviderTests { ) cache.refresh(cacheData) val ex = assertThrows(FlagNotFoundError::class.java) { - confidenceFeatureProvider.getStringEvaluation("test-kotlin-flag-2.mystring", "default", ImmutableContext("user2")) + confidenceFeatureProvider.getStringEvaluation( + "test-kotlin-flag-2.mystring", + "default", + ImmutableContext("user2") + ) } assertEquals("Could not find flag named: test-kotlin-flag-2", ex.message) } @@ -895,7 +1010,11 @@ internal class ConfidenceFeatureProviderTests { confidenceFeatureProvider.initialize(ImmutableContext("user1")) advanceUntilIdle() val ex = assertThrows(FlagNotFoundError::class.java) { - confidenceFeatureProvider.getStringEvaluation("test-kotlin-flag-2.mystring", "default", ImmutableContext("user1")) + confidenceFeatureProvider.getStringEvaluation( + "test-kotlin-flag-2.mystring", + "default", + ImmutableContext("user1") + ) } assertEquals("Could not find flag named: test-kotlin-flag-2", ex.message) } @@ -957,7 +1076,11 @@ internal class ConfidenceFeatureProviderTests { dispatcher = testDispatcher, client = mockClient ) - whenever(mockClient.resolve(eq(listOf()), any())).thenReturn(ResolveResponse.Resolved(ResolveFlags(resolvedFlags, "token1"))) + whenever(mockClient.resolve(eq(listOf()), any())).thenReturn( + ResolveResponse.Resolved( + ResolveFlags(resolvedFlags, "token1") + ) + ) confidenceFeatureProvider.initialize(ImmutableContext("user2")) advanceUntilIdle() val ex = assertThrows(ParseError::class.java) { diff --git a/Provider/src/test/java/dev/openfeature/contrib/providers/ConfidenceIntegrationTests.kt b/Provider/src/test/java/com/spotify/confidence/ConfidenceIntegrationTests.kt similarity index 95% rename from Provider/src/test/java/dev/openfeature/contrib/providers/ConfidenceIntegrationTests.kt rename to Provider/src/test/java/com/spotify/confidence/ConfidenceIntegrationTests.kt index ed7d2994..e00526b3 100644 --- a/Provider/src/test/java/dev/openfeature/contrib/providers/ConfidenceIntegrationTests.kt +++ b/Provider/src/test/java/com/spotify/confidence/ConfidenceIntegrationTests.kt @@ -1,10 +1,10 @@ -package dev.openfeature.contrib.providers +package com.spotify.confidence import android.content.Context -import dev.openfeature.contrib.providers.cache.FLAGS_FILE_NAME -import dev.openfeature.contrib.providers.cache.StorageFileCache -import dev.openfeature.contrib.providers.client.ResolveReason -import dev.openfeature.contrib.providers.client.ResolvedFlag +import com.spotify.confidence.cache.FLAGS_FILE_NAME +import com.spotify.confidence.cache.StorageFileCache +import com.spotify.confidence.client.ResolveReason +import com.spotify.confidence.client.ResolvedFlag import dev.openfeature.sdk.ImmutableContext import dev.openfeature.sdk.ImmutableStructure import dev.openfeature.sdk.OpenFeatureAPI diff --git a/Provider/src/test/java/dev/openfeature/contrib/providers/ConfidenceRemoteClientTests.kt b/Provider/src/test/java/com/spotify/confidence/ConfidenceRemoteClientTests.kt similarity index 97% rename from Provider/src/test/java/dev/openfeature/contrib/providers/ConfidenceRemoteClientTests.kt rename to Provider/src/test/java/com/spotify/confidence/ConfidenceRemoteClientTests.kt index f742d296..9a1a6d89 100644 --- a/Provider/src/test/java/dev/openfeature/contrib/providers/ConfidenceRemoteClientTests.kt +++ b/Provider/src/test/java/com/spotify/confidence/ConfidenceRemoteClientTests.kt @@ -1,15 +1,15 @@ @file:OptIn(ExperimentalCoroutinesApi::class) -package dev.openfeature.contrib.providers +package com.spotify.confidence -import dev.openfeature.contrib.providers.client.AppliedFlag -import dev.openfeature.contrib.providers.client.Clock -import dev.openfeature.contrib.providers.client.ConfidenceRemoteClient -import dev.openfeature.contrib.providers.client.Flags -import dev.openfeature.contrib.providers.client.ResolveFlags -import dev.openfeature.contrib.providers.client.ResolveReason -import dev.openfeature.contrib.providers.client.ResolveResponse -import dev.openfeature.contrib.providers.client.ResolvedFlag +import com.spotify.confidence.client.AppliedFlag +import com.spotify.confidence.client.Clock +import com.spotify.confidence.client.ConfidenceRemoteClient +import com.spotify.confidence.client.Flags +import com.spotify.confidence.client.ResolveFlags +import com.spotify.confidence.client.ResolveReason +import com.spotify.confidence.client.ResolveResponse +import com.spotify.confidence.client.ResolvedFlag import dev.openfeature.sdk.ImmutableContext import dev.openfeature.sdk.ImmutableStructure import dev.openfeature.sdk.Value diff --git a/Provider/src/test/java/dev/openfeature/contrib/providers/StorageFileCacheTests.kt b/Provider/src/test/java/com/spotify/confidence/StorageFileCacheTests.kt similarity index 90% rename from Provider/src/test/java/dev/openfeature/contrib/providers/StorageFileCacheTests.kt rename to Provider/src/test/java/com/spotify/confidence/StorageFileCacheTests.kt index d1d56e20..f68c5446 100644 --- a/Provider/src/test/java/dev/openfeature/contrib/providers/StorageFileCacheTests.kt +++ b/Provider/src/test/java/com/spotify/confidence/StorageFileCacheTests.kt @@ -1,13 +1,13 @@ -package dev.openfeature.contrib.providers +package com.spotify.confidence import android.content.Context -import dev.openfeature.contrib.providers.cache.InMemoryCache -import dev.openfeature.contrib.providers.client.ConfidenceClient -import dev.openfeature.contrib.providers.client.Flags -import dev.openfeature.contrib.providers.client.ResolveFlags -import dev.openfeature.contrib.providers.client.ResolveReason -import dev.openfeature.contrib.providers.client.ResolveResponse -import dev.openfeature.contrib.providers.client.ResolvedFlag +import com.spotify.confidence.cache.InMemoryCache +import com.spotify.confidence.client.ConfidenceClient +import com.spotify.confidence.client.Flags +import com.spotify.confidence.client.ResolveFlags +import com.spotify.confidence.client.ResolveReason +import com.spotify.confidence.client.ResolveResponse +import com.spotify.confidence.client.ResolvedFlag import dev.openfeature.sdk.ImmutableContext import dev.openfeature.sdk.ImmutableStructure import dev.openfeature.sdk.Reason @@ -68,7 +68,11 @@ class StorageFileCacheTests { val eventPublisher = EventHandler.eventsPublisher(testDispatcher) eventPublisher.publish(OpenFeatureEvents.ProviderStale) val cache1 = InMemoryCache() - whenever(mockClient.resolve(eq(listOf()), any())).thenReturn(ResolveResponse.Resolved(ResolveFlags(resolvedFlags, "token1"))) + whenever(mockClient.resolve(eq(listOf()), any())).thenReturn( + ResolveResponse.Resolved( + ResolveFlags(resolvedFlags, "token1") + ) + ) val provider1 = ConfidenceFeatureProvider.create( context = mockContext, clientSecret = "",