Skip to content

Test ViewModel

Ali Sadeghi edited this page Jan 6, 2026 · 7 revisions

Test ViewModel Agent

Generates ViewModel tests using Turbine for Flow testing.

Example Output

// 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

Clone this wiki locally