Skip to content

Instantly share code, notes, and snippets.

@volodymyr-sch
Created October 18, 2021 15:21
Show Gist options
  • Select an option

  • Save volodymyr-sch/2d542b1855d27e3f516e80f767cfd24f to your computer and use it in GitHub Desktop.

Select an option

Save volodymyr-sch/2d542b1855d27e3f516e80f767cfd24f to your computer and use it in GitHub Desktop.
@ExperimentalCoroutinesApi
@RunWith(MockitoJUnitRunner::class)
class MainViewModelTest {
@Mock
lateinit var getTodos: IGetTodosUseCase
private lateinit var viewModel: MainViewModel
@get:Rule
var coroutinesTestRule = CoroutinesTestRule()
@Before
fun setup() = coroutinesTestRule.testDispatcher.runBlockingTest {
Mockito.`when`(getTodos.invoke()).thenReturn(prepareData())
viewModel = MainViewModel(getTodos, coroutinesTestRule.testDispatcher, MainScreenViewDataMapper())
}
@Test
fun `addNewItem, should add a new item to the existing state`() {
viewModel.addNewItem(
text = "newItem"
)
val newItem = viewModel.state.value.data[2]
assertEquals(4, viewModel.state.value.data.size)
assertIs<MainScreenItem.MainScreenTodoItem>(newItem)
assertEquals("newItem", newItem.text)
assertFalse(newItem.isChecked)
}
@Test
fun `changeAddDialogState, should show the AddItem dialog`() {
viewModel.changeAddDialogState(true)
assertTrue(viewModel.state.value.isShowAddDialog)
}
@Test
fun `onItemCheckedChanged, first item should be checked`() {
viewModel.onItemCheckedChanged(0, true)
val item = viewModel.state.value.data.first()
assertIs<MainScreenItem.MainScreenTodoItem>(item)
assertTrue(item.isChecked)
}
private fun prepareData(): List<Todo> {
return listOf(
Todo(
isChecked = false,
text = ITEM1_ID,
),
Todo(
isChecked = false,
text = ITEM2_ID,
)
)
}
companion object {
private const val ITEM1_ID = "item1"
private const val ITEM2_ID = "item2"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment