From df5f8adb52b4a4a0801d2f56acd248c806d2676f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Gonz=C3=A1lez?= Date: Mon, 17 Nov 2025 11:06:09 +0100 Subject: [PATCH 1/2] Duck.ai: Provide default value for tabS --- .../main/java/com/duckduckgo/app/browser/BrowserViewModel.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/duckduckgo/app/browser/BrowserViewModel.kt b/app/src/main/java/com/duckduckgo/app/browser/BrowserViewModel.kt index 0538b48e52c4..6acdc1d6bfcf 100644 --- a/app/src/main/java/com/duckduckgo/app/browser/BrowserViewModel.kt +++ b/app/src/main/java/com/duckduckgo/app/browser/BrowserViewModel.kt @@ -509,7 +509,8 @@ class BrowserViewModel @Inject constructor( ) { val duckAiFullScreenMode = duckAiFeatureState.showFullScreenMode.value logcat(INFO) { "Duck.ai openDuckChat duckChatSessionActive $duckChatSessionActive" } - sendCommand(OpenDuckChat(duckChatUrl, duckChatSessionActive, withTransition, tabs.value.size, duckAiFullScreenMode)) + val tabsCount = tabs.value?.size ?: 0 + sendCommand(OpenDuckChat(duckChatUrl, duckChatSessionActive, withTransition, tabsCount, duckAiFullScreenMode)) } } From d4de1d9861a5b971bf3dee85f7aad11ed6e79030 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Gonz=C3=A1lez?= Date: Mon, 17 Nov 2025 11:14:52 +0100 Subject: [PATCH 2/2] added missing tests --- .../app/browser/BrowserViewModelTest.kt | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/app/src/test/java/com/duckduckgo/app/browser/BrowserViewModelTest.kt b/app/src/test/java/com/duckduckgo/app/browser/BrowserViewModelTest.kt index 96a2ecb762d9..017e74b2db46 100644 --- a/app/src/test/java/com/duckduckgo/app/browser/BrowserViewModelTest.kt +++ b/app/src/test/java/com/duckduckgo/app/browser/BrowserViewModelTest.kt @@ -612,6 +612,39 @@ class BrowserViewModelTest { } } + @Test + fun `when openDuckChat called and tabs are null then command is sent with 0 tabs`() = runTest { + doReturn(MutableLiveData(null)).whenever(mockTabRepository).liveTabs + initTestee() + + testee.openDuckChat(duckChatUrl = "duck://chat", duckChatSessionActive = false, withTransition = false) + + testee.commands.test { + val command = awaitItem() + assertTrue(command is Command.OpenDuckChat) + command as Command.OpenDuckChat + assertEquals(0, command.tabs) + cancelAndIgnoreRemainingEvents() + } + } + + @Test + fun `when openDuckChat called then command is sent with correct tab count`() = runTest { + val tabs = listOf(TabEntity("1", "", "", position = 0)) + doReturn(MutableLiveData(tabs)).whenever(mockTabRepository).liveTabs + initTestee() + + testee.openDuckChat(duckChatUrl = "duck://chat", duckChatSessionActive = false, withTransition = false) + + testee.commands.test { + val command = awaitItem() + assertTrue(command is Command.OpenDuckChat) + command as Command.OpenDuckChat + assertEquals(tabs.size, command.tabs) + cancelAndIgnoreRemainingEvents() + } + } + private fun initTestee() { testee = BrowserViewModel( tabRepository = mockTabRepository,