Skip to content

Commit 9416aa1

Browse files
committed
refactor(tests): use runTest block
1 parent 8e985a7 commit 9416aa1

File tree

1 file changed

+70
-67
lines changed

1 file changed

+70
-67
lines changed

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

Lines changed: 70 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ import kotlinx.coroutines.Dispatchers
1212
import kotlinx.coroutines.ExperimentalCoroutinesApi
1313
import kotlinx.coroutines.test.StandardTestDispatcher
1414
import kotlinx.coroutines.test.TestDispatcher
15-
import kotlinx.coroutines.test.TestScope
1615
import kotlinx.coroutines.test.resetMain
16+
import kotlinx.coroutines.test.runTest
1717
import kotlinx.coroutines.test.setMain
1818
import org.junit.After
1919
import org.junit.Before
@@ -28,7 +28,6 @@ import org.kabiri.android.usbterminal.util.isOfficialArduinoBoard
2828
@OptIn(ExperimentalCoroutinesApi::class)
2929
internal class MainActivityViewModelTest {
3030
private val testDispatcher: TestDispatcher = StandardTestDispatcher()
31-
private val testScope = TestScope(testDispatcher)
3231

3332
val mockArduinoUsecase: IArduinoUseCase = mockk(relaxed = true)
3433
val mockUsbUseCase: IUsbUseCase = mockk(relaxed = true)
@@ -55,81 +54,85 @@ internal class MainActivityViewModelTest {
5554
}
5655

5756
@Test
58-
fun `connect emits expected message when device list is empty`() {
59-
// arrange
60-
val expected = "this is an error"
61-
every { mockUsbUseCase.scanForUsbDevices() } returns emptyList()
62-
every { mockResourceProvider.getString(R.string.helper_error_usb_devices_not_attached) } returns expected
57+
fun `connect emits expected message when device list is empty`() =
58+
runTest {
59+
// arrange
60+
val expected = "this is an error"
61+
every { mockUsbUseCase.scanForUsbDevices() } returns emptyList()
62+
every { mockResourceProvider.getString(R.string.helper_error_usb_devices_not_attached) } returns expected
6363

64-
// act
65-
sut.connect()
64+
// act
65+
sut.connect()
6666

67-
// assert
68-
assertThat(sut.errorMessage.value).isEqualTo(expected)
69-
}
67+
// assert
68+
assertThat(sut.errorMessage.value).isEqualTo(expected)
69+
}
7070

7171
@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-
}
72+
fun `connect emits expected message and calls requestPermission anyways when the device is unknown`() =
73+
runTest {
74+
// arrange
75+
val expectedError = "device not found"
76+
val expectedInfo = "connecting anyways"
77+
78+
val fakeDevice: UsbDevice = mockk(relaxed = true)
79+
mockkStatic(UsbDevice::isOfficialArduinoBoard, UsbDevice::isCloneArduinoBoard)
80+
every { fakeDevice.isOfficialArduinoBoard() } returns false
81+
every { fakeDevice.isCloneArduinoBoard() } returns false
82+
83+
every { mockUsbUseCase.scanForUsbDevices() } returns listOf(fakeDevice)
84+
every { mockResourceProvider.getString(R.string.helper_error_arduino_device_not_found) } returns expectedError
85+
every { mockResourceProvider.getString(R.string.helper_error_connecting_anyway) } returns expectedInfo
86+
87+
// act
88+
sut.connect()
89+
90+
// assert
91+
assertThat(sut.errorMessage.value).isEqualTo(expectedError)
92+
assertThat(sut.infoMessage.value).isEqualTo(expectedInfo)
93+
verify(exactly = 1) { mockUsbUseCase.requestPermission(fakeDevice) }
94+
}
9495

9596
@Test
96-
fun `connect emits expected message and calls requestPermission when the device is a clone`() {
97-
// arrange
98-
val expected = "connecting anyways"
97+
fun `connect emits expected message and calls requestPermission when the device is a clone`() =
98+
runTest {
99+
// arrange
100+
val expected = "connecting anyways"
99101

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
102+
val fakeDevice: UsbDevice = mockk(relaxed = true)
103+
mockkStatic(UsbDevice::isOfficialArduinoBoard, UsbDevice::isCloneArduinoBoard)
104+
every { fakeDevice.isOfficialArduinoBoard() } returns false
105+
every { fakeDevice.isCloneArduinoBoard() } returns true
104106

105-
every { mockUsbUseCase.scanForUsbDevices() } returns listOf(fakeDevice)
106-
every { mockResourceProvider.getString(R.string.helper_error_connecting_anyway) } returns expected
107+
every { mockUsbUseCase.scanForUsbDevices() } returns listOf(fakeDevice)
108+
every { mockResourceProvider.getString(R.string.helper_error_connecting_anyway) } returns expected
107109

108-
// act
109-
sut.connect()
110+
// act
111+
sut.connect()
110112

111-
// assert
112-
assertThat(sut.infoMessage.value).isEqualTo(expected)
113-
verify(exactly = 1) { mockUsbUseCase.requestPermission(fakeDevice) }
114-
}
113+
// assert
114+
assertThat(sut.infoMessage.value).isEqualTo(expected)
115+
verify(exactly = 1) { mockUsbUseCase.requestPermission(fakeDevice) }
116+
}
115117

116118
@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-
}
119+
fun `connect calls requestPermission when the device is official`() =
120+
runTest {
121+
// arrange
122+
val fakeDevice: UsbDevice = mockk(relaxed = true)
123+
mockkStatic(UsbDevice::isOfficialArduinoBoard, UsbDevice::isCloneArduinoBoard)
124+
every { fakeDevice.isOfficialArduinoBoard() } returns true
125+
every { fakeDevice.isCloneArduinoBoard() } returns false
126+
127+
every { mockUsbUseCase.scanForUsbDevices() } returns listOf(fakeDevice)
128+
129+
// act
130+
sut.connect()
131+
132+
// assert
133+
verify(exactly = 1) { mockUsbUseCase.requestPermission(fakeDevice) }
134+
assertThat(sut.infoMessage.value).isEqualTo("")
135+
assertThat(sut.errorMessage.value).isEqualTo("")
136+
assertThat(sut.output.value).isEqualTo("")
137+
}
135138
}

0 commit comments

Comments
 (0)