Skip to content

Commit 52a9918

Browse files
committed
tests: improve MainActivityViewModelTest with additional connection scenarios
1 parent 73d0925 commit 52a9918

File tree

1 file changed

+70
-0
lines changed

1 file changed

+70
-0
lines changed

app/src/test/java/org/kabiri/android/usbterminal/viewmodel/MainActivityViewModelTest.kt

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
package org.kabiri.android.usbterminal.viewmodel
22

3+
import android.hardware.usb.UsbDevice
34
import com.google.common.truth.Truth.assertThat
45
import io.mockk.clearAllMocks
56
import io.mockk.every
67
import io.mockk.mockk
8+
import io.mockk.mockkStatic
79
import io.mockk.unmockkStatic
10+
import io.mockk.verify
811
import kotlinx.coroutines.Dispatchers
912
import kotlinx.coroutines.ExperimentalCoroutinesApi
1013
import kotlinx.coroutines.test.StandardTestDispatcher
@@ -19,6 +22,8 @@ import org.kabiri.android.usbterminal.R
1922
import org.kabiri.android.usbterminal.domain.IArduinoUseCase
2023
import org.kabiri.android.usbterminal.domain.IUsbUseCase
2124
import org.kabiri.android.usbterminal.util.IResourceProvider
25+
import org.kabiri.android.usbterminal.util.isCloneArduinoBoard
26+
import org.kabiri.android.usbterminal.util.isOfficialArduinoBoard
2227

2328
@OptIn(ExperimentalCoroutinesApi::class)
2429
internal class MainActivityViewModelTest {
@@ -62,4 +67,69 @@ internal class MainActivityViewModelTest {
6267
// assert
6368
assertThat(sut.errorMessage.value).isEqualTo(expected)
6469
}
70+
71+
@Test
72+
fun `connect emits expected message and calls requestPermission anyways when the device is unknown`() {
73+
// arrange
74+
val expectedError = "device not found"
75+
val expectedInfo = "connecting anyways"
76+
77+
val fakeDevice: UsbDevice = mockk(relaxed = true)
78+
mockkStatic(UsbDevice::isOfficialArduinoBoard, UsbDevice::isCloneArduinoBoard)
79+
every { fakeDevice.isOfficialArduinoBoard() } returns false
80+
every { fakeDevice.isCloneArduinoBoard() } returns false
81+
82+
every { mockUsbUseCase.scanForUsbDevices() } returns listOf(fakeDevice)
83+
every { mockResourceProvider.getString(R.string.helper_error_arduino_device_not_found) } returns expectedError
84+
every { mockResourceProvider.getString(R.string.helper_error_connecting_anyway) } returns expectedInfo
85+
86+
// act
87+
sut.connect()
88+
89+
// assert
90+
assertThat(sut.errorMessage.value).isEqualTo(expectedError)
91+
assertThat(sut.infoMessage.value).isEqualTo(expectedInfo)
92+
verify(exactly = 1) { mockUsbUseCase.requestPermission(fakeDevice) }
93+
}
94+
95+
@Test
96+
fun `connect emits expected message and calls requestPermission when the device is a clone`() {
97+
// arrange
98+
val expected = "connecting anyways"
99+
100+
val fakeDevice: UsbDevice = mockk(relaxed = true)
101+
mockkStatic(UsbDevice::isOfficialArduinoBoard, UsbDevice::isCloneArduinoBoard)
102+
every { fakeDevice.isOfficialArduinoBoard() } returns false
103+
every { fakeDevice.isCloneArduinoBoard() } returns true
104+
105+
every { mockUsbUseCase.scanForUsbDevices() } returns listOf(fakeDevice)
106+
every { mockResourceProvider.getString(R.string.helper_error_connecting_anyway) } returns expected
107+
108+
// act
109+
sut.connect()
110+
111+
// assert
112+
assertThat(sut.infoMessage.value).isEqualTo(expected)
113+
verify(exactly = 1) { mockUsbUseCase.requestPermission(fakeDevice) }
114+
}
115+
116+
@Test
117+
fun `connect calls requestPermission when the device is official`() {
118+
// arrange
119+
val fakeDevice: UsbDevice = mockk(relaxed = true)
120+
mockkStatic(UsbDevice::isOfficialArduinoBoard, UsbDevice::isCloneArduinoBoard)
121+
every { fakeDevice.isOfficialArduinoBoard() } returns true
122+
every { fakeDevice.isCloneArduinoBoard() } returns false
123+
124+
every { mockUsbUseCase.scanForUsbDevices() } returns listOf(fakeDevice)
125+
126+
// act
127+
sut.connect()
128+
129+
// assert
130+
verify(exactly = 1) { mockUsbUseCase.requestPermission(fakeDevice) }
131+
assertThat(sut.infoMessage.value).isEqualTo("")
132+
assertThat(sut.errorMessage.value).isEqualTo("")
133+
assertThat(sut.output.value).isEqualTo("")
134+
}
65135
}

0 commit comments

Comments
 (0)