Skip to content

Instantly share code, notes, and snippets.

View igorescodro's full-sized avatar
♥️
Coding with love

Igor Escodro igorescodro

♥️
Coding with love
View GitHub Profile
@igorescodro
igorescodro / MyComposableTest.kt
Last active February 24, 2021 14:52
Compose tests
internal class MyComposableTest {
@get:Rule
val composeTestRule = createComposeRule()
@Before
fun setup() {
composeTestRule.setContent {
MyTheme {
MyComposable()
@Test
@AllowFlaky(attempts = 5)
fun test_TitleIsShownWhenLoaded() {
initComposable(state = MyState.Loaded)
composeTestRule.onNodeWithText("Title").assertIsDisplayed()
}
internal class TaskListViewModel : ViewModel() {
private val _state = MutableStateFlow<TaskListViewState>(TaskListViewState.Empty)
val state: StateFlow<TaskListViewState>
get() = _state
fun loadTasks() = viewModelScope.launch {
loadAllTasksUseCase().collect { tasks ->
_state.value = if (tasks.isNotEmpty()) {
@Composable
private fun TaskListLoader(viewModel: TaskListViewModel = getViewModel()) {
val viewState by viewModel.state.collectAsState()
}
val state: StateFlow<TaskListViewState> = flow {
loadAllTasksUseCase().collect { tasks ->
val state = if (tasks.isNotEmpty()) {
TaskListViewState.Loaded(tasks)
} else {
TaskListViewState.Empty
}
emit(state)
}
}.stateIn(viewModelScope, SharingStarted.WhileSubscribed(), TaskListViewState.Empty)
fun loadTaskList(): Flow<TaskListViewState> = flow {
loadAllTasksUseCase().collect { tasks ->
val state = if (tasks.isNotEmpty()) {
TaskListViewState.Loaded(tasks)
} else {
TaskListViewState.Empty
}
emit(state)
}
}
val viewState by viewModel.loadTaskList().collectAsState()
fun loadTaskInfo(taskId: TaskId): Flow<TaskDetailState> = flow {
val task = loadTaskUseCase(taskId = taskId.value)
if (task != null) {
emit(TaskDetailState.Loaded(task))
} else {
emit(TaskDetailState.Error)
}
}
internal class MyComposableTest {
@get:Rule
val composeTestRule = createComposeRule()
@Test
fun test_TitleIsShownWhenLoaded() {
initComposable(state = MyState.Loaded)
composeTestRule.onNodeWithText("Title").assertIsDisplayed()
}
internal class MyComposableTest {
@get:Rule
val flakyRule = FlakyTestRule()
@get:Rule
val composeTestRule = createEmptyComposeRule()
private lateinit var scenario: ActivityScenario<ComponentActivity>