Skip to content

Commit c75b329

Browse files
committed
Bug 2003897 - Add telemetry for credit card editor actions r=android-reviewers,fmasalha
This patch introduces Glean telemetry for user interactions within the credit card editor. Metrics are now recorded for the following actions: - `CreditCards.saved`: When a new credit card is successfully saved. - `CreditCards.modified`: When an existing credit card is updated. - `CreditCards.deleted`: When a credit card is deleted. Differential Revision: https://phabricator.services.mozilla.com/D274981
1 parent c21e42d commit c75b329

File tree

2 files changed

+65
-0
lines changed

2 files changed

+65
-0
lines changed

mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/creditcards/ui/CreditCardEditorMiddleware.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ import mozilla.components.concept.storage.UpdatableCreditCardFields
1717
import mozilla.components.lib.state.Middleware
1818
import mozilla.components.lib.state.MiddlewareContext
1919
import mozilla.components.support.utils.creditCardIIN
20+
import mozilla.telemetry.glean.private.NoExtras
21+
import org.mozilla.fenix.GleanMetrics.CreditCards
2022
import org.mozilla.fenix.settings.creditcards.last4Digits
2123
import org.mozilla.fenix.settings.creditcards.ui.CreditCardEditorAction.DeleteDialogAction
2224

@@ -69,6 +71,7 @@ internal class CreditCardEditorMiddleware(
6971
withContext(mainDispatcher) {
7072
navigateBack()
7173
}
74+
CreditCards.deleted.add()
7275
}
7376
}
7477

@@ -114,6 +117,7 @@ internal class CreditCardEditorMiddleware(
114117
withContext(mainDispatcher) {
115118
navigateBack()
116119
}
120+
CreditCards.modified.record(NoExtras())
117121
}
118122
}
119123

@@ -133,6 +137,7 @@ internal class CreditCardEditorMiddleware(
133137
withContext(mainDispatcher) {
134138
navigateBack()
135139
}
140+
CreditCards.saved.add()
136141
}
137142
}
138143

mobile/android/fenix/app/src/test/java/org/mozilla/fenix/settings/creditcards/ui/CreditCardEditorStoreTest.kt

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,28 @@ import mozilla.components.concept.storage.CreditCardNumber
1313
import mozilla.components.concept.storage.CreditCardsAddressesStorage
1414
import mozilla.components.concept.storage.NewCreditCardFields
1515
import mozilla.components.concept.storage.UpdatableCreditCardFields
16+
import mozilla.components.support.test.robolectric.testContext
1617
import mozilla.components.support.test.rule.MainCoroutineRule
1718
import mozilla.components.support.utils.CreditCardNetworkType
1819
import org.junit.Assert.assertEquals
1920
import org.junit.Assert.assertFalse
21+
import org.junit.Assert.assertNotNull
2022
import org.junit.Assert.assertTrue
2123
import org.junit.Rule
2224
import org.junit.Test
2325
import org.junit.runner.RunWith
26+
import org.mozilla.fenix.GleanMetrics.CreditCards
27+
import org.mozilla.fenix.helpers.FenixGleanTestRule
2428

2529
@RunWith(AndroidJUnit4::class)
2630
class CreditCardEditorStoreTest {
2731

2832
@get:Rule
2933
val coroutinesTestRule = MainCoroutineRule()
34+
35+
@get:Rule
36+
val gleanTestRule = FenixGleanTestRule(testContext)
37+
3038
private val creditCardsStorage = FakeCreditCardsStorage()
3139
private val calendarDataProvider = FakeCalendarDataProvider(
3240
expectedMonths = listOf("January", "February", "March"),
@@ -300,6 +308,58 @@ class CreditCardEditorStoreTest {
300308
)
301309
}
302310

311+
@Test
312+
fun `WHEN a card is deleted, then a telemetry event is sent`() = runTest {
313+
val store = makeStore(
314+
state = createState(guid = "card-id"),
315+
)
316+
317+
store.dispatch(CreditCardEditorAction.DeleteDialogAction.Confirm)
318+
319+
// verify that the event is sent
320+
assertNotNull(CreditCards.deleted.testGetValue())
321+
}
322+
323+
@Test
324+
fun `WHEN a card is saved, THEN a telemetry event is sent`() = runTest {
325+
val store = makeStore(
326+
state = createState(
327+
nameOnCard = "Jane Doe",
328+
cardNumber = "5555444433331111",
329+
expiryYears = listOf("2025", "2026", "2027"),
330+
selectedExpiryYearIndex = 1,
331+
expiryMonths = listOf("January", "February", "March"),
332+
selectedExpiryMonthIndex = 0,
333+
),
334+
)
335+
336+
store.dispatch(CreditCardEditorAction.Save)
337+
338+
// verify that the event is sent
339+
assertNotNull(CreditCards.saved.testGetValue())
340+
}
341+
342+
@Test
343+
fun `WHEN a card is updated, THEN a telemetry event is sent`() = runTest {
344+
val store = makeStore(
345+
state = createState(
346+
guid = "1234",
347+
inEditMode = true,
348+
nameOnCard = "Jane Doe",
349+
cardNumber = "5555444433331111",
350+
expiryYears = listOf("2025", "2026", "2027"),
351+
selectedExpiryYearIndex = 1,
352+
expiryMonths = listOf("January", "February", "March"),
353+
selectedExpiryMonthIndex = 0,
354+
),
355+
)
356+
357+
store.dispatch(CreditCardEditorAction.Save)
358+
359+
// verify that the event is sent
360+
assertNotNull(CreditCards.modified.testGetValue())
361+
}
362+
303363
private fun makeStore(
304364
state: CreditCardEditorState = createState(),
305365
monthsProvider: CalendarDataProvider = calendarDataProvider,

0 commit comments

Comments
 (0)