Rohan Maity
07/27/2023, 7:16 AMoverride fun observeAll(): Flow<List<NetworkRequest>> {
return networkRequestQueries.selectAll().asFlow().map { query ->
query.executeAsList().map {
NetworkRequest(
it.host,
it.path,
it.method,
requestTime = it.request_time,
responseCode = it.response_code,
responseTimeTaken = it.response_time_taken,
isFailedByFlaker = it.is_failed_by_flaker
)
}
}
}
It only gives me the result only first time invocations
Update
I tried this as well still its not emitting values after insertions are made to DB
override fun observeAll(): Flow<List<NetworkRequest>> {
return networkRequestQueries.selectAll(
mapper = { _, host: String, path: String, method: String, request_time: Long, response_code: Long, response_time_taken: Long, is_failed_by_flaker: Boolean ->
NetworkRequest(
host,
path,
method,
request_time,
response_code,
response_time_taken,
is_failed_by_flaker
)
}
).asFlow().mapToList(<http://Dispatchers.IO|Dispatchers.IO>)
}
FYI I am on latest 2.0.0
CAUSE
Found the cause, Observing and Insertion DB instances were different that why its happeningBenoit Quenaudon
07/27/2023, 7:45 AM.asFlow()
.mapToList(ioContext)
Rohan Maity
07/27/2023, 7:46 AMBenoit Quenaudon
07/27/2023, 7:47 AMRohan Maity
07/27/2023, 7:49 AMRohan Maity
07/27/2023, 7:49 AMBenoit Quenaudon
07/27/2023, 7:50 AMRohan Maity
07/27/2023, 7:51 AMBenoit Quenaudon
07/27/2023, 7:52 AMRohan Maity
07/27/2023, 7:53 AMprivate fun observeAllRequests() {
val coroutineExceptionHandler = CoroutineExceptionHandler { _, throwable ->
Log.e("FlakerViewModel", "Error loading all requests", throwable)
}
viewModelScope.launch(coroutineExceptionHandler) {
flakerRepo.observeAllRequests()
.collectLatest {
Log.d("FUI", "collect list: ${it.size}")
val uiList: List<NetworkRequestUi> = it
.map { NetworkRequestUi.NetworkRequestItem(it) }
.groupBy { it.networkRequest.requestTime }
.entries
.flatMap { (dateLong, items) ->
listOf(NetworkRequestUi.DateItem(dateLong.toString())) + items
}
_viewStateFlow.emit(_viewStateFlow.value.copy(networkRequests = uiList))
}
}
}'
Benoit Quenaudon
07/27/2023, 7:54 AMRohan Maity
07/27/2023, 7:57 AM@Test
fun `GIVEN networkRequestRepo has data WHEN observeAllRequests() called THEN it should return same data`() {
runBlocking {
val flakerRepo =
FlakerRepo(
fakeContext,
testNetworkRequestRepoProvider,
testFlakerPrefsProvider,
mainDispatcherRule.testDispatcher
)
flakerRepo.observeAllRequests().test {
assert(awaitItem() == fakeFlakerDataList)
assert(awaitItem() == fakeFlakerDataList.subList(0, fakeFlakerDataList.size - 1))
cancelAndIgnoreRemainingEvents()
}
}
}
Rohan Maity
07/27/2023, 7:57 AMprivate val testNetworkRequestRepoProvider = object : NetworkRequestRepoProvider(fakeContext) {
val fakeDataRepo = object : NetworkRequestRepo {
override fun selectAll(): List<NetworkRequest> {
return fakeFlakerDataList
}
override fun insert(networkRequest: NetworkRequest) = Unit
override fun observeAll(): Flow<List<NetworkRequest>> {
return flowOf(fakeFlakerDataList, fakeFlakerDataList.subList(0, fakeFlakerDataList.size - 1))
}
}
override fun provide(): NetworkRequestRepo {
return fakeDataRepo
}
}
Benoit Quenaudon
07/27/2023, 8:00 AMRohan Maity
07/27/2023, 8:01 AMRohan Maity
07/27/2023, 8:16 AMRohan Maity
07/27/2023, 8:46 AMBenoit Quenaudon
07/27/2023, 8:49 AMBenoit Quenaudon
07/27/2023, 8:50 AM