@@ -24,6 +24,7 @@ import androidx.room.Room
24
24
import androidx.test.platform.app.InstrumentationRegistry
25
25
import com.duckduckgo.app.browser.DuckDuckGoUrlDetectorImpl
26
26
import com.duckduckgo.app.browser.R
27
+ import com.duckduckgo.app.browser.refreshpixels.RefreshPixelSender
27
28
import com.duckduckgo.app.cta.db.DismissedCtaDao
28
29
import com.duckduckgo.app.cta.model.CtaId
29
30
import com.duckduckgo.app.cta.model.DismissedCta
@@ -115,6 +116,8 @@ class CtaViewModelTest {
115
116
116
117
private val mockBrokenSitePrompt: BrokenSitePrompt = mock()
117
118
119
+ private val mockRefreshPixelSender: RefreshPixelSender = mock()
120
+
118
121
private val mockUserBrowserProperties: UserBrowserProperties = mock()
119
122
120
123
private val requiredDaxOnboardingCtas: List <CtaId > = listOf (
@@ -151,6 +154,7 @@ class CtaViewModelTest {
151
154
whenever(mockDuckPlayer.isSimulatedYoutubeNoCookie(any())).thenReturn(false )
152
155
whenever(mockBrokenSitePrompt.shouldShowBrokenSitePrompt(any())).thenReturn(false )
153
156
whenever(mockBrokenSitePrompt.isFeatureEnabled()).thenReturn(false )
157
+ whenever(mockBrokenSitePrompt.getUserRefreshesCount()).thenReturn(emptySet())
154
158
whenever(mockSubscriptions.isEligible()).thenReturn(false )
155
159
156
160
testee = CtaViewModel (
@@ -169,6 +173,7 @@ class CtaViewModelTest {
169
173
subscriptions = mockSubscriptions,
170
174
duckPlayer = mockDuckPlayer,
171
175
brokenSitePrompt = mockBrokenSitePrompt,
176
+ refreshPixelSender = mockRefreshPixelSender,
172
177
userBrowserProperties = mockUserBrowserProperties,
173
178
)
174
179
}
@@ -279,7 +284,7 @@ class CtaViewModelTest {
279
284
280
285
@Test
281
286
fun whenRefreshCtaWhileBrowsingAndSiteIsNullThenReturnNull () = runTest {
282
- val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = true , site = null , showBrokenSitePrompt = false )
287
+ val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = true , site = null )
283
288
assertNull(value)
284
289
}
285
290
@@ -288,25 +293,28 @@ class CtaViewModelTest {
288
293
whenever(mockSettingsDataStore.hideTips).thenReturn(true )
289
294
val site = site(url = " http://www.facebook.com" , entity = TestEntity (" Facebook" , " Facebook" , 9.0 ))
290
295
291
- val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = true , site = site, showBrokenSitePrompt = false )
296
+ val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = true , site = site)
292
297
assertNull(value)
293
298
}
294
299
295
300
@Test
296
- fun whenRefreshCtaWhileBrowsingAndHideTipsIsTrueAndShouldShowBrokenSitePromptThenReturnBrokenSitePrompt () = runTest {
301
+ fun whenRefreshCtaWhileBrowsingAndHideTipsIsTrueAndShouldShowBrokenSitePromptThenReturnBrokenSitePromptAndFireRefreshPixels () = runTest {
297
302
whenever(mockSettingsDataStore.hideTips).thenReturn(true )
298
303
val site = site(url = " http://www.facebook.com" , entity = TestEntity (" Facebook" , " Facebook" , 9.0 ))
304
+ whenever(mockBrokenSitePrompt.getUserRefreshesCount()).thenReturn(setOf (3 ))
305
+ whenever(mockBrokenSitePrompt.shouldShowBrokenSitePrompt(any())).thenReturn(true )
299
306
300
- val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = true , site = site, showBrokenSitePrompt = true )
307
+ val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = true , site = site)
301
308
assertTrue(value is BrokenSitePromptDialogCta )
309
+ verify(mockRefreshPixelSender).onRefreshPatternDetected(setOf (3 ))
302
310
}
303
311
304
312
@Test
305
313
fun whenRefreshCtaOnHomeTabAndHideTipsIsTrueAndWidgetCompatibleThenReturnWidgetCta () = runTest {
306
314
whenever(mockSettingsDataStore.hideTips).thenReturn(true )
307
315
whenever(mockWidgetCapabilities.supportsAutomaticWidgetAdd).thenReturn(true )
308
316
309
- val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = false , showBrokenSitePrompt = false )
317
+ val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = false )
310
318
assertTrue(value is HomePanelCta .AddWidgetAuto )
311
319
}
312
320
@@ -316,7 +324,7 @@ class CtaViewModelTest {
316
324
whenever(mockUserAllowListRepository.isDomainInUserAllowList(any())).thenReturn(true )
317
325
val site = site(url = " http://www.facebook.com" , entity = TestEntity (" Facebook" , " Facebook" , 9.0 ))
318
326
319
- val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = true , site = site, showBrokenSitePrompt = false )
327
+ val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = true , site = site)
320
328
assertNull(value)
321
329
}
322
330
@@ -326,7 +334,7 @@ class CtaViewModelTest {
326
334
whenever(mockWidgetCapabilities.supportsAutomaticWidgetAdd).thenReturn(true )
327
335
whenever(mockWidgetCapabilities.hasInstalledWidgets).thenReturn(false )
328
336
329
- val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = false , showBrokenSitePrompt = false )
337
+ val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = false )
330
338
assertTrue(value is HomePanelCta .AddWidgetAuto )
331
339
}
332
340
@@ -336,7 +344,7 @@ class CtaViewModelTest {
336
344
whenever(mockWidgetCapabilities.supportsAutomaticWidgetAdd).thenReturn(false )
337
345
whenever(mockWidgetCapabilities.hasInstalledWidgets).thenReturn(false )
338
346
339
- val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = false , showBrokenSitePrompt = false )
347
+ val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = false )
340
348
assertTrue(value is HomePanelCta .AddWidgetInstructions )
341
349
}
342
350
@@ -351,7 +359,7 @@ class CtaViewModelTest {
351
359
" Facebook" ,
352
360
)
353
361
354
- val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = true , site = site, showBrokenSitePrompt = false ) as OnboardingDaxDialogCta
362
+ val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = true , site = site) as OnboardingDaxDialogCta
355
363
356
364
assertTrue(value is OnboardingDaxDialogCta .DaxMainNetworkCta )
357
365
val actualText = (value as OnboardingDaxDialogCta .DaxMainNetworkCta ).getTrackersDescription(context)
@@ -362,7 +370,7 @@ class CtaViewModelTest {
362
370
fun whenRefreshCtaWhileBrowsingOnSiteOwnedByMajorTrackerThenReturnNetworkCta () = runTest {
363
371
givenDaxOnboardingActive()
364
372
val site = site(url = " http://m.instagram.com" , entity = TestEntity (" Facebook" , " Facebook" , 9.0 ))
365
- val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = true , site = site, showBrokenSitePrompt = false ) as OnboardingDaxDialogCta
373
+ val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = true , site = site) as OnboardingDaxDialogCta
366
374
val expectedCtaText = context.resources.getString(
367
375
R .string.daxMainNetworkOwnedCtaText,
368
376
" Facebook" ,
@@ -388,7 +396,7 @@ class CtaViewModelTest {
388
396
type = TrackerType .OTHER ,
389
397
)
390
398
val site = site(url = " http://www.cnn.com" , trackerCount = 1 , events = listOf (trackingEvent))
391
- val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = true , site = site, showBrokenSitePrompt = false )
399
+ val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = true , site = site)
392
400
393
401
assertTrue(value is OnboardingDaxDialogCta .DaxTrackersBlockedCta )
394
402
}
@@ -406,7 +414,7 @@ class CtaViewModelTest {
406
414
type = TrackerType .OTHER ,
407
415
)
408
416
val site = site(url = " http://www.cnn.com" , trackerCount = 1 , events = listOf (trackingEvent))
409
- val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = true , site = site, showBrokenSitePrompt = false )
417
+ val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = true , site = site)
410
418
411
419
assertTrue(value is OnboardingDaxDialogCta .DaxTrackersBlockedCta )
412
420
}
@@ -415,7 +423,7 @@ class CtaViewModelTest {
415
423
fun whenRefreshCtaWhileBrowsingAndNoTrackersInformationThenReturnNoTrackersCta () = runTest {
416
424
givenDaxOnboardingActive()
417
425
val site = site(url = " http://www.cnn.com" , trackerCount = 1 )
418
- val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = true , site = site, showBrokenSitePrompt = false )
426
+ val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = true , site = site)
419
427
420
428
assertTrue(value is OnboardingDaxDialogCta .DaxNoTrackersCta )
421
429
}
@@ -424,7 +432,7 @@ class CtaViewModelTest {
424
432
fun whenRefreshCtaOnSerpWhileBrowsingThenReturnSerpCta () = runTest {
425
433
givenDaxOnboardingActive()
426
434
val site = site(url = " http://www.duckduckgo.com" )
427
- val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = true , site = site, showBrokenSitePrompt = false )
435
+ val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = true , site = site)
428
436
429
437
assertTrue(value is OnboardingDaxDialogCta .DaxSerpCta )
430
438
}
@@ -433,7 +441,7 @@ class CtaViewModelTest {
433
441
fun whenRefreshCtaWhileBrowsingThenReturnNoTrackersCta () = runTest {
434
442
givenDaxOnboardingActive()
435
443
val site = site(url = " http://www.wikipedia.com" )
436
- val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = true , site = site, showBrokenSitePrompt = false )
444
+ val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = true , site = site)
437
445
438
446
assertTrue(value is OnboardingDaxDialogCta .DaxNoTrackersCta )
439
447
}
@@ -442,7 +450,7 @@ class CtaViewModelTest {
442
450
fun whenRefreshCtaWhileBrowsingAndNoAutoconsentThenReturnOtherCta () = runTest {
443
451
givenDaxOnboardingActive()
444
452
val site = site(url = " http://www.wikipedia.com" )
445
- val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = true , site = site, showBrokenSitePrompt = false )
453
+ val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = true , site = site)
446
454
447
455
assertTrue(value is OnboardingDaxDialogCta .DaxNoTrackersCta )
448
456
}
@@ -451,7 +459,7 @@ class CtaViewModelTest {
451
459
fun whenRefreshCtaOnHomeTabThenValueReturnedIsNotDaxDialogCtaType () = runTest {
452
460
givenDaxOnboardingActive()
453
461
val site = site(url = " http://www.wikipedia.com" )
454
- val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = false , site = site, showBrokenSitePrompt = false )
462
+ val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = false , site = site)
455
463
456
464
assertFalse(value is OnboardingDaxDialogCta )
457
465
}
@@ -463,7 +471,7 @@ class CtaViewModelTest {
463
471
whenever(mockDismissedCtaDao.exists(CtaId .DAX_DIALOG_TRACKERS_FOUND )).thenReturn(true )
464
472
465
473
val site = site(url = " http://www.cnn.com" , trackerCount = 1 )
466
- val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = true , site = site, showBrokenSitePrompt = false )
474
+ val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = true , site = site)
467
475
assertFalse(value is OnboardingDaxDialogCta .DaxEndCta )
468
476
}
469
477
@@ -475,7 +483,7 @@ class CtaViewModelTest {
475
483
whenever(mockDismissedCtaDao.exists(CtaId .DAX_FIRE_BUTTON )).thenReturn(true )
476
484
477
485
val site = site(url = " http://www.cnn.com" , trackerCount = 1 )
478
- val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = true , site = site, showBrokenSitePrompt = false )
486
+ val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = true , site = site)
479
487
assertTrue(value is OnboardingDaxDialogCta .DaxEndCta )
480
488
}
481
489
@@ -485,7 +493,7 @@ class CtaViewModelTest {
485
493
whenever(mockDismissedCtaDao.exists(CtaId .DAX_INTRO )).thenReturn(false )
486
494
whenever(mockDismissedCtaDao.exists(CtaId .DAX_DIALOG_SERP )).thenReturn(true )
487
495
488
- val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = false , showBrokenSitePrompt = false )
496
+ val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = false )
489
497
assertTrue(value is DaxBubbleCta .DaxIntroSearchOptionsCta )
490
498
}
491
499
@@ -494,7 +502,7 @@ class CtaViewModelTest {
494
502
givenDaxOnboardingActive()
495
503
whenever(mockDismissedCtaDao.exists(CtaId .DAX_INTRO )).thenReturn(true )
496
504
497
- val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = false , showBrokenSitePrompt = false )
505
+ val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = false )
498
506
assertTrue(value is DaxBubbleCta .DaxIntroVisitSiteOptionsCta )
499
507
}
500
508
@@ -505,7 +513,7 @@ class CtaViewModelTest {
505
513
whenever(mockDismissedCtaDao.exists(CtaId .DAX_INTRO_VISIT_SITE )).thenReturn(true )
506
514
givenAtLeastOneDaxDialogCtaShown()
507
515
508
- val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = false , showBrokenSitePrompt = false )
516
+ val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = false )
509
517
assertTrue(value is DaxBubbleCta .DaxEndCta )
510
518
}
511
519
@@ -514,15 +522,15 @@ class CtaViewModelTest {
514
522
givenShownDaxOnboardingCtas(listOf (CtaId .DAX_INTRO ))
515
523
givenUserIsEstablished()
516
524
517
- val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = true , showBrokenSitePrompt = false )
525
+ val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = true )
518
526
assertNull(value)
519
527
}
520
528
521
529
@Test
522
530
fun whenRefreshCtaWhileDaxOnboardingActiveAndBrowsingOnDuckDuckGoEmailUrlThenReturnNull () = runTest {
523
531
givenDaxOnboardingActive()
524
532
val site = site(url = " https://duckduckgo.com/email/" )
525
- val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = true , site = site, showBrokenSitePrompt = false )
533
+ val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = true , site = site)
526
534
assertNull(value)
527
535
}
528
536
@@ -659,7 +667,7 @@ class CtaViewModelTest {
659
667
whenever(mockDismissedCtaDao.exists(CtaId .DAX_INTRO )).thenReturn(false )
660
668
whenever(mockDismissedCtaDao.exists(CtaId .DAX_DIALOG_SERP )).thenReturn(true )
661
669
662
- val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = false , showBrokenSitePrompt = false )
670
+ val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = false )
663
671
assertTrue(value is DaxBubbleCta .DaxIntroSearchOptionsCta )
664
672
}
665
673
@@ -680,7 +688,7 @@ class CtaViewModelTest {
680
688
whenever(mockDismissedCtaDao.exists(CtaId .DAX_INTRO )).thenReturn(true )
681
689
whenever(mockDismissedCtaDao.exists(CtaId .DAX_DIALOG_TRACKERS_FOUND )).thenReturn(false )
682
690
683
- val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = false , showBrokenSitePrompt = false )
691
+ val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = false )
684
692
assertTrue(value is DaxBubbleCta .DaxIntroVisitSiteOptionsCta )
685
693
}
686
694
@@ -690,7 +698,7 @@ class CtaViewModelTest {
690
698
whenever(mockDismissedCtaDao.exists(CtaId .DAX_INTRO )).thenReturn(true )
691
699
whenever(mockDismissedCtaDao.exists(CtaId .DAX_DIALOG_TRACKERS_FOUND )).thenReturn(true )
692
700
693
- val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = false , showBrokenSitePrompt = false )
701
+ val value = testee.refreshCta(coroutineRule.testDispatcher, isBrowserShowing = false )
694
702
assertFalse(value is DaxBubbleCta .DaxIntroVisitSiteOptionsCta )
695
703
}
696
704
0 commit comments