Skip to content

Commit e847168

Browse files
committed
tests: add unit tests for MainActivityViewModel
1 parent b7754eb commit e847168

File tree

1 file changed

+65
-0
lines changed

1 file changed

+65
-0
lines changed
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package org.kabiri.android.usbterminal.viewmodel
2+
3+
import com.google.common.truth.Truth.assertThat
4+
import io.mockk.clearAllMocks
5+
import io.mockk.every
6+
import io.mockk.mockk
7+
import io.mockk.unmockkStatic
8+
import kotlinx.coroutines.Dispatchers
9+
import kotlinx.coroutines.ExperimentalCoroutinesApi
10+
import kotlinx.coroutines.test.StandardTestDispatcher
11+
import kotlinx.coroutines.test.TestDispatcher
12+
import kotlinx.coroutines.test.TestScope
13+
import kotlinx.coroutines.test.resetMain
14+
import kotlinx.coroutines.test.setMain
15+
import org.junit.After
16+
import org.junit.Before
17+
import org.junit.Test
18+
import org.kabiri.android.usbterminal.R
19+
import org.kabiri.android.usbterminal.domain.IArduinoUseCase
20+
import org.kabiri.android.usbterminal.domain.IUsbUseCase
21+
import org.kabiri.android.usbterminal.util.IResourceProvider
22+
23+
@OptIn(ExperimentalCoroutinesApi::class)
24+
internal class MainActivityViewModelTest {
25+
26+
private val testDispatcher: TestDispatcher = StandardTestDispatcher()
27+
private val testScope = TestScope(testDispatcher)
28+
29+
val mockArduinoUsecase: IArduinoUseCase = mockk(relaxed = true)
30+
val mockUsbUseCase: IUsbUseCase = mockk(relaxed = true)
31+
val mockResourceProvider: IResourceProvider = mockk(relaxed = true)
32+
33+
private lateinit var sut: MainActivityViewModel
34+
35+
@Before
36+
fun setUp() {
37+
Dispatchers.setMain(testDispatcher)
38+
sut = MainActivityViewModel(
39+
arduinoUseCase = mockArduinoUsecase,
40+
usbUseCase = mockUsbUseCase,
41+
resourceProvider = mockResourceProvider,
42+
)
43+
}
44+
45+
@After
46+
fun cleanUp() {
47+
Dispatchers.resetMain()
48+
unmockkStatic("org.kabiri.android.usbterminal.util.UsbDeviceExtensionsKt")
49+
clearAllMocks()
50+
}
51+
52+
@Test
53+
fun `connect emits expected message when device list is empty`() {
54+
// arrange
55+
val expected = "this is an error"
56+
every { mockUsbUseCase.scanForUsbDevices() } returns emptyList()
57+
every { mockResourceProvider.getString(R.string.helper_error_usb_devices_not_attached) } returns expected
58+
59+
// act
60+
sut.connect()
61+
62+
// assert
63+
assertThat(sut.errorMessage.value).isEqualTo(expected)
64+
}
65+
}

0 commit comments

Comments
 (0)