commit 738950e2474c2f0d961fd3a73dd37a04823f39e9
parent 8d237115a31b92606ff527ff326fd0b5460d9ef8
Author: t-p-white <towhite@mozilla.com>
Date: Thu, 20 Nov 2025 17:39:26 +0000
Bug 1991921 - Part 1: Refactored the TermsOfUseManager to use the terms of use repository instead of setting directly. r=android-reviewers,joberhauser
Differential Revision: https://phabricator.services.mozilla.com/D273019
Diffstat:
6 files changed, 234 insertions(+), 134 deletions(-)
diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Components.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Components.kt
@@ -74,6 +74,7 @@ import org.mozilla.fenix.perf.lazyMonitored
import org.mozilla.fenix.reviewprompt.ReviewPromptMiddleware
import org.mozilla.fenix.settings.settingssearch.DefaultFenixSettingsIndexer
import org.mozilla.fenix.termsofuse.TermsOfUseManager
+import org.mozilla.fenix.termsofuse.store.DefaultTermsOfUsePromptRepository
import org.mozilla.fenix.utils.Settings
import org.mozilla.fenix.utils.isLargeScreenSize
import org.mozilla.fenix.wifi.WifiConnectionMonitor
@@ -354,7 +355,7 @@ class Components(private val context: Context) {
}
val termsOfUseManager by lazyMonitored {
- TermsOfUseManager(settings)
+ TermsOfUseManager(DefaultTermsOfUsePromptRepository(settings))
}
val settingsIndexer by lazyMonitored {
diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/termsofuse/TermsOfUseManager.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/termsofuse/TermsOfUseManager.kt
@@ -5,16 +5,16 @@
package org.mozilla.fenix.termsofuse
import androidx.annotation.VisibleForTesting
-import org.mozilla.fenix.utils.Settings
+import org.mozilla.fenix.termsofuse.store.TermsOfUsePromptRepository
import org.mozilla.fenix.utils.Settings.Companion.FIVE_DAYS_MS
import org.mozilla.fenix.utils.Settings.Companion.THIRTY_SECONDS_MS
/**
* Helps determine when the terms of use prompt should show.
*
- * @param settings app settings
+ * @param repository the repository for data related to the Terms of Use prompt.
*/
-class TermsOfUseManager(private val settings: Settings) {
+class TermsOfUseManager(private val repository: TermsOfUsePromptRepository) {
private var isFirstCheckSinceStartingApp: Boolean = false
@@ -51,21 +51,21 @@ class TermsOfUseManager(private val settings: Settings) {
ignoreFirstCheckSinceStartingApp: Boolean = false,
currentTimeInMillis: Long = System.currentTimeMillis(),
): Boolean {
- if (settings.hasAcceptedTermsOfService) return false
- if (!settings.isTermsOfUsePromptEnabled) return false
- if (settings.termsOfUsePromptDisplayedCount >= settings.getTermsOfUseMaxDisplayCount()) return false
+ if (repository.hasAcceptedTermsOfUse) return false
+ if (!repository.isTermsOfUsePromptEnabled) return false
+ if (repository.hasExceededMaxDisplayCount) return false
val isFirstCheck = isFirstCheckSinceStartingApp
isFirstCheckSinceStartingApp = false
- val durationSinceLastPrompt = currentTimeInMillis - settings.lastTermsOfUsePromptTimeInMillis
- val durationBetweenPrompts = if (settings.isDebugTermsOfServiceTriggerTimeEnabled) {
+ val durationSinceLastPrompt = currentTimeInMillis - repository.lastTermsOfUsePromptTimeInMillis
+ val durationBetweenPrompts = if (repository.isDebugTermsOfUseTriggerTimeEnabled) {
THIRTY_SECONDS_MS
} else {
FIVE_DAYS_MS
}
- if (settings.hasPostponedAcceptingTermsOfUse && durationSinceLastPrompt < durationBetweenPrompts) return false
+ if (repository.hasPostponedAcceptingTermsOfUse && durationSinceLastPrompt < durationBetweenPrompts) return false
if (!ignoreFirstCheckSinceStartingApp && !isFirstCheck) return false
return true
diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/termsofuse/store/TermsOfUsePromptRepository.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/termsofuse/store/TermsOfUsePromptRepository.kt
@@ -12,6 +12,36 @@ import org.mozilla.fenix.utils.Settings
*/
interface TermsOfUsePromptRepository {
/**
+ * Whether the user has accepted the Terms of Use.
+ */
+ val hasAcceptedTermsOfUse: Boolean
+
+ /**
+ * Whether the Terms of Use prompt feature is enabled.
+ */
+ val isTermsOfUsePromptEnabled: Boolean
+
+ /**
+ * Whether the user exceeded the maximum number of times the Terms of Use prompt has been displayed.
+ */
+ val hasExceededMaxDisplayCount: Boolean
+
+ /**
+ * Whether the debug Terms of Use trigger time is enabled.
+ */
+ val isDebugTermsOfUseTriggerTimeEnabled: Boolean
+
+ /**
+ * The last time the Terms of Use prompt was displayed.
+ */
+ val lastTermsOfUsePromptTimeInMillis: Long
+
+ /**
+ * Whether the user has postponed accepting the Terms of Use.
+ */
+ val hasPostponedAcceptingTermsOfUse: Boolean
+
+ /**
* Updates the Terms of Use related preferences when the user accepts the ToU.
*
* @param nowMillis the current time in milliseconds.
@@ -44,6 +74,24 @@ interface TermsOfUsePromptRepository {
class DefaultTermsOfUsePromptRepository(
private val settings: Settings,
) : TermsOfUsePromptRepository {
+ override val hasAcceptedTermsOfUse: Boolean
+ get() = settings.hasAcceptedTermsOfService
+
+ override val isTermsOfUsePromptEnabled: Boolean
+ get() = settings.isTermsOfUsePromptEnabled
+
+ override val hasExceededMaxDisplayCount: Boolean
+ get() = settings.termsOfUsePromptDisplayedCount > settings.getTermsOfUseMaxDisplayCount()
+
+ override val isDebugTermsOfUseTriggerTimeEnabled: Boolean
+ get() = settings.isDebugTermsOfServiceTriggerTimeEnabled
+
+ override val lastTermsOfUsePromptTimeInMillis: Long
+ get() = settings.lastTermsOfUsePromptTimeInMillis
+
+ override val hasPostponedAcceptingTermsOfUse: Boolean
+ get() = settings.hasPostponedAcceptingTermsOfUse
+
override fun updateHasAcceptedTermsOfUsePreference(nowMillis: Long) {
settings.hasAcceptedTermsOfService = true
settings.termsOfUseAcceptedVersion = TOU_VERSION
diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/termsofuse/MockTermsOfUsePromptRepository.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/termsofuse/MockTermsOfUsePromptRepository.kt
@@ -0,0 +1,21 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package org.mozilla.fenix.termsofuse
+
+import org.mozilla.fenix.termsofuse.store.TermsOfUsePromptRepository
+
+class MockTermsOfUsePromptRepository(
+ override var hasAcceptedTermsOfUse: Boolean = false,
+ override val isTermsOfUsePromptEnabled: Boolean = true, // enable the feature by default for testing
+ override val hasExceededMaxDisplayCount: Boolean = false,
+ override val isDebugTermsOfUseTriggerTimeEnabled: Boolean = false,
+ override val lastTermsOfUsePromptTimeInMillis: Long = 0L,
+ override val hasPostponedAcceptingTermsOfUse: Boolean = false,
+) : TermsOfUsePromptRepository {
+ override fun updateHasAcceptedTermsOfUsePreference(nowMillis: Long) {}
+ override fun updateHasPostponedAcceptingTermsOfUsePreference() {}
+ override fun updateLastTermsOfUsePromptTimeInMillis(currentTimeInMillis: Long) {}
+ override fun incrementTermsOfUsePromptDisplayedCount() {}
+}
diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/termsofuse/TermsOfUseManagerTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/termsofuse/TermsOfUseManagerTest.kt
@@ -4,182 +4,107 @@
package org.mozilla.fenix.termsofuse
-import io.mockk.every
-import io.mockk.spyk
import junit.framework.TestCase.assertFalse
import junit.framework.TestCase.assertTrue
-import mozilla.components.support.test.robolectric.testContext
-import org.junit.Before
import org.junit.Test
-import org.junit.runner.RunWith
-import org.mozilla.fenix.ext.settings
-import org.mozilla.fenix.utils.Settings
-import org.robolectric.RobolectricTestRunner
+import org.mozilla.fenix.utils.Settings.Companion.FIVE_DAYS_MS
-@RunWith(RobolectricTestRunner::class)
class TermsOfUseManagerTest {
-
- private lateinit var settings: Settings
- private lateinit var termsOfUseManager: TermsOfUseManager
-
- @Before
- fun setup() {
- settings = Settings(testContext)
- termsOfUseManager = TermsOfUseManager(settings)
- every { testContext.settings() } returns settings
- }
-
@Test
- fun `GIVEN the user has not accepted terms of use THEN the prompt should not show`() {
- settings.hasAcceptedTermsOfService = true
- settings.isTermsOfUsePromptEnabled = true
+ fun `WHEN all conditions satisfied AND we ignore the first check THEN shouldShowTermsOfUsePrompt returns true`() {
+ val repository = MockTermsOfUsePromptRepository()
- assertFalse(termsOfUseManager.shouldShowTermsOfUsePromptOnBrowserFragment())
- }
-
- @Test
- fun `GIVEN the user has not postponed accepting THEN the prompt should show`() {
- settings.hasAcceptedTermsOfService = false
- settings.isTermsOfUsePromptEnabled = true
- settings.hasPostponedAcceptingTermsOfUse = false
- termsOfUseManager.onStart()
+ val termsOfUseManager = TermsOfUseManager(repository)
- assertTrue(termsOfUseManager.shouldShowTermsOfUsePromptOnBrowserFragment())
+ assertTrue(termsOfUseManager.shouldShowTermsOfUsePrompt(ignoreFirstCheckSinceStartingApp = true))
}
@Test
- fun `GIVEN the terms of use feature flag is disabled AND all other conditions to show are met THEN the prompt should not show`() {
- settings.hasAcceptedTermsOfService = false
- settings.isTermsOfUsePromptEnabled = false
- settings.hasPostponedAcceptingTermsOfUse = false
- termsOfUseManager.onStart()
+ fun `GIVEN other conditions satisfied WHEN user has already accepted the Terms of Use THEN shouldShowTermsOfUsePrompt returns false`() {
+ val repository = MockTermsOfUsePromptRepository(hasAcceptedTermsOfUse = true)
- assertFalse(termsOfUseManager.shouldShowTermsOfUsePromptOnBrowserFragment())
- }
+ val termsOfUseManager = TermsOfUseManager(repository)
- @Test
- fun `GIVEN the user has postponed accepting AND it has been 5 days since THEN the prompt should show`() {
- settings.hasAcceptedTermsOfService = false
- settings.isTermsOfUsePromptEnabled = true
- settings.hasPostponedAcceptingTermsOfUse = true
- termsOfUseManager.onStart()
- settings.lastTermsOfUsePromptTimeInMillis = System.currentTimeMillis() - Settings.FIVE_DAYS_MS
-
- assertTrue(termsOfUseManager.shouldShowTermsOfUsePromptOnBrowserFragment())
+ assertFalse(termsOfUseManager.shouldShowTermsOfUsePrompt(ignoreFirstCheckSinceStartingApp = true))
}
@Test
- fun `GIVEN the user has postponed accepting AND it has not been 5 days since THEN the prompt should not show`() {
- settings.hasAcceptedTermsOfService = false
- settings.isTermsOfUsePromptEnabled = true
- settings.hasPostponedAcceptingTermsOfUse = true
- termsOfUseManager.onStart()
- settings.lastTermsOfUsePromptTimeInMillis = System.currentTimeMillis()
+ fun `GIVEN other conditions satisfied WHEN the Terms of Use feature flag is disabled THEN shouldShowTermsOfUsePrompt returns false`() {
+ val repository = MockTermsOfUsePromptRepository(isTermsOfUsePromptEnabled = false)
- assertFalse(termsOfUseManager.shouldShowTermsOfUsePromptOnBrowserFragment())
- }
-
- @Test
- fun `GIVEN this is the first check of the session AND other requirements are met THEN the prompt should show`() {
- settings.hasAcceptedTermsOfService = false
- settings.isTermsOfUsePromptEnabled = true
- settings.hasPostponedAcceptingTermsOfUse = false
- termsOfUseManager.onStart()
+ val termsOfUseManager = TermsOfUseManager(repository)
- assertTrue(termsOfUseManager.shouldShowTermsOfUsePromptOnBrowserFragment())
+ assertFalse(termsOfUseManager.shouldShowTermsOfUsePrompt(ignoreFirstCheckSinceStartingApp = true))
}
@Test
- fun `GIVEN this is not the first check of the session AND other requirements are met THEN the prompt should not show`() {
- settings.hasAcceptedTermsOfService = false
- settings.isTermsOfUsePromptEnabled = true
- settings.hasPostponedAcceptingTermsOfUse = false
- termsOfUseManager.onStart()
+ fun `GIVEN other conditions satisfied WHEN prompt display count exceeded the max number of times to display THEN shouldShowTermsOfUsePrompt returns false`() {
+ val repository = MockTermsOfUsePromptRepository(hasExceededMaxDisplayCount = true)
- termsOfUseManager.shouldShowTermsOfUsePromptOnBrowserFragment()
+ val termsOfUseManager = TermsOfUseManager(repository)
- assertFalse(termsOfUseManager.shouldShowTermsOfUsePromptOnBrowserFragment())
+ assertFalse(termsOfUseManager.shouldShowTermsOfUsePrompt(ignoreFirstCheckSinceStartingApp = true))
}
@Test
- fun `GIVEN this is not the first check of the session AND we ignore the first check AND other requirements are met THEN the prompt should show`() {
- settings.hasAcceptedTermsOfService = false
- settings.isTermsOfUsePromptEnabled = true
- settings.hasPostponedAcceptingTermsOfUse = false
- termsOfUseManager.onStart()
+ fun `GIVEN other conditions satisfied WHEN the user has postponed accepting and it has been 5 days since THEN shouldShowTermsOfUsePrompt returns true`() {
+ val repository = MockTermsOfUsePromptRepository(
+ hasPostponedAcceptingTermsOfUse = true,
+ lastTermsOfUsePromptTimeInMillis = System.currentTimeMillis() - FIVE_DAYS_MS,
+ )
- termsOfUseManager.shouldShowTermsOfUsePromptOnBrowserFragment()
+ val termsOfUseManager = TermsOfUseManager(repository)
- assertTrue(termsOfUseManager.shouldShowTermsOfUsePromptOnHomepage())
+ assertTrue(termsOfUseManager.shouldShowTermsOfUsePrompt(ignoreFirstCheckSinceStartingApp = true))
}
@Test
- fun `GIVEN the first check was before 5 days WHEN we check again after 5 days on the Browser Fragment without restarting AND other requirements are met THEN the prompt should not show`() {
- settings.hasAcceptedTermsOfService = false
- settings.isTermsOfUsePromptEnabled = true
- settings.hasPostponedAcceptingTermsOfUse = true
- settings.lastTermsOfUsePromptTimeInMillis = System.currentTimeMillis()
- termsOfUseManager.onStart()
+ fun `GIVEN other conditions satisfied WHEN the user has postponed accepting and it has not been 5 days since THEN shouldShowTermsOfUsePrompt returns false`() {
+ val repository = MockTermsOfUsePromptRepository(
+ hasPostponedAcceptingTermsOfUse = true,
+ lastTermsOfUsePromptTimeInMillis = System.currentTimeMillis(),
+ )
- termsOfUseManager.shouldShowTermsOfUsePromptOnBrowserFragment()
+ val termsOfUseManager = TermsOfUseManager(repository)
- settings.lastTermsOfUsePromptTimeInMillis = System.currentTimeMillis() - Settings.FIVE_DAYS_MS
-
- assertFalse(termsOfUseManager.shouldShowTermsOfUsePromptOnBrowserFragment())
+ assertFalse(termsOfUseManager.shouldShowTermsOfUsePrompt(ignoreFirstCheckSinceStartingApp = true))
}
@Test
- fun `GIVEN the first check was before 5 days WHEN we check again after 5 days on the Home Fragment without restarting AND other requirements are met THEN the prompt should show`() {
- settings.hasAcceptedTermsOfService = false
- settings.isTermsOfUsePromptEnabled = true
- settings.hasPostponedAcceptingTermsOfUse = true
- settings.lastTermsOfUsePromptTimeInMillis = System.currentTimeMillis()
- termsOfUseManager.onStart()
+ fun `GIVEN other conditions satisfied WHEN this is not first check of the session and don't ignore first check THEN shouldShowTermsOfUsePrompt returns false`() {
+ val repository = MockTermsOfUsePromptRepository()
- termsOfUseManager.shouldShowTermsOfUsePromptOnBrowserFragment()
+ val termsOfUseManager = TermsOfUseManager(repository)
- settings.lastTermsOfUsePromptTimeInMillis = System.currentTimeMillis() - Settings.FIVE_DAYS_MS
-
- assertTrue(termsOfUseManager.shouldShowTermsOfUsePromptOnHomepage())
+ assertFalse(termsOfUseManager.shouldShowTermsOfUsePrompt())
}
@Test
- fun `GIVEN other conditions satisfied WHEN prompt has not been displayed THEN shouldShowTermsOfUsePrompt returns true`() {
- val settings = spyk(settings)
- settings.hasAcceptedTermsOfService = false
- settings.isTermsOfUsePromptEnabled = true
- settings.hasPostponedAcceptingTermsOfUse = false
- // Prompt display count configuration.
- settings.termsOfUsePromptDisplayedCount = 0
- every { settings.getTermsOfUseMaxDisplayCount() } returns 2
+ fun `GIVEN other conditions satisfied WHEN this is first check of the session and don't ignore first check THEN shouldShowTermsOfUsePrompt returns true`() {
+ val repository = MockTermsOfUsePromptRepository()
+ val termsOfUseManager = TermsOfUseManager(repository)
termsOfUseManager.onStart()
assertTrue(termsOfUseManager.shouldShowTermsOfUsePrompt())
}
@Test
- fun `GIVEN other conditions satisfied WHEN prompt has been displayed the maximum number of times THEN shouldShowTermsOfUsePrompt returns false`() {
- val settings = spyk(settings)
- settings.hasAcceptedTermsOfService = false
- settings.isTermsOfUsePromptEnabled = true
- settings.hasPostponedAcceptingTermsOfUse = false
- // Prompt display count configuration.
- settings.termsOfUsePromptDisplayedCount = 2
- every { settings.getTermsOfUseMaxDisplayCount() } returns 2
+ fun `GIVEN other conditions satisfied WHEN this is not the first check of the session and we ignore the first check THEN shouldShowTermsOfUsePrompt returns true`() {
+ val repository = MockTermsOfUsePromptRepository()
- assertFalse(termsOfUseManager.shouldShowTermsOfUsePrompt())
+ val termsOfUseManager = TermsOfUseManager(repository)
+ termsOfUseManager.shouldShowTermsOfUsePrompt()
+
+ assertTrue(termsOfUseManager.shouldShowTermsOfUsePrompt(ignoreFirstCheckSinceStartingApp = true))
}
@Test
- fun `GIVEN other conditions satisfied WHEN prompt has been displayed more than the maximum number of times THEN shouldShowTermsOfUsePrompt returns false`() {
- val settings = spyk(settings)
- settings.hasAcceptedTermsOfService = false
- settings.isTermsOfUsePromptEnabled = true
- settings.hasPostponedAcceptingTermsOfUse = false
- // Prompt display count configuration.
- settings.termsOfUsePromptDisplayedCount = 3
- every { settings.getTermsOfUseMaxDisplayCount() } returns 2
+ fun `GIVEN other conditions satisfied WHEN this is not the first check of the session and we don't ignore the first check THEN shouldShowTermsOfUsePrompt returns false`() {
+ val repository = MockTermsOfUsePromptRepository()
+
+ val termsOfUseManager = TermsOfUseManager(repository)
+ termsOfUseManager.shouldShowTermsOfUsePrompt()
assertFalse(termsOfUseManager.shouldShowTermsOfUsePrompt())
}
diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/termsofuse/store/TermsOfUsePromptRepositoryTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/termsofuse/store/TermsOfUsePromptRepositoryTest.kt
@@ -16,6 +16,11 @@ import org.robolectric.RobolectricTestRunner
private const val TIME_IN_MILLIS = 1759926358L
+/**
+ * This copies the default set in `nimbus.fml.yaml` `terms-of-use-prompt` `max-display-count`.
+ */
+private const val MAX_DISPLAY_COUNT = 2
+
@RunWith(RobolectricTestRunner::class)
class TermsOfUsePromptRepositoryTest {
private lateinit var settings: Settings
@@ -29,6 +34,106 @@ class TermsOfUsePromptRepositoryTest {
}
@Test
+ fun `WHEN settings hasAcceptedTermsOfService is false THEN hasAcceptedTermsOfUse returns false`() {
+ settings.hasAcceptedTermsOfService = false
+
+ assertFalse(settings.hasAcceptedTermsOfService)
+ assertFalse(repository.hasAcceptedTermsOfUse)
+ }
+
+ @Test
+ fun `WHEN settings hasAcceptedTermsOfService is true THEN hasAcceptedTermsOfUse returns true`() {
+ settings.hasAcceptedTermsOfService = true
+
+ assertTrue(settings.hasAcceptedTermsOfService)
+ assertTrue(repository.hasAcceptedTermsOfUse)
+ }
+
+ @Test
+ fun `WHEN settings isTermsOfUsePromptEnabled is false THEN isTermsOfUsePromptEnabled returns false`() {
+ settings.isTermsOfUsePromptEnabled = false
+
+ assertFalse(settings.isTermsOfUsePromptEnabled)
+ assertFalse(repository.isTermsOfUsePromptEnabled)
+ }
+
+ @Test
+ fun `WHEN settings isTermsOfUsePromptEnabled is true THEN isTermsOfUsePromptEnabled returns true`() {
+ settings.isTermsOfUsePromptEnabled = true
+
+ assertTrue(settings.isTermsOfUsePromptEnabled)
+ assertTrue(repository.isTermsOfUsePromptEnabled)
+ }
+
+ @Test
+ fun `WHEN settings ToU prompt count is more than the max display count THEN hasExceededMaxDisplayCount returns true`() {
+ val count = MAX_DISPLAY_COUNT + 1
+ settings.termsOfUsePromptDisplayedCount = count
+
+ assertEquals(count, settings.termsOfUsePromptDisplayedCount)
+ assertTrue(repository.hasExceededMaxDisplayCount)
+ }
+
+ @Test
+ fun `WHEN settings ToU prompt count is the max display count THEN hasExceededMaxDisplayCount returns false`() {
+ val count = MAX_DISPLAY_COUNT
+ settings.termsOfUsePromptDisplayedCount = count
+
+ assertEquals(count, settings.termsOfUsePromptDisplayedCount)
+ assertFalse(repository.hasExceededMaxDisplayCount)
+ }
+
+ @Test
+ fun `WHEN settings ToU prompt count is less than the max display count THEN hasExceededMaxDisplayCount returns false`() {
+ val count = MAX_DISPLAY_COUNT - 1
+ settings.termsOfUsePromptDisplayedCount = count
+
+ assertEquals(count, settings.termsOfUsePromptDisplayedCount)
+ assertFalse(repository.hasExceededMaxDisplayCount)
+ }
+
+ @Test
+ fun `WHEN settings isDebugTermsOfServiceTriggerTimeEnabled is false THEN isDebugTermsOfUseTriggerTimeEnabled returns false`() {
+ settings.isDebugTermsOfServiceTriggerTimeEnabled = false
+
+ assertFalse(settings.isDebugTermsOfServiceTriggerTimeEnabled)
+ assertFalse(repository.isDebugTermsOfUseTriggerTimeEnabled)
+ }
+
+ @Test
+ fun `WHEN settings isDebugTermsOfServiceTriggerTimeEnabled is true THEN isDebugTermsOfUseTriggerTimeEnabled returns true`() {
+ settings.isDebugTermsOfServiceTriggerTimeEnabled = true
+
+ assertTrue(settings.isDebugTermsOfServiceTriggerTimeEnabled)
+ assertTrue(repository.isDebugTermsOfUseTriggerTimeEnabled)
+ }
+
+ @Test
+ fun `WHEN settings lastTermsOfUsePromptTimeInMillis is set THEN lastTermsOfUsePromptTimeInMillis returns the same value`() {
+ val time = 12345L
+ settings.lastTermsOfUsePromptTimeInMillis = time
+
+ assertEquals(time, settings.lastTermsOfUsePromptTimeInMillis)
+ assertEquals(time, repository.lastTermsOfUsePromptTimeInMillis)
+ }
+
+ @Test
+ fun `WHEN settings hasPostponedAcceptingTermsOfUse is false THEN hasPostponedAcceptingTermsOfUse returns false`() {
+ settings.hasPostponedAcceptingTermsOfUse = false
+
+ assertFalse(settings.hasPostponedAcceptingTermsOfUse)
+ assertFalse(repository.hasPostponedAcceptingTermsOfUse)
+ }
+
+ @Test
+ fun `WHEN settings hasPostponedAcceptingTermsOfUse is true THEN hasPostponedAcceptingTermsOfUse returns true`() {
+ settings.hasPostponedAcceptingTermsOfUse = true
+
+ assertTrue(settings.hasPostponedAcceptingTermsOfUse)
+ assertTrue(repository.hasPostponedAcceptingTermsOfUse)
+ }
+
+ @Test
fun `WHEN updateHasAcceptedTermsOfUsePreference is called THEN the related ToU preferences are updated`() {
assertFalse(settings.hasAcceptedTermsOfService)
assertEquals(0, settings.termsOfUseAcceptedVersion)