Skip to content

Commit 0ed880c

Browse files
committed
tests: make sure connectIfAlreadyHasPermission works as expected
1 parent 9416aa1 commit 0ed880c

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed

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

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,10 @@ import io.mockk.unmockkStatic
1010
import io.mockk.verify
1111
import kotlinx.coroutines.Dispatchers
1212
import kotlinx.coroutines.ExperimentalCoroutinesApi
13+
import kotlinx.coroutines.flow.MutableStateFlow
1314
import kotlinx.coroutines.test.StandardTestDispatcher
1415
import kotlinx.coroutines.test.TestDispatcher
16+
import kotlinx.coroutines.test.advanceUntilIdle
1517
import kotlinx.coroutines.test.resetMain
1618
import kotlinx.coroutines.test.runTest
1719
import kotlinx.coroutines.test.setMain
@@ -135,4 +137,38 @@ internal class MainActivityViewModelTest {
135137
assertThat(sut.errorMessage.value).isEqualTo("")
136138
assertThat(sut.output.value).isEqualTo("")
137139
}
140+
141+
@Test
142+
fun `connectIfAlreadyHasPermission does nothing when no usb device exists`() =
143+
runTest {
144+
// arrange
145+
every { mockUsbUseCase.usbDevice } returns MutableStateFlow(null)
146+
147+
// act
148+
sut.connectIfAlreadyHasPermission()
149+
150+
// assert
151+
verify(exactly = 0) { mockUsbUseCase.hasPermission(any()) }
152+
verify(exactly = 0) { mockArduinoUsecase.openDeviceAndPort(any()) }
153+
}
154+
155+
@Test
156+
fun `connectIfAlreadyHasPermission calls hasPermission and openDeviceAndPort when usb device exists`() =
157+
runTest {
158+
// arrange
159+
val mockDevice: UsbDevice = mockk(relaxed = true)
160+
val fakeVendorId = 0x0043
161+
every { mockDevice.vendorId } returns fakeVendorId
162+
every { mockUsbUseCase.usbDevice } returns MutableStateFlow(mockDevice)
163+
every { mockUsbUseCase.hasPermission(mockDevice) } returns true
164+
every { mockArduinoUsecase.openDeviceAndPort(any()) } returns Unit
165+
166+
// act
167+
sut.connectIfAlreadyHasPermission()
168+
advanceUntilIdle()
169+
170+
// assert
171+
verify { mockUsbUseCase.hasPermission(mockDevice) }
172+
verify { mockArduinoUsecase.openDeviceAndPort(mockDevice) }
173+
}
138174
}

0 commit comments

Comments
 (0)