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