Created
October 18, 2021 15:21
-
-
Save volodymyr-sch/2d542b1855d27e3f516e80f767cfd24f to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| @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