Skip to content

Commit d29475e

Browse files
committed
added missing tests for the shared viewModel
1 parent f001faf commit d29475e

File tree

4 files changed

+106
-8
lines changed

4 files changed

+106
-8
lines changed

duckchat/duckchat-api/build.gradle

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,21 @@ dependencies {
3636
implementation AndroidX.appCompat
3737

3838
coreLibraryDesugaring Android.tools.desugarJdkLibs
39+
40+
testImplementation Testing.junit4
41+
testImplementation "org.mockito.kotlin:mockito-kotlin:_"
42+
testImplementation project(path: ':common-test')
43+
testImplementation "androidx.test.ext:junit-ktx:_"
44+
testImplementation project(':feature-toggles-test')
45+
testImplementation CashApp.turbine
46+
testImplementation Testing.robolectric
47+
testImplementation(KotlinX.coroutines.test) {
48+
// https://github.com/Kotlin/kotlinx.coroutines/issues/2023
49+
// conflicts with mockito due to direct inclusion of byte buddy
50+
exclude group: "org.jetbrains.kotlinx", module: "kotlinx-coroutines-debug"
51+
}
52+
testImplementation AndroidX.lifecycle.runtime.testing
53+
testImplementation AndroidX.archCore.testing
3954
}
4055

4156

duckchat/duckchat-api/src/main/java/com/duckduckgo/duckchat/api/viewmodel/DuckChatSharedViewModel.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class DuckChatSharedViewModel() : ViewModel() {
3333
}
3434
}
3535

36-
fun onTabSwitcherCLicked() {
36+
fun onTabSwitcherClicked() {
3737
viewModelScope.launch {
3838
_command.send(Command.LaunchTabSwitcher)
3939
}
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
/*
2+
* Copyright (c) 2025 DuckDuckGo
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package com.duckduckgo.duckchat.api.viewmodel
18+
19+
import androidx.arch.core.executor.testing.InstantTaskExecutorRule
20+
import app.cash.turbine.test
21+
import com.duckduckgo.common.test.CoroutineTestRule
22+
import kotlinx.coroutines.ExperimentalCoroutinesApi
23+
import kotlinx.coroutines.test.runTest
24+
import org.junit.Assert.assertEquals
25+
import org.junit.Before
26+
import org.junit.Rule
27+
import org.junit.Test
28+
29+
@OptIn(ExperimentalCoroutinesApi::class)
30+
class DuckChatSharedViewModelTest {
31+
32+
@get:Rule
33+
val coroutineRule = CoroutineTestRule()
34+
35+
@get:Rule
36+
@Suppress("unused")
37+
var instantTaskExecutorRule = InstantTaskExecutorRule()
38+
39+
private lateinit var testee: DuckChatSharedViewModel
40+
41+
@Before
42+
fun before() {
43+
testee = DuckChatSharedViewModel()
44+
}
45+
46+
@Test
47+
fun `when onFireButtonClicked then emit LaunchFire Command`() =
48+
runTest {
49+
testee.onFireButtonClicked()
50+
testee.command.test {
51+
assertEquals(DuckChatSharedViewModel.Command.LaunchFire, awaitItem())
52+
}
53+
}
54+
55+
@Test
56+
fun `when onTabSwitcherCLicked then emit LaunchTabSwitcher Command`() =
57+
runTest {
58+
testee.onTabSwitcherClicked()
59+
testee.command.test {
60+
assertEquals(DuckChatSharedViewModel.Command.LaunchTabSwitcher, awaitItem())
61+
}
62+
}
63+
64+
@Test
65+
fun `when onSearchRequested then emit SearchRequested Command`() =
66+
runTest {
67+
val query = "example.com"
68+
testee.onSearchRequested(query)
69+
testee.command.test {
70+
assertEquals(DuckChatSharedViewModel.Command.SearchRequested(query), awaitItem())
71+
}
72+
}
73+
74+
@Test
75+
fun `when openExistingTab then emit OpenTab Command`() =
76+
runTest {
77+
val tabId = "tabId"
78+
testee.openExistingTab(tabId)
79+
testee.command.test {
80+
assertEquals(DuckChatSharedViewModel.Command.OpenTab(tabId), awaitItem())
81+
}
82+
}
83+
}

duckchat/duckchat-impl/src/main/java/com/duckduckgo/duckchat/impl/ui/DuckChatWebViewFragment.kt

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ open class DuckChatWebViewFragment : DuckDuckGoFragment(R.layout.activity_duck_c
118118
ViewModelProvider(this, viewModelFactory)[DuckChatWebViewViewModel::class.java]
119119
}
120120

121-
private val sharedViewModel: DuckChatSharedViewModel by activityViewModels()
121+
private val browseSharedViewModel: DuckChatSharedViewModel by activityViewModels()
122122

123123
@Inject
124124
lateinit var webViewClient: DuckChatWebViewClient
@@ -386,11 +386,11 @@ open class DuckChatWebViewFragment : DuckDuckGoFragment(R.layout.activity_duck_c
386386
duckChatOmnibar?.setOmnibarItemPressedListener(
387387
object : DuckChatOmnibarLayout.ItemPressedListener {
388388
override fun onTabsButtonPressed() {
389-
sharedViewModel.onTabSwitcherCLicked()
389+
browseSharedViewModel.onTabSwitcherClicked()
390390
}
391391

392392
override fun onFireButtonPressed() {
393-
sharedViewModel.onFireButtonClicked()
393+
browseSharedViewModel.onFireButtonClicked()
394394
}
395395

396396
override fun onBrowserMenuPressed() {
@@ -439,25 +439,25 @@ open class DuckChatWebViewFragment : DuckDuckGoFragment(R.layout.activity_duck_c
439439
when (result.resultCode) {
440440
InputScreenActivityResultCodes.NEW_SEARCH_REQUESTED -> {
441441
data?.getStringExtra(InputScreenActivityResultParams.SEARCH_QUERY_PARAM)?.let { query ->
442-
sharedViewModel.onSearchRequested(query)
442+
browseSharedViewModel.onSearchRequested(query)
443443
}
444444
}
445445

446446
InputScreenActivityResultCodes.SWITCH_TO_TAB_REQUESTED -> {
447447
data?.getStringExtra(InputScreenActivityResultParams.TAB_ID_PARAM)?.let { tabId ->
448-
sharedViewModel.openExistingTab(tabId)
448+
browseSharedViewModel.openExistingTab(tabId)
449449
}
450450
}
451451

452452
InputScreenActivityResultCodes.MENU_REQUESTED -> {
453453
}
454454

455455
InputScreenActivityResultCodes.TAB_SWITCHER_REQUESTED -> {
456-
sharedViewModel.onTabSwitcherCLicked()
456+
browseSharedViewModel.onTabSwitcherClicked()
457457
}
458458

459459
InputScreenActivityResultCodes.FIRE_BUTTON_REQUESTED -> {
460-
sharedViewModel.onFireButtonClicked()
460+
browseSharedViewModel.onFireButtonClicked()
461461
}
462462
}
463463
}

0 commit comments

Comments
 (0)