Код: Выделить всё
private const val RECENT_UPDATE_THRESHOLD_MS = 60_000L
@Dao
interface InboxMessageDao {
@Query(
"SELECT * FROM inbox_message " +
"WHERE toEmail == (SELECT email FROM email_address WHERE isCurrent = 1) " +
"AND (strftime('%s', 'now') * 1000 - cacheLastUpdate) < $RECENT_UPDATE_THRESHOLD_MS"
)
fun getAllFlow(): Flow
@Insert
suspend fun insertAll(messages: List)
@Query("DELETE FROM inbox_message")
suspend fun deleteAll()
@Query("SELECT cacheLastUpdate FROM inbox_message WHERE toEmail == :toEmail LIMIT 1")
suspend fun getCacheLastUpdate(toEmail: String): Long?
@Transaction // TODO: This fails tests sometimes, why?
suspend fun refreshInboxMessages(newMessages: List) {
deleteAll()
// Flow seems to be propagated here giving me sometimes empty list in androidTests
insertAll(newMessages)
}
}
PS. runInTransaction {} не решает эту проблему.
PS 2. Вот мой пример androiTest:
Код: Выделить всё
@Test
fun shouldPropagateOneMessage() = runTest {
// given
coEvery { repository.getInboxMessagesFromApi() } returns listOf(inboxMessage)
val viewModel = InboxMessageViewModel(StandardTestDispatcher(testScheduler))
advanceUntilIdle()
// expect
val result = viewModel.uiState.first()
advanceUntilIdle()
assertThat(result).isEqualTo(ViewModelState.Success(listOf(inboxMessage)))
}
Результат теста
Подробнее здесь: https://stackoverflow.com/questions/791 ... s-expected