@@ -10,8 +10,11 @@ import com.braintreepayments.api.card.CardClient
1010import com.braintreepayments.api.card.CardNonce
1111import com.braintreepayments.api.card.CardResult
1212import com.braintreepayments.api.card.CardTokenizeCallback
13+ import com.braintreepayments.api.core.AnalyticsClient
14+ import com.braintreepayments.api.core.AnalyticsEventParams
1315import com.braintreepayments.api.core.BraintreeException
1416import com.braintreepayments.api.uicomponents.R
17+ import com.braintreepayments.api.uicomponents.UIComponentsAnalytics
1518import com.braintreepayments.api.uicomponents.util.CoroutineTestRule
1619import io.mockk.Runs
1720import io.mockk.every
@@ -44,6 +47,7 @@ class CardFieldsUnitTest {
4447 private lateinit var activity: Activity
4548 private lateinit var viewModel: CardFieldsViewModel
4649 private val cardClient: CardClient = mockk(relaxed = true )
50+ private val analyticsClient: AnalyticsClient = mockk(relaxed = true )
4751
4852 // Controllable backing flows so each test can drive the ViewModel's outputs directly.
4953 private val cardNumberValidation = MutableStateFlow <ValidationResult >(ValidationResult .Validating )
@@ -64,10 +68,11 @@ class CardFieldsUnitTest {
6468 every { viewModel.isFormValid } returns isFormValid
6569 }
6670
67- private fun createCardFields () = CardFields (activity, viewModel = viewModel)
71+ private fun createCardFields () =
72+ CardFields (activity, viewModel = viewModel, analyticsClient = analyticsClient)
6873
6974 private fun createCardFieldsWithClient () =
70- CardFields (activity, viewModel = viewModel, cardClient = cardClient)
75+ CardFields (activity, viewModel = viewModel, cardClient = cardClient, analyticsClient = analyticsClient )
7176
7277 private fun CardFields.attach () = activity.setContentView(this )
7378
@@ -476,6 +481,53 @@ class CardFieldsUnitTest {
476481
477482 // endregion
478483
484+ // region Analytics
485+
486+ @Test
487+ fun `initialize sends the card fields presented event` () {
488+ val cardFields = createCardFields()
489+
490+ cardFields.initialize(" fake-authorization" )
491+
492+ verify {
493+ analyticsClient.sendEvent(
494+ UIComponentsAnalytics .CARD_FIELDS_PRESENTED ,
495+ AnalyticsEventParams (uiType = UIComponentsAnalytics .UI_TYPE_XML_VIEW )
496+ )
497+ }
498+ }
499+
500+ @Test
501+ fun `submit sends the card fields validated event` () {
502+ val cardFields = createCardFieldsWithClient()
503+
504+ cardFields.submit()
505+
506+ verify {
507+ analyticsClient.sendEvent(
508+ UIComponentsAnalytics .CARD_FIELDS_VALIDATED ,
509+ AnalyticsEventParams (uiType = UIComponentsAnalytics .UI_TYPE_XML_VIEW )
510+ )
511+ }
512+ }
513+
514+ @Test
515+ fun `submit before initialize does not send the validated event` () {
516+ val cardFields = createCardFields()
517+ cardFields.setCardFieldsResultCallback { }
518+
519+ cardFields.submit()
520+
521+ verify(exactly = 0 ) {
522+ analyticsClient.sendEvent(
523+ UIComponentsAnalytics .CARD_FIELDS_VALIDATED ,
524+ any()
525+ )
526+ }
527+ }
528+
529+ // endregion
530+
479531 private fun EditText.lengthFilterMax (): Int =
480532 filters.filterIsInstance<InputFilter .LengthFilter >().first().max
481533}
0 commit comments