Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit 43f4f059 authored by Wolf-Martell Montwé's avatar Wolf-Martell Montwé
Browse files

Add `onDisabledOrUnavailable` to `FeatureFlagResult`

parent 9f9bc36a
Loading
Loading
Loading
Loading
+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) {
@@ -28,4 +28,12 @@ sealed interface FeatureFlagResult {

        return this
    }

    fun onDisabledOrUnavailable(action: () -> Unit): FeatureFlagResult {
        if (this is Disabled || this is Unavailable) {
            action()
        }

        return this
    }
}
+77 −15
Original line number Diff line number Diff line
@@ -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")
    }
}