tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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:
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/Components.kt | 3++-
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/termsofuse/TermsOfUseManager.kt | 18+++++++++---------
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/termsofuse/store/TermsOfUsePromptRepository.kt | 48++++++++++++++++++++++++++++++++++++++++++++++++
Amobile/android/fenix/app/src/test/java/org/mozilla/fenix/termsofuse/MockTermsOfUsePromptRepository.kt | 21+++++++++++++++++++++
Mmobile/android/fenix/app/src/test/java/org/mozilla/fenix/termsofuse/TermsOfUseManagerTest.kt | 173+++++++++++++++++++++++--------------------------------------------------------
Mmobile/android/fenix/app/src/test/java/org/mozilla/fenix/termsofuse/store/TermsOfUsePromptRepositoryTest.kt | 105+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
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)