Skip to content
This repository was archived by the owner on Jul 9, 2025. It is now read-only.

Commit 61cb2a4

Browse files
committed
Bug 1944956 - Part 4: Renaming the new repository and fixing tests r=android-reviewers,gmalekpour,twhite
Differential Revision: https://phabricator.services.mozilla.com/D236297
1 parent fa475af commit 61cb2a4

File tree

5 files changed

+80
-44
lines changed

5 files changed

+80
-44
lines changed

mobile/android/fenix/app/src/main/java/org/mozilla/fenix/onboarding/store/PrivacyPreferencesMiddleware.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import mozilla.components.lib.state.MiddlewareContext
1313
* @param repository [PrivacyPreferencesRepository] used to access the privacy preferences.
1414
*/
1515
class PrivacyPreferencesMiddleware(
16-
private val repository: SimplePrivacyPreferencesRepository,
16+
private val repository: PrivacyPreferencesRepository,
1717
) : Middleware<PrivacyPreferencesState, PrivacyPreferencesAction> {
1818

1919
override fun invoke(
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import org.mozilla.fenix.utils.Settings
99
/**
1010
* The repository for managing user privacy preferences set during onboarding.
1111
*/
12-
interface SimplePrivacyPreferencesRepository {
12+
interface PrivacyPreferencesRepository {
1313

1414
/**
1515
* Retrieves the state of a specific preference.
@@ -36,13 +36,13 @@ enum class PreferenceType {
3636
}
3737

3838
/**
39-
* The default implementation of [SimplePrivacyPreferencesRepository].
39+
* The default implementation of [PrivacyPreferencesRepository].
4040
*
4141
* @param settings The [Settings] instance for accessing and modifying privacy-related settings.
4242
*/
43-
class DefaultSimplePrivacyPreferencesRepository(
43+
class DefaultPrivacyPreferencesRepository(
4444
private val settings: Settings,
45-
) : SimplePrivacyPreferencesRepository {
45+
) : PrivacyPreferencesRepository {
4646

4747
override fun getPreference(type: PreferenceType): Boolean {
4848
return when (type) {

mobile/android/fenix/app/src/main/java/org/mozilla/fenix/onboarding/view/ManagePrivacyPreferencesDialogFragment.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import androidx.fragment.app.DialogFragment
1313
import org.mozilla.fenix.components.lazyStore
1414
import org.mozilla.fenix.ext.settings
1515
import org.mozilla.fenix.onboarding.ManagePrivacyPreferencesDialog
16-
import org.mozilla.fenix.onboarding.store.DefaultSimplePrivacyPreferencesRepository
16+
import org.mozilla.fenix.onboarding.store.DefaultPrivacyPreferencesRepository
1717
import org.mozilla.fenix.onboarding.store.PreferenceType
1818
import org.mozilla.fenix.onboarding.store.PrivacyPreferencesAction
1919
import org.mozilla.fenix.onboarding.store.PrivacyPreferencesMiddleware
@@ -30,7 +30,7 @@ import org.mozilla.fenix.theme.FirefoxTheme
3030
class ManagePrivacyPreferencesDialogFragment : DialogFragment() {
3131

3232
private val store by lazyStore {
33-
val repository = DefaultSimplePrivacyPreferencesRepository(
33+
val repository = DefaultPrivacyPreferencesRepository(
3434
settings = requireContext().settings(),
3535
)
3636
PrivacyPreferencesStore(
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/* This Source Code Form is subject to the terms of the Mozilla Public
2+
* License, v. 2.0. If a copy of the MPL was not distributed with this
3+
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4+
5+
package org.mozilla.fenix.onboarding.store
6+
7+
import androidx.test.ext.junit.runners.AndroidJUnit4
8+
import junit.framework.TestCase.assertFalse
9+
import junit.framework.TestCase.assertTrue
10+
import mozilla.components.support.test.robolectric.testContext
11+
import org.junit.Test
12+
import org.junit.runner.RunWith
13+
import org.mozilla.fenix.utils.Settings
14+
15+
@RunWith(AndroidJUnit4::class)
16+
class DefaultPrivacyPreferencesRepositoryTest {
17+
18+
@Test
19+
fun `GIVEN crash reporting flag is updated in settings WHEN getPreference is called THEN updated value is returned `() {
20+
val settings = Settings(testContext)
21+
val repository = DefaultPrivacyPreferencesRepository(settings)
22+
assertFalse(settings.crashReportAlwaysSend)
23+
assertFalse(repository.getPreference(PreferenceType.CrashReporting))
24+
25+
settings.crashReportAlwaysSend = true
26+
assertTrue(repository.getPreference(PreferenceType.CrashReporting))
27+
28+
settings.crashReportAlwaysSend = false
29+
assertFalse(repository.getPreference(PreferenceType.CrashReporting))
30+
}
31+
32+
@Test
33+
fun `GIVEN telemetry flag is updated in settings WHEN getPreference is called THEN updated value is returned `() {
34+
val settings = Settings(testContext)
35+
val repository = DefaultPrivacyPreferencesRepository(settings)
36+
assertTrue(settings.isTelemetryEnabled)
37+
assertTrue(repository.getPreference(PreferenceType.UsageData))
38+
39+
settings.isTelemetryEnabled = false
40+
assertFalse(repository.getPreference(PreferenceType.UsageData))
41+
42+
settings.isTelemetryEnabled = true
43+
assertTrue(repository.getPreference(PreferenceType.UsageData))
44+
}
45+
}

mobile/android/fenix/app/src/test/java/org/mozilla/fenix/onboarding/store/PrivacyPreferencesMiddlewareTest.kt

Lines changed: 28 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,14 @@
55
package org.mozilla.fenix.onboarding.store
66

77
import androidx.test.ext.junit.runners.AndroidJUnit4
8-
import kotlinx.coroutines.flow.emptyFlow
8+
import junit.framework.TestCase.assertEquals
99
import mozilla.components.lib.state.MiddlewareContext
1010
import mozilla.components.support.test.mock
1111
import org.junit.Before
1212
import org.junit.Test
1313
import org.junit.runner.RunWith
1414
import org.mockito.Mock
15-
import org.mockito.Mockito.verify
1615
import org.mockito.Mockito.verifyNoInteractions
17-
import org.mockito.Mockito.verifyNoMoreInteractions
18-
import org.mockito.Mockito.`when`
1916
import org.mockito.MockitoAnnotations
2017

2118
@RunWith(AndroidJUnit4::class)
@@ -37,47 +34,41 @@ class PrivacyPreferencesMiddlewareTest {
3734
}
3835

3936
@Test
40-
fun `GIVEN init called with no preferences WHEN middleware is invoked THEN only the repo is initialized`() {
41-
`when`(repository.privacyPreferenceUpdates).thenReturn(emptyFlow())
42-
43-
middleware.invoke(context, {}, PrivacyPreferencesAction.Init)
44-
45-
verifyNoInteractions(context)
46-
verify(repository).init()
47-
}
37+
fun `WHEN data usage update action is invoked THEN new value is set in repository`() {
38+
var dataUsageEnabled = true
39+
val middleware = PrivacyPreferencesMiddleware(
40+
repository = object : PrivacyPreferencesRepository {
41+
override fun getPreference(type: PreferenceType) = false
42+
43+
override fun setPreference(type: PreferenceType, enabled: Boolean) {
44+
dataUsageEnabled = enabled
45+
}
46+
},
47+
)
4848

49-
@Test
50-
fun `GIVEN init called with preferences WHEN middleware is invoked THEN the repo is initialized`() {
51-
middleware.invoke(context, {}, PrivacyPreferencesAction.Init)
49+
val updatedDataUsageEnabled = !dataUsageEnabled
50+
middleware.invoke(context, {}, PrivacyPreferencesAction.UsageDataPreferenceUpdatedTo(enabled = updatedDataUsageEnabled))
5251

53-
verify(repository).init()
54-
verifyNoMoreInteractions(repository)
52+
assertEquals(updatedDataUsageEnabled, dataUsageEnabled)
5553
}
5654

5755
@Test
58-
fun `GIVEN crash reporting called WHEN middleware is invoked THEN the repo is updated`() {
59-
val action = PrivacyPreferencesAction.CrashReportingPreferenceUpdatedTo(true)
60-
middleware.invoke(context, {}, action)
61-
62-
verify(repository).updatePrivacyPreference(
63-
PrivacyPreferencesRepository.PrivacyPreferenceUpdate(
64-
preferenceType = PrivacyPreferencesRepository.PrivacyPreference.CrashReporting,
65-
value = action.enabled,
66-
),
56+
fun `WHEN crash reporting update action is invoked THEN new value is set in repository`() {
57+
var crashReportEnabled = true
58+
val middleware = PrivacyPreferencesMiddleware(
59+
repository = object : PrivacyPreferencesRepository {
60+
override fun getPreference(type: PreferenceType) = false
61+
62+
override fun setPreference(type: PreferenceType, enabled: Boolean) {
63+
crashReportEnabled = enabled
64+
}
65+
},
6766
)
68-
}
6967

70-
@Test
71-
fun `GIVEN usage data called WHEN middleware is invoked THEN the repo is updated`() {
72-
val action = PrivacyPreferencesAction.UsageDataPreferenceUpdatedTo(true)
73-
middleware.invoke(context, {}, action)
68+
val updatedCrashReportEnabled = !crashReportEnabled
69+
middleware.invoke(context, {}, PrivacyPreferencesAction.UsageDataPreferenceUpdatedTo(enabled = updatedCrashReportEnabled))
7470

75-
verify(repository).updatePrivacyPreference(
76-
PrivacyPreferencesRepository.PrivacyPreferenceUpdate(
77-
preferenceType = PrivacyPreferencesRepository.PrivacyPreference.UsageData,
78-
value = action.enabled,
79-
),
80-
)
71+
assertEquals(updatedCrashReportEnabled, crashReportEnabled)
8172
}
8273

8374
@Test

0 commit comments

Comments
 (0)