@@ -8,6 +8,7 @@ import com.duckduckgo.app.browser.DuckDuckGoUrlDetectorImpl
8
8
import com.duckduckgo.app.browser.defaultbrowsing.prompts.DefaultBrowserPromptsExperiment
9
9
import com.duckduckgo.app.browser.omnibar.Omnibar.ViewMode
10
10
import com.duckduckgo.app.browser.omnibar.OmnibarLayout.Decoration
11
+ import com.duckduckgo.app.browser.omnibar.OmnibarLayout.Decoration.ChangeCustomTabTitle
11
12
import com.duckduckgo.app.browser.omnibar.OmnibarLayout.StateChange
12
13
import com.duckduckgo.app.browser.omnibar.OmnibarLayoutViewModel.Command
13
14
import com.duckduckgo.app.browser.omnibar.OmnibarLayoutViewModel.LeadingIconState
@@ -298,16 +299,67 @@ class OmnibarLayoutViewModelTest {
298
299
299
300
@Test
300
301
fun whenViewModeChangedToCustomTabThenViewStateCorrect () = runTest {
301
- testee.onViewModeChanged(ViewMode .CustomTab (0 , " example" , " example.com" , false ))
302
+ val expectedToolbarColor = 100
303
+ val expectedTitle = " example"
304
+ val expectedDomain = " example.com"
305
+ val expectedShowDuckPlayerIcon = false
306
+ testee.onViewModeChanged(
307
+ ViewMode .CustomTab (
308
+ toolbarColor = expectedToolbarColor,
309
+ title = expectedTitle,
310
+ domain = expectedDomain,
311
+ showDuckPlayerIcon = expectedShowDuckPlayerIcon,
312
+ ),
313
+ )
302
314
303
315
testee.viewState.test {
304
316
val viewState = awaitItem()
317
+ assertFalse(viewState.showClearButton)
318
+ assertFalse(viewState.showVoiceSearch)
319
+ assertFalse(viewState.showTabsMenu)
320
+ assertFalse(viewState.showFireIcon)
321
+ assertTrue(viewState.showBrowserMenu)
322
+
305
323
assertTrue(viewState.viewMode is ViewMode .CustomTab )
324
+ val customTabMode = viewState.viewMode as ViewMode .CustomTab
325
+ assertEquals(expectedToolbarColor, customTabMode.toolbarColor)
326
+ assertEquals(expectedTitle, customTabMode.title)
327
+ assertEquals(expectedDomain, customTabMode.domain)
328
+ assertEquals(expectedShowDuckPlayerIcon, customTabMode.showDuckPlayerIcon)
329
+ }
330
+ }
331
+
332
+ @Test
333
+ fun `when custom tab title updates, update view mode state` () = runTest {
334
+ val expectedTitle = " newTitle"
335
+ val expectedDomain = " newDomain"
336
+ val expectedShowDuckPlayerIcon = true
337
+ val decoration = ChangeCustomTabTitle (
338
+ title = expectedTitle,
339
+ domain = expectedDomain,
340
+ showDuckPlayerIcon = expectedShowDuckPlayerIcon,
341
+ )
342
+
343
+ testee.onViewModeChanged(ViewMode .CustomTab (100 , " example" , " example.com" , showDuckPlayerIcon = false ))
344
+ testee.viewState.test {
345
+ // skipping initial update
346
+ skipItems(1 )
347
+ // this function needs to be called only when the flow is consumed,
348
+ // otherwise, the values are not produced and the internal check for custom tab state fails
349
+ testee.onCustomTabTitleUpdate(decoration)
350
+ val viewState = awaitItem()
306
351
assertFalse(viewState.showClearButton)
307
352
assertFalse(viewState.showVoiceSearch)
308
353
assertFalse(viewState.showTabsMenu)
309
354
assertFalse(viewState.showFireIcon)
310
355
assertTrue(viewState.showBrowserMenu)
356
+
357
+ assertTrue(viewState.viewMode is ViewMode .CustomTab )
358
+ val customTabMode = viewState.viewMode as ViewMode .CustomTab
359
+ assertEquals(100 , customTabMode.toolbarColor)
360
+ assertEquals(expectedTitle, customTabMode.title)
361
+ assertEquals(expectedDomain, customTabMode.domain)
362
+ assertEquals(expectedShowDuckPlayerIcon, customTabMode.showDuckPlayerIcon)
311
363
}
312
364
}
313
365
0 commit comments