@@ -114,6 +114,8 @@ import io.reactivex.Observable
114114import io.reactivex.Single
115115import kotlinx.coroutines.ExperimentalCoroutinesApi
116116import kotlinx.coroutines.channels.Channel
117+ import kotlinx.coroutines.flow.MutableSharedFlow
118+ import kotlinx.coroutines.flow.asSharedFlow
117119import kotlinx.coroutines.flow.consumeAsFlow
118120import kotlinx.coroutines.flow.flowOf
119121import kotlinx.coroutines.runBlocking
@@ -173,7 +175,7 @@ class BrowserTabViewModelTest {
173175 private lateinit var mockOmnibarConverter: OmnibarEntryConverter
174176
175177 @Mock
176- private lateinit var mockTabsRepository : TabRepository
178+ private lateinit var mockTabRepository : TabRepository
177179
178180 @Mock
179181 private lateinit var webViewSessionStorage: WebViewSessionStorage
@@ -229,9 +231,6 @@ class BrowserTabViewModelTest {
229231 @Mock
230232 private lateinit var mockFileDownloader: FileDownloader
231233
232- @Mock
233- private lateinit var mockTabRepository: TabRepository
234-
235234 @Mock
236235 private lateinit var geoLocationPermissions: GeoLocationPermissions
237236
@@ -263,6 +262,10 @@ class BrowserTabViewModelTest {
263262
264263 private val dismissedCtaDaoChannel = Channel <List <DismissedCta >>()
265264
265+ private val childClosedTabsSharedFlow = MutableSharedFlow <String >()
266+
267+ private val childClosedTabsFlow = childClosedTabsSharedFlow.asSharedFlow()
268+
266269 @Before
267270 fun before () {
268271 MockitoAnnotations .openMocks(this )
@@ -299,9 +302,10 @@ class BrowserTabViewModelTest {
299302
300303 whenever(mockOmnibarConverter.convertQueryToUrl(any(), any())).thenReturn(" duckduckgo.com" )
301304 whenever(mockVariantManager.getVariant()).thenReturn(DEFAULT_VARIANT )
302- whenever(mockTabsRepository .liveSelectedTab).thenReturn(selectedTabLiveData)
305+ whenever(mockTabRepository .liveSelectedTab).thenReturn(selectedTabLiveData)
303306 whenever(mockNavigationAwareLoginDetector.loginEventLiveData).thenReturn(loginEventLiveData)
304- whenever(mockTabsRepository.retrieveSiteData(any())).thenReturn(MutableLiveData ())
307+ whenever(mockTabRepository.retrieveSiteData(any())).thenReturn(MutableLiveData ())
308+ whenever(mockTabRepository.childClosedTabs).thenReturn(childClosedTabsFlow)
305309 whenever(mockPrivacyPractices.privacyPracticesFor(any())).thenReturn(PrivacyPractices .UNKNOWN )
306310 whenever(mockAppInstallStore.installTimestamp).thenReturn(System .currentTimeMillis() - TimeUnit .DAYS .toMillis(1 ))
307311 whenever(mockUserWhitelistDao.contains(anyString())).thenReturn(false )
@@ -312,7 +316,7 @@ class BrowserTabViewModelTest {
312316 queryUrlConverter = mockOmnibarConverter,
313317 duckDuckGoUrlDetector = DuckDuckGoUrlDetector (),
314318 siteFactory = siteFactory,
315- tabRepository = mockTabsRepository ,
319+ tabRepository = mockTabRepository ,
316320 userWhitelistDao = mockUserWhitelistDao,
317321 networkLeaderboardDao = mockNetworkLeaderboardDao,
318322 autoComplete = mockAutoCompleteApi,
@@ -389,7 +393,7 @@ class BrowserTabViewModelTest {
389393 verify(mockCommandObserver, atLeastOnce()).onChanged(commandCaptor.capture())
390394 assertTrue(commandCaptor.lastValue is Command .OpenInNewBackgroundTab )
391395
392- verify(mockTabsRepository ).addNewTabAfterExistingTab(url, " abc" )
396+ verify(mockTabRepository ).addNewTabAfterExistingTab(url, " abc" )
393397 }
394398
395399 @Test
@@ -553,7 +557,7 @@ class BrowserTabViewModelTest {
553557 testee.onUserSubmittedQuery(" foo" )
554558
555559 coroutineRule.runBlocking {
556- verify(mockTabsRepository ).deleteTabAndSelectSource(selectedTabLiveData.value!! .tabId)
560+ verify(mockTabRepository ).deleteTabAndSelectSource(selectedTabLiveData.value!! .tabId)
557561 }
558562 }
559563
@@ -1218,7 +1222,7 @@ class BrowserTabViewModelTest {
12181222 testee.onRefreshRequested()
12191223
12201224 coroutineRule.runBlocking {
1221- verify(mockTabsRepository ).deleteTabAndSelectSource(selectedTabLiveData.value!! .tabId)
1225+ verify(mockTabRepository ).deleteTabAndSelectSource(selectedTabLiveData.value!! .tabId)
12221226 }
12231227 }
12241228
@@ -1519,7 +1523,7 @@ class BrowserTabViewModelTest {
15191523 showErrorWithAction.action()
15201524
15211525 coroutineRule.runBlocking {
1522- verify(mockTabsRepository ).deleteTabAndSelectSource(selectedTabLiveData.value!! .tabId)
1526+ verify(mockTabRepository ).deleteTabAndSelectSource(selectedTabLiveData.value!! .tabId)
15231527 }
15241528 }
15251529
@@ -1691,7 +1695,7 @@ class BrowserTabViewModelTest {
16911695 fun whenCloseCurrentTabSelectedThenTabDeletedFromRepository () = runBlocking {
16921696 givenOneActiveTabSelected()
16931697 testee.closeCurrentTab()
1694- verify(mockTabsRepository ).deleteTabAndSelectSource(selectedTabLiveData.value!! .tabId)
1698+ verify(mockTabRepository ).deleteTabAndSelectSource(selectedTabLiveData.value!! .tabId)
16951699 }
16961700
16971701 @Test
@@ -1723,7 +1727,7 @@ class BrowserTabViewModelTest {
17231727
17241728 testee.onUserPressedBack()
17251729
1726- verify(mockTabsRepository ).deleteTabAndSelectSource(" TAB_ID" )
1730+ verify(mockTabRepository ).deleteTabAndSelectSource(" TAB_ID" )
17271731 }
17281732
17291733 @Test
@@ -2870,7 +2874,7 @@ class BrowserTabViewModelTest {
28702874
28712875 testee.prefetchFavicon(url)
28722876
2873- verify(mockTabsRepository ).updateTabFavicon(" TAB_ID" , file.name)
2877+ verify(mockTabRepository ).updateTabFavicon(" TAB_ID" , file.name)
28742878 }
28752879
28762880 @Test
@@ -2879,7 +2883,7 @@ class BrowserTabViewModelTest {
28792883
28802884 testee.prefetchFavicon(" url" )
28812885
2882- verify(mockTabsRepository , never()).updateTabFavicon(any(), any())
2886+ verify(mockTabRepository , never()).updateTabFavicon(any(), any())
28832887 }
28842888
28852889 @Test
@@ -2901,7 +2905,7 @@ class BrowserTabViewModelTest {
29012905
29022906 testee.iconReceived(bitmap)
29032907
2904- verify(mockTabsRepository ).updateTabFavicon(" TAB_ID" , file.name)
2908+ verify(mockTabRepository ).updateTabFavicon(" TAB_ID" , file.name)
29052909 }
29062910
29072911 @Test
@@ -2912,7 +2916,7 @@ class BrowserTabViewModelTest {
29122916
29132917 testee.iconReceived(bitmap)
29142918
2915- verify(mockTabsRepository , never()).updateTabFavicon(any(), any())
2919+ verify(mockTabRepository , never()).updateTabFavicon(any(), any())
29162920 }
29172921
29182922 @Test
@@ -3136,6 +3140,24 @@ class BrowserTabViewModelTest {
31363140 }
31373141 }
31383142
3143+ @Test
3144+ fun whenChildrenTabClosedIfViewModelIsParentThenChildTabClosedCommandSent () = coroutineRule.runBlocking {
3145+ givenOneActiveTabSelected()
3146+
3147+ childClosedTabsSharedFlow.emit(" TAB_ID" )
3148+
3149+ assertCommandIssued<Command .ChildTabClosed >()
3150+ }
3151+
3152+ @Test
3153+ fun whenChildrenTabClosedIfViewModelIsNotParentThenChildTabClosedCommandNotSent () = coroutineRule.runBlocking {
3154+ givenOneActiveTabSelected()
3155+
3156+ childClosedTabsSharedFlow.emit(" other_tab" )
3157+
3158+ assertCommandNotIssued<Command .ChildTabClosed >()
3159+ }
3160+
31393161 private suspend fun givenFireButtonPulsing () {
31403162 whenever(mockUserStageStore.getUserAppStage()).thenReturn(AppStage .DAX_ONBOARDING )
31413163 dismissedCtaDaoChannel.send(listOf (DismissedCta (CtaId .DAX_DIALOG_TRACKERS_FOUND )))
@@ -3222,7 +3244,7 @@ class BrowserTabViewModelTest {
32223244 whenever(site.url).thenReturn(USE_OUR_APP_DOMAIN )
32233245 val siteLiveData = MutableLiveData <Site >()
32243246 siteLiveData.value = site
3225- whenever(mockTabsRepository .retrieveSiteData(" TAB_ID" )).thenReturn(siteLiveData)
3247+ whenever(mockTabRepository .retrieveSiteData(" TAB_ID" )).thenReturn(siteLiveData)
32263248 testee.loadData(" TAB_ID" , USE_OUR_APP_DOMAIN , false )
32273249 }
32283250
@@ -3232,7 +3254,7 @@ class BrowserTabViewModelTest {
32323254 whenever(site.url).thenReturn(" example.com" )
32333255 val siteLiveData = MutableLiveData <Site >()
32343256 siteLiveData.value = site
3235- whenever(mockTabsRepository .retrieveSiteData(" TAB_ID" )).thenReturn(siteLiveData)
3257+ whenever(mockTabRepository .retrieveSiteData(" TAB_ID" )).thenReturn(siteLiveData)
32363258 testee.loadData(" TAB_ID" , " example.com" , false )
32373259 }
32383260
@@ -3250,7 +3272,7 @@ class BrowserTabViewModelTest {
32503272 whenever(site.uri).thenReturn(Uri .parse(domain))
32513273 val siteLiveData = MutableLiveData <Site >()
32523274 siteLiveData.value = site
3253- whenever(mockTabsRepository .retrieveSiteData(" TAB_ID" )).thenReturn(siteLiveData)
3275+ whenever(mockTabRepository .retrieveSiteData(" TAB_ID" )).thenReturn(siteLiveData)
32543276 testee.loadData(" TAB_ID" , domain, false )
32553277 }
32563278
0 commit comments