For #24203 - Remove Event.wrapper for Onboarding telemetry

upstream-sync
Alexandru2909 2 years ago committed by mergify[bot]
parent 3b39b4668f
commit ffbcaa82de

@ -507,6 +507,7 @@ onboarding:
The toolbar position preference was chosen from the onboarding card. The toolbar position preference was chosen from the onboarding card.
extra_keys: extra_keys:
position: position:
type: string
description: | description: |
A string that indicates the position of the toolbar TOP or BOTTOM. A string that indicates the position of the toolbar TOP or BOTTOM.
Default: BOTTOM Default: BOTTOM
@ -534,6 +535,7 @@ onboarding:
The tracking protection preference was chosen from the onboarding card. The tracking protection preference was chosen from the onboarding card.
extra_keys: extra_keys:
setting: setting:
type: string
description: | description: |
A string that indicates the Tracking Protection policy STANDARD A string that indicates the Tracking Protection policy STANDARD
or STRICT. Default: Toggle ON, STANDARD or STRICT. Default: Toggle ON, STANDARD
@ -561,6 +563,7 @@ onboarding:
The device theme was chosen using the theme picker onboarding card. The device theme was chosen using the theme picker onboarding card.
extra_keys: extra_keys:
theme: theme:
type: string
description: | description: |
A string that indicates the theme LIGHT, DARK, or FOLLOW DEVICE. A string that indicates the theme LIGHT, DARK, or FOLLOW DEVICE.
Default: FOLLOW DEVICE Default: FOLLOW DEVICE

@ -17,7 +17,6 @@ import org.mozilla.fenix.GleanMetrics.ErrorPage
import org.mozilla.fenix.GleanMetrics.Events import org.mozilla.fenix.GleanMetrics.Events
import org.mozilla.fenix.GleanMetrics.History import org.mozilla.fenix.GleanMetrics.History
import org.mozilla.fenix.GleanMetrics.Logins import org.mozilla.fenix.GleanMetrics.Logins
import org.mozilla.fenix.GleanMetrics.Onboarding
import org.mozilla.fenix.GleanMetrics.Pocket import org.mozilla.fenix.GleanMetrics.Pocket
import org.mozilla.fenix.GleanMetrics.SearchShortcuts import org.mozilla.fenix.GleanMetrics.SearchShortcuts
import org.mozilla.fenix.GleanMetrics.SearchTerms import org.mozilla.fenix.GleanMetrics.SearchTerms
@ -183,10 +182,6 @@ sealed class Event {
object StudiesSettings : Event() object StudiesSettings : Event()
object VoiceSearchTapped : Event() object VoiceSearchTapped : Event()
object SearchWidgetInstalled : Event() object SearchWidgetInstalled : Event()
object OnboardingAutoSignIn : Event()
object OnboardingManualSignIn : Event()
object OnboardingPrivacyNotice : Event()
object OnboardingFinish : Event()
object ChangedToDefaultBrowser : Event() object ChangedToDefaultBrowser : Event()
object DefaultBrowserNotifTapped : Event() object DefaultBrowserNotifTapped : Event()
@ -296,27 +291,6 @@ sealed class Event {
enum class Source { NEWTAB } enum class Source { NEWTAB }
} }
data class OnboardingToolbarPosition(val position: Position) : Event() {
enum class Position { TOP, BOTTOM }
override val extras: Map<Onboarding.prefToggledToolbarPositionKeys, String>?
get() = hashMapOf(Onboarding.prefToggledToolbarPositionKeys.position to position.name)
}
data class OnboardingTrackingProtection(val setting: Setting) : Event() {
enum class Setting { STRICT, STANDARD }
override val extras: Map<Onboarding.prefToggledTrackingProtKeys, String>?
get() = hashMapOf(Onboarding.prefToggledTrackingProtKeys.setting to setting.name)
}
data class OnboardingThemePicker(val theme: Theme) : Event() {
enum class Theme { LIGHT, DARK, FOLLOW_DEVICE }
override val extras: Map<Onboarding.prefToggledThemePickerKeys, String>?
get() = mapOf(Onboarding.prefToggledThemePickerKeys.theme to theme.name)
}
data class PreferenceToggled( data class PreferenceToggled(
val preferenceKey: String, val preferenceKey: String,
val enabled: Boolean, val enabled: Boolean,

@ -32,7 +32,6 @@ import org.mozilla.fenix.GleanMetrics.Logins
import org.mozilla.fenix.GleanMetrics.MediaNotification import org.mozilla.fenix.GleanMetrics.MediaNotification
import org.mozilla.fenix.GleanMetrics.MediaState import org.mozilla.fenix.GleanMetrics.MediaState
import org.mozilla.fenix.GleanMetrics.Metrics import org.mozilla.fenix.GleanMetrics.Metrics
import org.mozilla.fenix.GleanMetrics.Onboarding
import org.mozilla.fenix.GleanMetrics.Pings import org.mozilla.fenix.GleanMetrics.Pings
import org.mozilla.fenix.GleanMetrics.Pocket import org.mozilla.fenix.GleanMetrics.Pocket
import org.mozilla.fenix.GleanMetrics.Preferences import org.mozilla.fenix.GleanMetrics.Preferences
@ -603,30 +602,6 @@ private val Event.wrapper: EventWrapper<*>?
is Event.VoiceSearchTapped -> EventWrapper<NoExtraKeys>( is Event.VoiceSearchTapped -> EventWrapper<NoExtraKeys>(
{ VoiceSearch.tapped.record(it) } { VoiceSearch.tapped.record(it) }
) )
is Event.OnboardingPrivacyNotice -> EventWrapper<NoExtraKeys>(
{ Onboarding.privacyNotice.record(it) }
)
is Event.OnboardingManualSignIn -> EventWrapper<NoExtraKeys>(
{ Onboarding.fxaManualSignin.record(it) }
)
is Event.OnboardingAutoSignIn -> EventWrapper<NoExtraKeys>(
{ Onboarding.fxaAutoSignin.record(it) }
)
is Event.OnboardingFinish -> EventWrapper<NoExtraKeys>(
{ Onboarding.finish.record(it) }
)
is Event.OnboardingTrackingProtection -> EventWrapper(
{ Onboarding.prefToggledTrackingProt.record(it) },
{ Onboarding.prefToggledTrackingProtKeys.valueOf(it) }
)
is Event.OnboardingThemePicker -> EventWrapper(
{ Onboarding.prefToggledThemePicker.record(it) },
{ Onboarding.prefToggledThemePickerKeys.valueOf(it) }
)
is Event.OnboardingToolbarPosition -> EventWrapper(
{ Onboarding.prefToggledToolbarPosition.record(it) },
{ Onboarding.prefToggledToolbarPositionKeys.valueOf(it) }
)
is Event.AutoPlaySettingVisited -> EventWrapper<NoExtraKeys>( is Event.AutoPlaySettingVisited -> EventWrapper<NoExtraKeys>(
{ Autoplay.visitedSetting.record(it) } { Autoplay.visitedSetting.record(it) }

@ -6,10 +6,10 @@ package org.mozilla.fenix.home.sessioncontrol.viewholders.onboarding
import android.view.View import android.view.View
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import mozilla.components.service.glean.private.NoExtras
import org.mozilla.fenix.GleanMetrics.Onboarding
import org.mozilla.fenix.R import org.mozilla.fenix.R
import org.mozilla.fenix.components.metrics.Event
import org.mozilla.fenix.databinding.OnboardingFinishBinding import org.mozilla.fenix.databinding.OnboardingFinishBinding
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.home.sessioncontrol.OnboardingInteractor import org.mozilla.fenix.home.sessioncontrol.OnboardingInteractor
class OnboardingFinishViewHolder( class OnboardingFinishViewHolder(
@ -21,7 +21,7 @@ class OnboardingFinishViewHolder(
val binding = OnboardingFinishBinding.bind(view) val binding = OnboardingFinishBinding.bind(view)
binding.finishButton.setOnClickListener { binding.finishButton.setOnClickListener {
interactor.onStartBrowsingClicked() interactor.onStartBrowsingClicked()
it.context.components.analytics.metrics.track(Event.OnboardingFinish) Onboarding.finish.record(NoExtras())
} }
} }

@ -7,10 +7,10 @@ package org.mozilla.fenix.home.sessioncontrol.viewholders.onboarding
import android.view.View import android.view.View
import androidx.navigation.Navigation import androidx.navigation.Navigation
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import mozilla.components.service.glean.private.NoExtras
import org.mozilla.fenix.GleanMetrics.Onboarding
import org.mozilla.fenix.R import org.mozilla.fenix.R
import org.mozilla.fenix.components.metrics.Event
import org.mozilla.fenix.databinding.OnboardingManualSigninBinding import org.mozilla.fenix.databinding.OnboardingManualSigninBinding
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.home.HomeFragmentDirections import org.mozilla.fenix.home.HomeFragmentDirections
class OnboardingManualSignInViewHolder(view: View) : RecyclerView.ViewHolder(view) { class OnboardingManualSignInViewHolder(view: View) : RecyclerView.ViewHolder(view) {
@ -18,7 +18,7 @@ class OnboardingManualSignInViewHolder(view: View) : RecyclerView.ViewHolder(vie
init { init {
binding.fxaSignInButton.setOnClickListener { binding.fxaSignInButton.setOnClickListener {
it.context.components.analytics.metrics.track(Event.OnboardingManualSignIn) Onboarding.fxaManualSignin.record(NoExtras())
val directions = HomeFragmentDirections.actionGlobalTurnOnSync() val directions = HomeFragmentDirections.actionGlobalTurnOnSync()
Navigation.findNavController(view).navigate(directions) Navigation.findNavController(view).navigate(directions)

@ -6,10 +6,10 @@ package org.mozilla.fenix.home.sessioncontrol.viewholders.onboarding
import android.view.View import android.view.View
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import mozilla.components.service.glean.private.NoExtras
import org.mozilla.fenix.GleanMetrics.Onboarding
import org.mozilla.fenix.R import org.mozilla.fenix.R
import org.mozilla.fenix.components.metrics.Event
import org.mozilla.fenix.databinding.OnboardingPrivacyNoticeBinding import org.mozilla.fenix.databinding.OnboardingPrivacyNoticeBinding
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.home.sessioncontrol.OnboardingInteractor import org.mozilla.fenix.home.sessioncontrol.OnboardingInteractor
class OnboardingPrivacyNoticeViewHolder( class OnboardingPrivacyNoticeViewHolder(
@ -25,7 +25,7 @@ class OnboardingPrivacyNoticeViewHolder(
binding.descriptionText.text = view.context.getString(R.string.onboarding_privacy_notice_description2, appName) binding.descriptionText.text = view.context.getString(R.string.onboarding_privacy_notice_description2, appName)
binding.readButton.setOnClickListener { binding.readButton.setOnClickListener {
it.context.components.analytics.metrics.track(Event.OnboardingPrivacyNotice) Onboarding.privacyNotice.record(NoExtras())
interactor.onReadPrivacyNoticeClicked() interactor.onReadPrivacyNoticeClicked()
} }
} }

@ -9,9 +9,8 @@ import android.os.Build.VERSION.SDK_INT
import android.view.View import android.view.View
import androidx.appcompat.app.AppCompatDelegate import androidx.appcompat.app.AppCompatDelegate
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import org.mozilla.fenix.GleanMetrics.Onboarding
import org.mozilla.fenix.R import org.mozilla.fenix.R
import org.mozilla.fenix.components.metrics.Event
import org.mozilla.fenix.components.metrics.Event.OnboardingThemePicker.Theme
import org.mozilla.fenix.databinding.OnboardingThemePickerBinding import org.mozilla.fenix.databinding.OnboardingThemePickerBinding
import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.components
import org.mozilla.fenix.ext.settings import org.mozilla.fenix.ext.settings
@ -41,12 +40,20 @@ class OnboardingThemePickerViewHolder(view: View) : RecyclerView.ViewHolder(view
radioDarkTheme.addIllustration(binding.themeDarkImage) radioDarkTheme.addIllustration(binding.themeDarkImage)
binding.themeDarkImage.setOnClickListener { binding.themeDarkImage.setOnClickListener {
it.context.components.analytics.metrics.track(Event.OnboardingThemePicker(Theme.DARK)) Onboarding.prefToggledThemePicker.record(
Onboarding.PrefToggledThemePickerExtra(
Theme.DARK.name
)
)
radioDarkTheme.performClick() radioDarkTheme.performClick()
} }
binding.themeLightImage.setOnClickListener { binding.themeLightImage.setOnClickListener {
it.context.components.analytics.metrics.track(Event.OnboardingThemePicker(Theme.LIGHT)) Onboarding.prefToggledThemePicker.record(
Onboarding.PrefToggledThemePickerExtra(
Theme.LIGHT.name
)
)
radioLightTheme.performClick() radioLightTheme.performClick()
} }
@ -55,26 +62,38 @@ class OnboardingThemePickerViewHolder(view: View) : RecyclerView.ViewHolder(view
binding.clickableRegionAutomatic.contentDescription = "$automaticTitle $automaticSummary" binding.clickableRegionAutomatic.contentDescription = "$automaticTitle $automaticSummary"
binding.clickableRegionAutomatic.setOnClickListener { binding.clickableRegionAutomatic.setOnClickListener {
it.context.components.analytics.metrics Onboarding.prefToggledThemePicker.record(
.track(Event.OnboardingThemePicker(Theme.FOLLOW_DEVICE)) Onboarding.PrefToggledThemePickerExtra(
Theme.FOLLOW_DEVICE.name
)
)
radioFollowDeviceTheme.performClick() radioFollowDeviceTheme.performClick()
} }
radioLightTheme.onClickListener { radioLightTheme.onClickListener {
view.context.components.analytics.metrics Onboarding.prefToggledThemePicker.record(
.track(Event.OnboardingThemePicker(Theme.LIGHT)) Onboarding.PrefToggledThemePickerExtra(
Theme.LIGHT.name
)
)
setNewTheme(AppCompatDelegate.MODE_NIGHT_NO) setNewTheme(AppCompatDelegate.MODE_NIGHT_NO)
} }
radioDarkTheme.onClickListener { radioDarkTheme.onClickListener {
view.context.components.analytics.metrics Onboarding.prefToggledThemePicker.record(
.track(Event.OnboardingThemePicker(Theme.DARK)) Onboarding.PrefToggledThemePickerExtra(
Theme.DARK.name
)
)
setNewTheme(AppCompatDelegate.MODE_NIGHT_YES) setNewTheme(AppCompatDelegate.MODE_NIGHT_YES)
} }
radioFollowDeviceTheme.onClickListener { radioFollowDeviceTheme.onClickListener {
view.context.components.analytics.metrics Onboarding.prefToggledThemePicker.record(
.track(Event.OnboardingThemePicker(Theme.FOLLOW_DEVICE)) Onboarding.PrefToggledThemePickerExtra(
Theme.FOLLOW_DEVICE.name
)
)
if (SDK_INT >= Build.VERSION_CODES.P) { if (SDK_INT >= Build.VERSION_CODES.P) {
setNewTheme(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM) setNewTheme(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
} else { } else {
@ -109,5 +128,7 @@ class OnboardingThemePickerViewHolder(view: View) : RecyclerView.ViewHolder(view
companion object { companion object {
const val LAYOUT_ID = R.layout.onboarding_theme_picker const val LAYOUT_ID = R.layout.onboarding_theme_picker
// The theme used for telemetry
enum class Theme { LIGHT, DARK, FOLLOW_DEVICE }
} }
} }

@ -6,9 +6,8 @@ package org.mozilla.fenix.home.sessioncontrol.viewholders.onboarding
import android.view.View import android.view.View
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import org.mozilla.fenix.GleanMetrics.Onboarding
import org.mozilla.fenix.R import org.mozilla.fenix.R
import org.mozilla.fenix.components.metrics.Event
import org.mozilla.fenix.components.metrics.Event.OnboardingToolbarPosition.Position
import org.mozilla.fenix.components.toolbar.ToolbarPosition import org.mozilla.fenix.components.toolbar.ToolbarPosition
import org.mozilla.fenix.databinding.OnboardingToolbarPositionPickerBinding import org.mozilla.fenix.databinding.OnboardingToolbarPositionPickerBinding
import org.mozilla.fenix.ext.asActivity import org.mozilla.fenix.ext.asActivity
@ -18,8 +17,6 @@ import org.mozilla.fenix.utils.view.addToRadioGroup
class OnboardingToolbarPositionPickerViewHolder(view: View) : RecyclerView.ViewHolder(view) { class OnboardingToolbarPositionPickerViewHolder(view: View) : RecyclerView.ViewHolder(view) {
private val metrics = view.context.components.analytics.metrics
init { init {
val binding = OnboardingToolbarPositionPickerBinding.bind(view) val binding = OnboardingToolbarPositionPickerBinding.bind(view)
@ -39,29 +36,47 @@ class OnboardingToolbarPositionPickerViewHolder(view: View) : RecyclerView.ViewH
radio.updateRadioValue(true) radio.updateRadioValue(true)
radioBottomToolbar.onClickListener { radioBottomToolbar.onClickListener {
metrics.track(Event.OnboardingToolbarPosition(Position.BOTTOM)) Onboarding.prefToggledToolbarPosition.record(
Onboarding.PrefToggledToolbarPositionExtra(
Position.BOTTOM.name
)
)
itemView.context.asActivity()?.recreate() itemView.context.asActivity()?.recreate()
} }
binding.toolbarBottomImage.setOnClickListener { binding.toolbarBottomImage.setOnClickListener {
metrics.track(Event.OnboardingToolbarPosition(Position.BOTTOM)) Onboarding.prefToggledToolbarPosition.record(
Onboarding.PrefToggledToolbarPositionExtra(
Position.BOTTOM.name
)
)
radioBottomToolbar.performClick() radioBottomToolbar.performClick()
} }
radioTopToolbar.onClickListener { radioTopToolbar.onClickListener {
metrics.track(Event.OnboardingToolbarPosition(Position.TOP)) Onboarding.prefToggledToolbarPosition.record(
Onboarding.PrefToggledToolbarPositionExtra(
Position.TOP.name
)
)
itemView.context.asActivity()?.recreate() itemView.context.asActivity()?.recreate()
} }
binding.toolbarTopImage.setOnClickListener { binding.toolbarTopImage.setOnClickListener {
metrics.track(Event.OnboardingToolbarPosition(Position.TOP)) Onboarding.prefToggledToolbarPosition.record(
Onboarding.PrefToggledToolbarPositionExtra(
Position.TOP.name
)
)
radioTopToolbar.performClick() radioTopToolbar.performClick()
} }
} }
companion object { companion object {
const val LAYOUT_ID = R.layout.onboarding_toolbar_position_picker const val LAYOUT_ID = R.layout.onboarding_toolbar_position_picker
// Position of the toolbar used for telemetry
enum class Position { TOP, BOTTOM }
} }
} }

@ -6,9 +6,8 @@ package org.mozilla.fenix.home.sessioncontrol.viewholders.onboarding
import android.view.View import android.view.View
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import org.mozilla.fenix.GleanMetrics.Onboarding
import org.mozilla.fenix.R import org.mozilla.fenix.R
import org.mozilla.fenix.components.metrics.Event
import org.mozilla.fenix.components.metrics.Event.OnboardingTrackingProtection.Setting
import org.mozilla.fenix.databinding.OnboardingTrackingProtectionBinding import org.mozilla.fenix.databinding.OnboardingTrackingProtectionBinding
import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.components
import org.mozilla.fenix.ext.settings import org.mozilla.fenix.ext.settings
@ -50,14 +49,20 @@ class OnboardingTrackingProtectionViewHolder(view: View) : RecyclerView.ViewHold
standardTrackingProtection.onClickListener { standardTrackingProtection.onClickListener {
updateTrackingProtectionPolicy() updateTrackingProtectionPolicy()
itemView.context.components.analytics.metrics Onboarding.prefToggledTrackingProt.record(
.track(Event.OnboardingTrackingProtection(Setting.STANDARD)) Onboarding.PrefToggledTrackingProtExtra(
Settings.STANDARD.name
)
)
} }
strictTrackingProtection.onClickListener { strictTrackingProtection.onClickListener {
updateTrackingProtectionPolicy() updateTrackingProtectionPolicy()
itemView.context.components.analytics.metrics Onboarding.prefToggledTrackingProt.record(
.track(Event.OnboardingTrackingProtection(Setting.STRICT)) Onboarding.PrefToggledTrackingProtExtra(
Settings.STRICT.name
)
)
} }
} }
@ -77,5 +82,7 @@ class OnboardingTrackingProtectionViewHolder(view: View) : RecyclerView.ViewHold
companion object { companion object {
const val LAYOUT_ID = R.layout.onboarding_tracking_protection const val LAYOUT_ID = R.layout.onboarding_tracking_protection
// Tracking protection policy types used for telemetry
enum class Settings { STRICT, STANDARD }
} }
} }

@ -9,9 +9,15 @@ import io.mockk.every
import io.mockk.mockk import io.mockk.mockk
import io.mockk.verify import io.mockk.verify
import mozilla.components.support.test.robolectric.testContext import mozilla.components.support.test.robolectric.testContext
import mozilla.telemetry.glean.testing.GleanTestRule
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNull
import org.junit.Assert.assertTrue
import org.junit.Before import org.junit.Before
import org.junit.Rule
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import org.mozilla.fenix.GleanMetrics.Onboarding
import org.mozilla.fenix.databinding.OnboardingFinishBinding import org.mozilla.fenix.databinding.OnboardingFinishBinding
import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.components
import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.helpers.FenixRobolectricTestRunner
@ -20,6 +26,9 @@ import org.mozilla.fenix.home.sessioncontrol.OnboardingInteractor
@RunWith(FenixRobolectricTestRunner::class) @RunWith(FenixRobolectricTestRunner::class)
class OnboardingFinishViewHolderTest { class OnboardingFinishViewHolderTest {
@get:Rule
val gleanTestRule = GleanTestRule(testContext)
private lateinit var binding: OnboardingFinishBinding private lateinit var binding: OnboardingFinishBinding
private lateinit var interactor: OnboardingInteractor private lateinit var interactor: OnboardingInteractor
@ -36,5 +45,9 @@ class OnboardingFinishViewHolderTest {
binding.finishButton.performClick() binding.finishButton.performClick()
verify { interactor.onStartBrowsingClicked() } verify { interactor.onStartBrowsingClicked() }
// Check if the event was recorded
assertTrue(Onboarding.finish.testHasValue())
assertEquals(1, Onboarding.finish.testGetValue().size)
assertNull(Onboarding.finish.testGetValue().single().extra)
} }
} }

@ -14,11 +14,15 @@ import io.mockk.mockkStatic
import io.mockk.unmockkStatic import io.mockk.unmockkStatic
import io.mockk.verify import io.mockk.verify
import mozilla.components.support.test.robolectric.testContext import mozilla.components.support.test.robolectric.testContext
import mozilla.telemetry.glean.testing.GleanTestRule
import org.junit.After import org.junit.After
import org.junit.Assert
import org.junit.Assert.assertEquals import org.junit.Assert.assertEquals
import org.junit.Before import org.junit.Before
import org.junit.Rule
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import org.mozilla.fenix.GleanMetrics.Onboarding
import org.mozilla.fenix.R import org.mozilla.fenix.R
import org.mozilla.fenix.databinding.OnboardingManualSigninBinding import org.mozilla.fenix.databinding.OnboardingManualSigninBinding
import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.components
@ -28,6 +32,9 @@ import org.mozilla.fenix.home.HomeFragmentDirections
@RunWith(FenixRobolectricTestRunner::class) @RunWith(FenixRobolectricTestRunner::class)
class OnboardingManualSignInViewHolderTest { class OnboardingManualSignInViewHolderTest {
@get:Rule
val gleanTestRule = GleanTestRule(testContext)
private lateinit var binding: OnboardingManualSigninBinding private lateinit var binding: OnboardingManualSigninBinding
private lateinit var navController: NavController private lateinit var navController: NavController
private lateinit var itemView: ViewGroup private lateinit var itemView: ViewGroup
@ -65,5 +72,9 @@ class OnboardingManualSignInViewHolderTest {
binding.fxaSignInButton.performClick() binding.fxaSignInButton.performClick()
verify { navController.navigate(HomeFragmentDirections.actionGlobalTurnOnSync()) } verify { navController.navigate(HomeFragmentDirections.actionGlobalTurnOnSync()) }
// Check if the event was recorded
Assert.assertTrue(Onboarding.fxaManualSignin.testHasValue())
assertEquals(1, Onboarding.fxaManualSignin.testGetValue().size)
Assert.assertNull(Onboarding.fxaManualSignin.testGetValue().single().extra)
} }
} }

@ -10,9 +10,15 @@ import io.mockk.every
import io.mockk.mockk import io.mockk.mockk
import io.mockk.verify import io.mockk.verify
import mozilla.components.support.test.robolectric.testContext import mozilla.components.support.test.robolectric.testContext
import mozilla.telemetry.glean.testing.GleanTestRule
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNull
import org.junit.Assert.assertTrue
import org.junit.Before import org.junit.Before
import org.junit.Rule
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import org.mozilla.fenix.GleanMetrics.Onboarding
import org.mozilla.fenix.R import org.mozilla.fenix.R
import org.mozilla.fenix.databinding.OnboardingPrivacyNoticeBinding import org.mozilla.fenix.databinding.OnboardingPrivacyNoticeBinding
import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.components
@ -22,6 +28,9 @@ import org.mozilla.fenix.home.sessioncontrol.OnboardingInteractor
@RunWith(FenixRobolectricTestRunner::class) @RunWith(FenixRobolectricTestRunner::class)
class OnboardingPrivacyNoticeViewHolderTest { class OnboardingPrivacyNoticeViewHolderTest {
@get:Rule
val gleanTestRule = GleanTestRule(testContext)
private lateinit var binding: OnboardingPrivacyNoticeBinding private lateinit var binding: OnboardingPrivacyNoticeBinding
private lateinit var interactor: OnboardingInteractor private lateinit var interactor: OnboardingInteractor
@ -39,5 +48,9 @@ class OnboardingPrivacyNoticeViewHolderTest {
binding.readButton.performClick() binding.readButton.performClick()
verify { interactor.onReadPrivacyNoticeClicked() } verify { interactor.onReadPrivacyNoticeClicked() }
// Check if the event was recorded
assertTrue(Onboarding.privacyNotice.testHasValue())
assertEquals(1, Onboarding.privacyNotice.testGetValue().size)
assertNull(Onboarding.privacyNotice.testGetValue().single().extra)
} }
} }

@ -8,11 +8,15 @@ import android.view.LayoutInflater
import io.mockk.every import io.mockk.every
import io.mockk.mockk import io.mockk.mockk
import mozilla.components.support.test.robolectric.testContext import mozilla.components.support.test.robolectric.testContext
import mozilla.telemetry.glean.testing.GleanTestRule
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue import org.junit.Assert.assertTrue
import org.junit.Before import org.junit.Before
import org.junit.Rule
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import org.mozilla.fenix.GleanMetrics.Onboarding
import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.components
import org.mozilla.fenix.components.toolbar.ToolbarPosition import org.mozilla.fenix.components.toolbar.ToolbarPosition
import org.mozilla.fenix.databinding.OnboardingToolbarPositionPickerBinding import org.mozilla.fenix.databinding.OnboardingToolbarPositionPickerBinding
@ -22,6 +26,9 @@ import org.mozilla.fenix.utils.Settings
@RunWith(FenixRobolectricTestRunner::class) @RunWith(FenixRobolectricTestRunner::class)
class OnboardingToolbarPositionPickerViewHolderTest { class OnboardingToolbarPositionPickerViewHolderTest {
@get:Rule
val gleanTestRule = GleanTestRule(testContext)
private lateinit var binding: OnboardingToolbarPositionPickerBinding private lateinit var binding: OnboardingToolbarPositionPickerBinding
private lateinit var settings: Settings private lateinit var settings: Settings
@ -56,4 +63,34 @@ class OnboardingToolbarPositionPickerViewHolderTest {
assertTrue(binding.toolbarTopRadioButton.isChecked) assertTrue(binding.toolbarTopRadioButton.isChecked)
assertFalse(binding.toolbarBottomRadioButton.isChecked) assertFalse(binding.toolbarBottomRadioButton.isChecked)
} }
@Test
fun `WHEN the top radio button is clicked THEN the proper event is recorded`() {
every { settings.toolbarPosition } returns ToolbarPosition.BOTTOM
OnboardingToolbarPositionPickerViewHolder(binding.root)
binding.toolbarTopImage.performClick()
assertTrue(Onboarding.prefToggledToolbarPosition.testHasValue())
assertEquals(
OnboardingToolbarPositionPickerViewHolder.Companion.Position.TOP.name,
Onboarding.prefToggledToolbarPosition.testGetValue()
.last().extra?.get("position")
)
}
@Test
fun `WHEN the bottom radio button is clicked THEN the proper event is recorded`() {
every { settings.toolbarPosition } returns ToolbarPosition.TOP
OnboardingToolbarPositionPickerViewHolder(binding.root)
binding.toolbarBottomImage.performClick()
assertTrue(Onboarding.prefToggledToolbarPosition.testHasValue())
assertEquals(
OnboardingToolbarPositionPickerViewHolder.Companion.Position.BOTTOM.name,
Onboarding.prefToggledToolbarPosition.testGetValue()
.last().extra?.get("position")
)
}
} }

Loading…
Cancel
Save