Код: Выделить всё
@Dao
interface CoverLettersDao {
@Query("SELECT * FROM CoverLetter ORDER BY timestamp DESC")
fun collectLetters(): Flow
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insertOne(coverLetter: CoverLetter)
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insertAll(coverLetters: List)
Код: Выделить всё
init {
collectCoverLetters()
}
private fun collectCoverLetters() {
viewModelScope.launch {
coverLettersDao.collectLetters().collectLatest { lettersList ->
println("Collected letters: $lettersList")
_uiState.update { it.copy(letters = lettersList) }
}
}
}
fun getCoverLetters(startAt: Int) {
updateFetchResult(CustomResult.InProgress)
viewModelScope.launch {
val letters = homeRepository.getCoverLetters(batchSize, lastLetter = _uiState.value.letters.getOrNull(startAt))
coverLettersDao.insertAll(letters)
_uiState.update { it.copy(letters = it.letters + letters) }
...
}
Код: Выделить всё
@OptIn(ExperimentalCoroutinesApi::class)
class DispatcherRule(
val testDispatcher: TestDispatcher = StandardTestDispatcher()
): TestWatcher() {
override fun starting(description: Description?) {
Dispatchers.setMain(testDispatcher)
}
override fun finished(description: Description?) {
Dispatchers.resetMain()
}
}
Код: Выделить всё
@get: Rule
val dispatcherRule = DispatcherRule()
@Test
fun getCoverLetters_success() = runTest {
viewModel.getCoverLetters(0)
advanceUntilIdle()
println(viewModel.uiState.value.letters)
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... ow-in-test
Мобильная версия