-
Notifications
You must be signed in to change notification settings - Fork 0
Test ViewModel
Ali Sadeghi edited this page Jan 6, 2026
·
7 revisions
Generates ViewModel tests using Turbine for Flow testing.
// feature/login/src/commonTest/kotlin/presentation/viewmodel/LoginViewModelTest.kt
class LoginViewModelTest {
private val mockRepository = mock<LoginRepository>()
private lateinit var viewModel: LoginViewModel
@BeforeTest
fun setup() {
viewModel = LoginViewModel(mockRepository)
}
@Test
fun `initial state is Uninitialized`() = runTest {
viewModel.state.test {
assertEquals(Uninitialized, awaitItem())
}
}
@Test
fun `login success transitions to Success state`() = runTest {
val response = LoginFixtures.loginResponse()
every { mockRepository.login(any()) } returns Success(response)
viewModel.state.test {
assertEquals(Uninitialized, awaitItem())
viewModel.login("test@example.com", "password")
assertEquals(Loading, awaitItem())
val successState = awaitItem()
assertTrue(successState is Success)
assertEquals(response.token, (successState as Success).token)
}
}
@Test
fun `login failure transitions to Failed state`() = runTest {
val error = ErrorResponse("Invalid credentials")
every { mockRepository.login(any()) } returns Failure(error)
viewModel.state.test {
assertEquals(Uninitialized, awaitItem())
viewModel.login("test@example.com", "wrong")
assertEquals(Loading, awaitItem())
val failedState = awaitItem()
assertTrue(failedState is Failed)
assertEquals(error, (failedState as Failed).error)
}
}
}Back to Agents