Ensure clearing the cache delete the CacheStore.

This commit is contained in:
Benoit Marty 2026-04-30 09:01:35 +02:00
parent c8773c890f
commit b50969437d
8 changed files with 45 additions and 2 deletions

View file

@ -14,6 +14,7 @@ import dev.zacsweers.metro.ContributesBinding
import dev.zacsweers.metro.Provider
import io.element.android.features.invite.api.SeenInvitesStore
import io.element.android.features.preferences.impl.DefaultCacheService
import io.element.android.libraries.cachestore.api.CacheStore
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
import io.element.android.libraries.di.SessionScope
import io.element.android.libraries.di.annotations.ApplicationContext
@ -37,8 +38,11 @@ class DefaultClearCacheUseCase(
private val pushService: PushService,
private val seenInvitesStore: SeenInvitesStore,
private val activeRoomsHolder: ActiveRoomsHolder,
private val cacheStore: CacheStore,
) : ClearCacheUseCase {
override suspend fun invoke() = withContext(coroutineDispatchers.io) {
// Clear cache store
cacheStore.deleteAll()
// Active rooms should be disposed of before clearing the cache
activeRoomsHolder.clear(matrixClient.sessionId)
// Clear Matrix cache

View file

@ -19,6 +19,8 @@ import io.element.android.libraries.matrix.test.A_SESSION_ID
import io.element.android.libraries.matrix.test.FakeMatrixClient
import io.element.android.libraries.matrix.test.room.FakeJoinedRoom
import io.element.android.libraries.push.test.FakePushService
import io.element.android.libraries.sessionstorage.test.InMemoryCacheStore
import io.element.android.libraries.sessionstorage.test.aCacheData
import io.element.android.services.appnavstate.impl.DefaultActiveRoomsHolder
import io.element.android.tests.testutils.lambda.lambdaRecorder
import io.element.android.tests.testutils.lambda.value
@ -49,6 +51,9 @@ class DefaultClearCacheUseCaseTest {
)
val seenInvitesStore = InMemorySeenInvitesStore(setOf(A_ROOM_ID))
assertThat(seenInvitesStore.seenRoomIds().first()).isNotEmpty()
val cacheStore = InMemoryCacheStore(
initialData = mapOf("key1" to aCacheData())
)
val sut = DefaultClearCacheUseCase(
context = InstrumentationRegistry.getInstrumentation().context,
matrixClient = matrixClient,
@ -58,9 +63,11 @@ class DefaultClearCacheUseCaseTest {
pushService = pushService,
seenInvitesStore = seenInvitesStore,
activeRoomsHolder = activeRoomsHolder,
cacheStore = cacheStore,
)
defaultCacheService.clearedCacheEventFlow.test {
sut.invoke()
assertThat(cacheStore.dataMap).isEmpty()
clearCacheLambda.assertions().isCalledOnce()
setIgnoreRegistrationErrorLambda.assertions().isCalledOnce()
.with(value(matrixClient.sessionId), value(false))