Skip to content

Commit 3aa15b9

Browse files
committed
tests: avoid using mockkstatic and return vendorId and productId
1 parent 6bab0ea commit 3aa15b9

File tree

1 file changed

+80
-15
lines changed

1 file changed

+80
-15
lines changed

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

Lines changed: 80 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import com.google.common.truth.Truth.assertThat
55
import io.mockk.clearAllMocks
66
import io.mockk.every
77
import io.mockk.mockk
8-
import io.mockk.mockkStatic
98
import io.mockk.unmockkStatic
109
import io.mockk.verify
1110
import kotlinx.coroutines.Dispatchers
@@ -33,7 +32,6 @@ private const val OFFICIAL_PRODUCT_ID = 0x0043
3332
private const val CLONE_VENDOR_ID = 0x1A86
3433
private const val CLONE_PRODUCT_ID = 0x7523
3534

36-
3735
private const val OTHER_VENDOR_ID = 0x1234 // random id
3836
private const val OTHER_PRODUCT_ID = 0x1234 // random id
3937

@@ -231,17 +229,84 @@ internal class MainActivityViewModelTest {
231229
}
232230

233231
@Test
234-
fun `serialWrite updates output and returns result from arduinoUseCase`() = runTest {
235-
// arrange
236-
val expected = "TEST_COMMAND"
237-
every { mockArduinoUsecase.serialWrite(expected) } returns true
238-
239-
// act
240-
val result = sut.serialWrite(expected)
241-
242-
// assert
243-
verify { mockArduinoUsecase.serialWrite(expected) }
244-
assertThat(result).isTrue()
245-
assertThat(sut.output.value).contains(expected)
246-
}
232+
fun `serialWrite updates output and returns result from arduinoUseCase`() =
233+
runTest {
234+
// arrange
235+
val expected = "TEST_COMMAND"
236+
every { mockArduinoUsecase.serialWrite(expected) } returns true
237+
238+
// act
239+
val result = sut.serialWrite(expected)
240+
241+
// assert
242+
verify { mockArduinoUsecase.serialWrite(expected) }
243+
assertThat(result).isTrue()
244+
assertThat(sut.output.value).contains(expected)
245+
}
246+
247+
@Test
248+
fun `getLiveOutput emits arduinoInfo when only arduinoInfo is not empty`() =
249+
runTest {
250+
// arrange
251+
val arduinoDefaultFlow = MutableStateFlow("")
252+
val arduinoInfoFlow = MutableStateFlow("arduino info message")
253+
val arduinoErrorFlow = MutableStateFlow("")
254+
val usbInfoFlow = MutableStateFlow("")
255+
256+
every { mockArduinoUsecase.messageFlow } returns arduinoDefaultFlow
257+
every { mockArduinoUsecase.infoMessageFlow } returns arduinoInfoFlow
258+
every { mockArduinoUsecase.errorMessageFlow } returns arduinoErrorFlow
259+
every { mockUsbUseCase.infoMessageFlow } returns usbInfoFlow
260+
every { mockResourceProvider.getString(any()) } returns ""
261+
262+
// inject flows into ViewModel
263+
sut =
264+
MainActivityViewModel(
265+
arduinoUseCase = mockArduinoUsecase,
266+
usbUseCase = mockUsbUseCase,
267+
resourceProvider = mockResourceProvider,
268+
)
269+
270+
// act
271+
val outputFlow = sut.getLiveOutput()
272+
advanceUntilIdle()
273+
val output = outputFlow.value
274+
275+
// assert
276+
assertThat(output.text).isEqualTo("arduino info message")
277+
assertThat(output.type).isEqualTo(org.kabiri.android.usbterminal.model.OutputText.OutputType.TYPE_INFO)
278+
}
279+
280+
@Test
281+
fun `getLiveOutput emits arduinoDefault when all outputs are empty`() =
282+
runTest {
283+
// arrange
284+
val arduinoDefaultFlow = MutableStateFlow("default message")
285+
val arduinoInfoFlow = MutableStateFlow("")
286+
val arduinoErrorFlow = MutableStateFlow("")
287+
val usbInfoFlow = MutableStateFlow("")
288+
289+
every { mockArduinoUsecase.messageFlow } returns arduinoDefaultFlow
290+
every { mockArduinoUsecase.infoMessageFlow } returns arduinoInfoFlow
291+
every { mockArduinoUsecase.errorMessageFlow } returns arduinoErrorFlow
292+
every { mockUsbUseCase.infoMessageFlow } returns usbInfoFlow
293+
every { mockResourceProvider.getString(any()) } returns ""
294+
295+
// inject flows into ViewModel
296+
sut =
297+
MainActivityViewModel(
298+
arduinoUseCase = mockArduinoUsecase,
299+
usbUseCase = mockUsbUseCase,
300+
resourceProvider = mockResourceProvider,
301+
)
302+
303+
// act
304+
val outputFlow = sut.getLiveOutput()
305+
advanceUntilIdle()
306+
val output = outputFlow.value
307+
308+
// assert
309+
assertThat(output.text).isEqualTo("default message")
310+
assertThat(output.type).isEqualTo(org.kabiri.android.usbterminal.model.OutputText.OutputType.TYPE_NORMAL)
311+
}
247312
}

0 commit comments

Comments
 (0)