Loading core/featureflags/src/main/kotlin/app/k9mail/core/featureflag/FeatureFlagResult.kt +11 −3 Original line number Diff line number Diff line package app.k9mail.core.featureflag sealed interface FeatureFlagResult { object Enabled : FeatureFlagResult object Disabled : FeatureFlagResult object Unavailable : FeatureFlagResult data object Enabled : FeatureFlagResult data object Disabled : FeatureFlagResult data object Unavailable : FeatureFlagResult fun onEnabled(action: () -> Unit): FeatureFlagResult { if (this is Enabled) { Loading @@ -28,4 +28,12 @@ sealed interface FeatureFlagResult { return this } fun onDisabledOrUnavailable(action: () -> Unit): FeatureFlagResult { if (this is Disabled || this is Unavailable) { action() } return this } } core/featureflags/src/test/kotlin/app/k9mail/core/featureflags/FeatureFlagResultTest.kt +77 −15 Original line number Diff line number Diff line Loading @@ -11,50 +11,112 @@ class FeatureFlagResultTest { fun `should only call onEnabled when enabled`() { val testSubject = FeatureFlagResult.Enabled var result = "" var resultEnabled = "" var resultDisabled = "" var resultUnavailable = "" testSubject.onEnabled { result = "enabled" resultEnabled = "enabled" }.onDisabled { result = "disabled" resultDisabled = "disabled" }.onUnavailable { result = "unavailable" resultUnavailable = "unavailable" } assertThat(result).isEqualTo("enabled") assertThat(resultEnabled).isEqualTo("enabled") assertThat(resultDisabled).isEqualTo("") assertThat(resultUnavailable).isEqualTo("") } @Test fun `should only call onDisabled when disabled`() { val testSubject = FeatureFlagResult.Disabled var result = "" var resultEnabled = "" var resultDisabled = "" var resultUnavailable = "" testSubject.onEnabled { result = "enabled" resultEnabled = "enabled" }.onDisabled { result = "disabled" resultDisabled = "disabled" }.onUnavailable { result = "unavailable" resultUnavailable = "unavailable" } assertThat(result).isEqualTo("disabled") assertThat(resultEnabled).isEqualTo("") assertThat(resultDisabled).isEqualTo("disabled") assertThat(resultUnavailable).isEqualTo("") } @Test fun `should only call onUnavailable when unavailable`() { val testSubject = FeatureFlagResult.Unavailable var result = "" var resultEnabled = "" var resultDisabled = "" var resultUnavailable = "" testSubject.onEnabled { result = "enabled" resultEnabled = "enabled" }.onDisabled { result = "disabled" resultDisabled = "disabled" }.onUnavailable { result = "unavailable" resultUnavailable = "unavailable" } assertThat(result).isEqualTo("unavailable") assertThat(resultEnabled).isEqualTo("") assertThat(resultDisabled).isEqualTo("") assertThat(resultUnavailable).isEqualTo("unavailable") } @Test fun `should call onDisabledOrUnavailable when disabled`() { val testSubject = FeatureFlagResult.Disabled var resultEnabled = "" var resultDisabled = "" var resultUnavailable = "" var resultDisabledOrUnavailable = "" testSubject.onEnabled { resultEnabled = "enabled" }.onDisabled { resultDisabled = "disabled" }.onUnavailable { resultUnavailable = "unavailable" }.onDisabledOrUnavailable { resultDisabledOrUnavailable = "disabled or unavailable" } assertThat(resultEnabled).isEqualTo("") assertThat(resultDisabled).isEqualTo("disabled") assertThat(resultUnavailable).isEqualTo("") assertThat(resultDisabledOrUnavailable).isEqualTo("disabled or unavailable") } @Test fun `should call onDisabledOrUnavailable when unavailable`() { val testSubject = FeatureFlagResult.Unavailable var resultEnabled = "" var resultDisabled = "" var resultUnavailable = "" var resultDisabledOrUnavailable = "" testSubject.onEnabled { resultEnabled = "enabled" }.onDisabled { resultDisabled = "disabled" }.onUnavailable { resultUnavailable = "unavailable" }.onDisabledOrUnavailable { resultDisabledOrUnavailable = "disabled or unavailable" } assertThat(resultEnabled).isEqualTo("") assertThat(resultDisabled).isEqualTo("") assertThat(resultUnavailable).isEqualTo("unavailable") assertThat(resultDisabledOrUnavailable).isEqualTo("disabled or unavailable") } } Loading
core/featureflags/src/main/kotlin/app/k9mail/core/featureflag/FeatureFlagResult.kt +11 −3 Original line number Diff line number Diff line package app.k9mail.core.featureflag sealed interface FeatureFlagResult { object Enabled : FeatureFlagResult object Disabled : FeatureFlagResult object Unavailable : FeatureFlagResult data object Enabled : FeatureFlagResult data object Disabled : FeatureFlagResult data object Unavailable : FeatureFlagResult fun onEnabled(action: () -> Unit): FeatureFlagResult { if (this is Enabled) { Loading @@ -28,4 +28,12 @@ sealed interface FeatureFlagResult { return this } fun onDisabledOrUnavailable(action: () -> Unit): FeatureFlagResult { if (this is Disabled || this is Unavailable) { action() } return this } }
core/featureflags/src/test/kotlin/app/k9mail/core/featureflags/FeatureFlagResultTest.kt +77 −15 Original line number Diff line number Diff line Loading @@ -11,50 +11,112 @@ class FeatureFlagResultTest { fun `should only call onEnabled when enabled`() { val testSubject = FeatureFlagResult.Enabled var result = "" var resultEnabled = "" var resultDisabled = "" var resultUnavailable = "" testSubject.onEnabled { result = "enabled" resultEnabled = "enabled" }.onDisabled { result = "disabled" resultDisabled = "disabled" }.onUnavailable { result = "unavailable" resultUnavailable = "unavailable" } assertThat(result).isEqualTo("enabled") assertThat(resultEnabled).isEqualTo("enabled") assertThat(resultDisabled).isEqualTo("") assertThat(resultUnavailable).isEqualTo("") } @Test fun `should only call onDisabled when disabled`() { val testSubject = FeatureFlagResult.Disabled var result = "" var resultEnabled = "" var resultDisabled = "" var resultUnavailable = "" testSubject.onEnabled { result = "enabled" resultEnabled = "enabled" }.onDisabled { result = "disabled" resultDisabled = "disabled" }.onUnavailable { result = "unavailable" resultUnavailable = "unavailable" } assertThat(result).isEqualTo("disabled") assertThat(resultEnabled).isEqualTo("") assertThat(resultDisabled).isEqualTo("disabled") assertThat(resultUnavailable).isEqualTo("") } @Test fun `should only call onUnavailable when unavailable`() { val testSubject = FeatureFlagResult.Unavailable var result = "" var resultEnabled = "" var resultDisabled = "" var resultUnavailable = "" testSubject.onEnabled { result = "enabled" resultEnabled = "enabled" }.onDisabled { result = "disabled" resultDisabled = "disabled" }.onUnavailable { result = "unavailable" resultUnavailable = "unavailable" } assertThat(result).isEqualTo("unavailable") assertThat(resultEnabled).isEqualTo("") assertThat(resultDisabled).isEqualTo("") assertThat(resultUnavailable).isEqualTo("unavailable") } @Test fun `should call onDisabledOrUnavailable when disabled`() { val testSubject = FeatureFlagResult.Disabled var resultEnabled = "" var resultDisabled = "" var resultUnavailable = "" var resultDisabledOrUnavailable = "" testSubject.onEnabled { resultEnabled = "enabled" }.onDisabled { resultDisabled = "disabled" }.onUnavailable { resultUnavailable = "unavailable" }.onDisabledOrUnavailable { resultDisabledOrUnavailable = "disabled or unavailable" } assertThat(resultEnabled).isEqualTo("") assertThat(resultDisabled).isEqualTo("disabled") assertThat(resultUnavailable).isEqualTo("") assertThat(resultDisabledOrUnavailable).isEqualTo("disabled or unavailable") } @Test fun `should call onDisabledOrUnavailable when unavailable`() { val testSubject = FeatureFlagResult.Unavailable var resultEnabled = "" var resultDisabled = "" var resultUnavailable = "" var resultDisabledOrUnavailable = "" testSubject.onEnabled { resultEnabled = "enabled" }.onDisabled { resultDisabled = "disabled" }.onUnavailable { resultUnavailable = "unavailable" }.onDisabledOrUnavailable { resultDisabledOrUnavailable = "disabled or unavailable" } assertThat(resultEnabled).isEqualTo("") assertThat(resultDisabled).isEqualTo("") assertThat(resultUnavailable).isEqualTo("unavailable") assertThat(resultDisabledOrUnavailable).isEqualTo("disabled or unavailable") } }