Refactor: Move InMemorySessionStore to test module
- Delete `libraries/session-storage/impl-memory` module - Move `InMemorySessionStore.kt` to `libraries/session-storage/test`
This commit is contained in:
parent
b1770834d9
commit
5f223f3c89
20 changed files with 85 additions and 135 deletions
|
|
@ -36,7 +36,6 @@ dependencies {
|
||||||
testImplementation(libs.test.truth)
|
testImplementation(libs.test.truth)
|
||||||
testImplementation(libs.test.turbine)
|
testImplementation(libs.test.turbine)
|
||||||
testImplementation(projects.libraries.matrix.test)
|
testImplementation(projects.libraries.matrix.test)
|
||||||
testImplementation(projects.libraries.sessionStorage.implMemory)
|
|
||||||
testImplementation(projects.libraries.sessionStorage.test)
|
testImplementation(projects.libraries.sessionStorage.test)
|
||||||
testImplementation(projects.libraries.preferences.test)
|
testImplementation(projects.libraries.preferences.test)
|
||||||
testImplementation(projects.tests.testutils)
|
testImplementation(projects.tests.testutils)
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ package io.element.android.features.migration.impl.migrations
|
||||||
import com.google.common.truth.Truth.assertThat
|
import com.google.common.truth.Truth.assertThat
|
||||||
import io.element.android.libraries.preferences.test.FakeSessionPreferencesStoreFactory
|
import io.element.android.libraries.preferences.test.FakeSessionPreferencesStoreFactory
|
||||||
import io.element.android.libraries.preferences.test.InMemorySessionPreferencesStore
|
import io.element.android.libraries.preferences.test.InMemorySessionPreferencesStore
|
||||||
import io.element.android.libraries.sessionstorage.impl.memory.InMemorySessionStore
|
import io.element.android.libraries.sessionstorage.test.InMemorySessionStore
|
||||||
import io.element.android.libraries.sessionstorage.test.aSessionData
|
import io.element.android.libraries.sessionstorage.test.aSessionData
|
||||||
import io.element.android.tests.testutils.lambda.lambdaRecorder
|
import io.element.android.tests.testutils.lambda.lambdaRecorder
|
||||||
import kotlinx.coroutines.flow.first
|
import kotlinx.coroutines.flow.first
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ package io.element.android.features.migration.impl.migrations
|
||||||
|
|
||||||
import com.google.common.truth.Truth.assertThat
|
import com.google.common.truth.Truth.assertThat
|
||||||
import io.element.android.libraries.matrix.test.A_SESSION_ID
|
import io.element.android.libraries.matrix.test.A_SESSION_ID
|
||||||
import io.element.android.libraries.sessionstorage.impl.memory.InMemorySessionStore
|
import io.element.android.libraries.sessionstorage.test.InMemorySessionStore
|
||||||
import io.element.android.libraries.sessionstorage.test.aSessionData
|
import io.element.android.libraries.sessionstorage.test.aSessionData
|
||||||
import kotlinx.coroutines.test.runTest
|
import kotlinx.coroutines.test.runTest
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ package io.element.android.features.migration.impl.migrations
|
||||||
|
|
||||||
import com.google.common.truth.Truth.assertThat
|
import com.google.common.truth.Truth.assertThat
|
||||||
import io.element.android.libraries.matrix.test.A_SESSION_ID
|
import io.element.android.libraries.matrix.test.A_SESSION_ID
|
||||||
import io.element.android.libraries.sessionstorage.impl.memory.InMemorySessionStore
|
import io.element.android.libraries.sessionstorage.test.InMemorySessionStore
|
||||||
import io.element.android.libraries.sessionstorage.test.aSessionData
|
import io.element.android.libraries.sessionstorage.test.aSessionData
|
||||||
import kotlinx.coroutines.test.runTest
|
import kotlinx.coroutines.test.runTest
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
|
|
|
||||||
|
|
@ -54,7 +54,6 @@ dependencies {
|
||||||
testImplementation(libs.test.mockk)
|
testImplementation(libs.test.mockk)
|
||||||
testImplementation(projects.features.enterprise.test)
|
testImplementation(projects.features.enterprise.test)
|
||||||
testImplementation(projects.libraries.matrix.test)
|
testImplementation(projects.libraries.matrix.test)
|
||||||
testImplementation(projects.libraries.sessionStorage.implMemory)
|
|
||||||
testImplementation(projects.libraries.sessionStorage.test)
|
testImplementation(projects.libraries.sessionStorage.test)
|
||||||
testImplementation(projects.features.rageshake.test)
|
testImplementation(projects.features.rageshake.test)
|
||||||
testImplementation(projects.libraries.preferences.test)
|
testImplementation(projects.libraries.preferences.test)
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ import io.element.android.libraries.matrix.test.encryption.FakeEncryptionService
|
||||||
import io.element.android.libraries.matrix.test.tracing.FakeTracingService
|
import io.element.android.libraries.matrix.test.tracing.FakeTracingService
|
||||||
import io.element.android.libraries.network.useragent.DefaultUserAgentProvider
|
import io.element.android.libraries.network.useragent.DefaultUserAgentProvider
|
||||||
import io.element.android.libraries.sessionstorage.api.SessionStore
|
import io.element.android.libraries.sessionstorage.api.SessionStore
|
||||||
import io.element.android.libraries.sessionstorage.impl.memory.InMemorySessionStore
|
import io.element.android.libraries.sessionstorage.test.InMemorySessionStore
|
||||||
import io.element.android.libraries.sessionstorage.test.aSessionData
|
import io.element.android.libraries.sessionstorage.test.aSessionData
|
||||||
import io.element.android.tests.testutils.lambda.lambdaRecorder
|
import io.element.android.tests.testutils.lambda.lambdaRecorder
|
||||||
import io.element.android.tests.testutils.testCoroutineDispatchers
|
import io.element.android.tests.testutils.testCoroutineDispatchers
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,6 @@ dependencies {
|
||||||
testImplementation(libs.test.truth)
|
testImplementation(libs.test.truth)
|
||||||
testImplementation(libs.test.turbine)
|
testImplementation(libs.test.turbine)
|
||||||
testImplementation(projects.libraries.matrix.test)
|
testImplementation(projects.libraries.matrix.test)
|
||||||
testImplementation(projects.libraries.sessionStorage.implMemory)
|
|
||||||
testImplementation(projects.libraries.sessionStorage.test)
|
testImplementation(projects.libraries.sessionStorage.test)
|
||||||
testImplementation(projects.tests.testutils)
|
testImplementation(projects.tests.testutils)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ import io.element.android.libraries.matrix.api.core.SessionId
|
||||||
import io.element.android.libraries.matrix.test.A_SESSION_ID
|
import io.element.android.libraries.matrix.test.A_SESSION_ID
|
||||||
import io.element.android.libraries.matrix.test.core.aBuildMeta
|
import io.element.android.libraries.matrix.test.core.aBuildMeta
|
||||||
import io.element.android.libraries.sessionstorage.api.SessionStore
|
import io.element.android.libraries.sessionstorage.api.SessionStore
|
||||||
import io.element.android.libraries.sessionstorage.impl.memory.InMemorySessionStore
|
import io.element.android.libraries.sessionstorage.test.InMemorySessionStore
|
||||||
import io.element.android.libraries.sessionstorage.test.aSessionData
|
import io.element.android.libraries.sessionstorage.test.aSessionData
|
||||||
import io.element.android.tests.testutils.WarmUpRule
|
import io.element.android.tests.testutils.WarmUpRule
|
||||||
import kotlinx.coroutines.test.runTest
|
import kotlinx.coroutines.test.runTest
|
||||||
|
|
|
||||||
|
|
@ -48,7 +48,6 @@ dependencies {
|
||||||
testImplementation(projects.libraries.featureflag.test)
|
testImplementation(projects.libraries.featureflag.test)
|
||||||
testImplementation(projects.libraries.matrix.test)
|
testImplementation(projects.libraries.matrix.test)
|
||||||
testImplementation(projects.libraries.preferences.test)
|
testImplementation(projects.libraries.preferences.test)
|
||||||
testImplementation(projects.libraries.sessionStorage.implMemory)
|
|
||||||
testImplementation(projects.libraries.sessionStorage.test)
|
testImplementation(projects.libraries.sessionStorage.test)
|
||||||
testImplementation(projects.services.analytics.test)
|
testImplementation(projects.services.analytics.test)
|
||||||
testImplementation(projects.services.toolbox.test)
|
testImplementation(projects.services.toolbox.test)
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ package io.element.android.libraries.matrix.impl
|
||||||
import com.google.common.truth.Truth.assertThat
|
import com.google.common.truth.Truth.assertThat
|
||||||
import io.element.android.libraries.matrix.impl.fixtures.factories.aRustSession
|
import io.element.android.libraries.matrix.impl.fixtures.factories.aRustSession
|
||||||
import io.element.android.libraries.sessionstorage.api.SessionStore
|
import io.element.android.libraries.sessionstorage.api.SessionStore
|
||||||
import io.element.android.libraries.sessionstorage.impl.memory.InMemorySessionStore
|
import io.element.android.libraries.sessionstorage.test.InMemorySessionStore
|
||||||
import io.element.android.libraries.sessionstorage.test.aSessionData
|
import io.element.android.libraries.sessionstorage.test.aSessionData
|
||||||
import io.element.android.tests.testutils.testCoroutineDispatchers
|
import io.element.android.tests.testutils.testCoroutineDispatchers
|
||||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ import io.element.android.libraries.matrix.impl.auth.FakeUserCertificatesProvide
|
||||||
import io.element.android.libraries.matrix.impl.room.FakeTimelineEventTypeFilterFactory
|
import io.element.android.libraries.matrix.impl.room.FakeTimelineEventTypeFilterFactory
|
||||||
import io.element.android.libraries.network.useragent.SimpleUserAgentProvider
|
import io.element.android.libraries.network.useragent.SimpleUserAgentProvider
|
||||||
import io.element.android.libraries.sessionstorage.api.SessionStore
|
import io.element.android.libraries.sessionstorage.api.SessionStore
|
||||||
import io.element.android.libraries.sessionstorage.impl.memory.InMemorySessionStore
|
import io.element.android.libraries.sessionstorage.test.InMemorySessionStore
|
||||||
import io.element.android.libraries.sessionstorage.test.aSessionData
|
import io.element.android.libraries.sessionstorage.test.aSessionData
|
||||||
import io.element.android.services.analytics.test.FakeAnalyticsService
|
import io.element.android.services.analytics.test.FakeAnalyticsService
|
||||||
import io.element.android.services.toolbox.test.systemclock.FakeSystemClock
|
import io.element.android.services.toolbox.test.systemclock.FakeSystemClock
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ import io.element.android.libraries.matrix.impl.room.FakeTimelineEventTypeFilter
|
||||||
import io.element.android.libraries.matrix.test.A_DEVICE_ID
|
import io.element.android.libraries.matrix.test.A_DEVICE_ID
|
||||||
import io.element.android.libraries.matrix.test.A_USER_ID
|
import io.element.android.libraries.matrix.test.A_USER_ID
|
||||||
import io.element.android.libraries.sessionstorage.api.SessionStore
|
import io.element.android.libraries.sessionstorage.api.SessionStore
|
||||||
import io.element.android.libraries.sessionstorage.impl.memory.InMemorySessionStore
|
import io.element.android.libraries.sessionstorage.test.InMemorySessionStore
|
||||||
import io.element.android.services.toolbox.test.systemclock.FakeSystemClock
|
import io.element.android.services.toolbox.test.systemclock.FakeSystemClock
|
||||||
import io.element.android.tests.testutils.lambda.lambdaRecorder
|
import io.element.android.tests.testutils.lambda.lambdaRecorder
|
||||||
import io.element.android.tests.testutils.testCoroutineDispatchers
|
import io.element.android.tests.testutils.testCoroutineDispatchers
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ import io.element.android.libraries.matrix.impl.paths.SessionPathsFactory
|
||||||
import io.element.android.libraries.matrix.test.auth.FakeOidcRedirectUrlProvider
|
import io.element.android.libraries.matrix.test.auth.FakeOidcRedirectUrlProvider
|
||||||
import io.element.android.libraries.matrix.test.core.aBuildMeta
|
import io.element.android.libraries.matrix.test.core.aBuildMeta
|
||||||
import io.element.android.libraries.sessionstorage.api.SessionStore
|
import io.element.android.libraries.sessionstorage.api.SessionStore
|
||||||
import io.element.android.libraries.sessionstorage.impl.memory.InMemorySessionStore
|
import io.element.android.libraries.sessionstorage.test.InMemorySessionStore
|
||||||
import io.element.android.libraries.sessionstorage.test.aSessionData
|
import io.element.android.libraries.sessionstorage.test.aSessionData
|
||||||
import io.element.android.tests.testutils.testCoroutineDispatchers
|
import io.element.android.tests.testutils.testCoroutineDispatchers
|
||||||
import kotlinx.coroutines.test.TestScope
|
import kotlinx.coroutines.test.TestScope
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ package io.element.android.libraries.matrix.impl.util
|
||||||
|
|
||||||
import com.google.common.truth.Truth.assertThat
|
import com.google.common.truth.Truth.assertThat
|
||||||
import io.element.android.libraries.matrix.test.A_SESSION_ID
|
import io.element.android.libraries.matrix.test.A_SESSION_ID
|
||||||
import io.element.android.libraries.sessionstorage.impl.memory.InMemorySessionStore
|
import io.element.android.libraries.sessionstorage.test.InMemorySessionStore
|
||||||
import io.element.android.libraries.sessionstorage.test.aSessionData
|
import io.element.android.libraries.sessionstorage.test.aSessionData
|
||||||
import kotlinx.coroutines.test.runTest
|
import kotlinx.coroutines.test.runTest
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
|
|
|
||||||
|
|
@ -79,7 +79,6 @@ dependencies {
|
||||||
testImplementation(projects.libraries.matrix.test)
|
testImplementation(projects.libraries.matrix.test)
|
||||||
testImplementation(projects.libraries.push.test)
|
testImplementation(projects.libraries.push.test)
|
||||||
testImplementation(projects.libraries.pushstore.test)
|
testImplementation(projects.libraries.pushstore.test)
|
||||||
testImplementation(projects.libraries.sessionStorage.implMemory)
|
|
||||||
testImplementation(projects.libraries.sessionStorage.test)
|
testImplementation(projects.libraries.sessionStorage.test)
|
||||||
testImplementation(projects.tests.testutils)
|
testImplementation(projects.tests.testutils)
|
||||||
testImplementation(projects.services.toolbox.test)
|
testImplementation(projects.services.toolbox.test)
|
||||||
|
|
|
||||||
|
|
@ -22,8 +22,7 @@ import io.element.android.libraries.pushstore.api.UserPushStoreFactory
|
||||||
import io.element.android.libraries.pushstore.test.userpushstore.FakeUserPushStore
|
import io.element.android.libraries.pushstore.test.userpushstore.FakeUserPushStore
|
||||||
import io.element.android.libraries.pushstore.test.userpushstore.FakeUserPushStoreFactory
|
import io.element.android.libraries.pushstore.test.userpushstore.FakeUserPushStoreFactory
|
||||||
import io.element.android.libraries.sessionstorage.api.SessionStore
|
import io.element.android.libraries.sessionstorage.api.SessionStore
|
||||||
import io.element.android.libraries.sessionstorage.impl.memory.InMemoryMultiSessionsStore
|
import io.element.android.libraries.sessionstorage.test.InMemorySessionStore
|
||||||
import io.element.android.libraries.sessionstorage.impl.memory.InMemorySessionStore
|
|
||||||
import io.element.android.libraries.sessionstorage.test.aSessionData
|
import io.element.android.libraries.sessionstorage.test.aSessionData
|
||||||
import io.element.android.tests.testutils.lambda.lambdaRecorder
|
import io.element.android.tests.testutils.lambda.lambdaRecorder
|
||||||
import io.element.android.tests.testutils.lambda.value
|
import io.element.android.tests.testutils.lambda.value
|
||||||
|
|
@ -50,7 +49,7 @@ class DefaultFirebaseNewTokenHandlerTest {
|
||||||
val registerPusherResult = lambdaRecorder<MatrixClient, String, String, Result<Unit>> { _, _, _ -> Result.success(Unit) }
|
val registerPusherResult = lambdaRecorder<MatrixClient, String, String, Result<Unit>> { _, _, _ -> Result.success(Unit) }
|
||||||
val pusherSubscriber = FakePusherSubscriber(registerPusherResult = registerPusherResult)
|
val pusherSubscriber = FakePusherSubscriber(registerPusherResult = registerPusherResult)
|
||||||
val firebaseNewTokenHandler = createDefaultFirebaseNewTokenHandler(
|
val firebaseNewTokenHandler = createDefaultFirebaseNewTokenHandler(
|
||||||
sessionStore = InMemoryMultiSessionsStore().apply {
|
sessionStore = InMemorySessionStore().apply {
|
||||||
storeData(aSessionData(A_USER_ID.value))
|
storeData(aSessionData(A_USER_ID.value))
|
||||||
storeData(aSessionData(A_USER_ID_2.value))
|
storeData(aSessionData(A_USER_ID_2.value))
|
||||||
storeData(aSessionData(A_USER_ID_3.value))
|
storeData(aSessionData(A_USER_ID_3.value))
|
||||||
|
|
@ -89,7 +88,7 @@ class DefaultFirebaseNewTokenHandlerTest {
|
||||||
val registerPusherResult = lambdaRecorder<MatrixClient, String, String, Result<Unit>> { _, _, _ -> Result.success(Unit) }
|
val registerPusherResult = lambdaRecorder<MatrixClient, String, String, Result<Unit>> { _, _, _ -> Result.success(Unit) }
|
||||||
val pusherSubscriber = FakePusherSubscriber(registerPusherResult = registerPusherResult)
|
val pusherSubscriber = FakePusherSubscriber(registerPusherResult = registerPusherResult)
|
||||||
val firebaseNewTokenHandler = createDefaultFirebaseNewTokenHandler(
|
val firebaseNewTokenHandler = createDefaultFirebaseNewTokenHandler(
|
||||||
sessionStore = InMemoryMultiSessionsStore().apply {
|
sessionStore = InMemorySessionStore().apply {
|
||||||
storeData(aSessionData(A_USER_ID.value))
|
storeData(aSessionData(A_USER_ID.value))
|
||||||
},
|
},
|
||||||
matrixClientProvider = FakeMatrixClientProvider {
|
matrixClientProvider = FakeMatrixClientProvider {
|
||||||
|
|
@ -113,7 +112,7 @@ class DefaultFirebaseNewTokenHandlerTest {
|
||||||
val registerPusherResult = lambdaRecorder<MatrixClient, String, String, Result<Unit>> { _, _, _ -> Result.failure(AN_EXCEPTION) }
|
val registerPusherResult = lambdaRecorder<MatrixClient, String, String, Result<Unit>> { _, _, _ -> Result.failure(AN_EXCEPTION) }
|
||||||
val pusherSubscriber = FakePusherSubscriber(registerPusherResult = registerPusherResult)
|
val pusherSubscriber = FakePusherSubscriber(registerPusherResult = registerPusherResult)
|
||||||
val firebaseNewTokenHandler = createDefaultFirebaseNewTokenHandler(
|
val firebaseNewTokenHandler = createDefaultFirebaseNewTokenHandler(
|
||||||
sessionStore = InMemoryMultiSessionsStore().apply {
|
sessionStore = InMemorySessionStore().apply {
|
||||||
storeData(aSessionData(A_USER_ID.value))
|
storeData(aSessionData(A_USER_ID.value))
|
||||||
},
|
},
|
||||||
matrixClientProvider = FakeMatrixClientProvider {
|
matrixClientProvider = FakeMatrixClientProvider {
|
||||||
|
|
|
||||||
|
|
@ -1,18 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2023, 2024 New Vector Ltd.
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
|
|
||||||
* Please see LICENSE files in the repository root for full details.
|
|
||||||
*/
|
|
||||||
plugins {
|
|
||||||
id("io.element.android-library")
|
|
||||||
}
|
|
||||||
|
|
||||||
android {
|
|
||||||
namespace = "io.element.android.libraries.sessionstorage.impl.memory"
|
|
||||||
}
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
implementation(projects.libraries.sessionStorage.api)
|
|
||||||
implementation(libs.coroutines.core)
|
|
||||||
}
|
|
||||||
|
|
@ -1,35 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2023, 2024 New Vector Ltd.
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
|
|
||||||
* Please see LICENSE files in the repository root for full details.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package io.element.android.libraries.sessionstorage.impl.memory
|
|
||||||
|
|
||||||
import io.element.android.libraries.sessionstorage.api.LoggedInState
|
|
||||||
import io.element.android.libraries.sessionstorage.api.SessionData
|
|
||||||
import io.element.android.libraries.sessionstorage.api.SessionStore
|
|
||||||
import kotlinx.coroutines.flow.Flow
|
|
||||||
|
|
||||||
class InMemoryMultiSessionsStore : SessionStore {
|
|
||||||
private val sessions = mutableListOf<SessionData>()
|
|
||||||
|
|
||||||
override fun isLoggedIn(): Flow<LoggedInState> = error("Not implemented")
|
|
||||||
|
|
||||||
override fun sessionsFlow(): Flow<List<SessionData>> = error("Not implemented")
|
|
||||||
|
|
||||||
override suspend fun storeData(sessionData: SessionData) {
|
|
||||||
sessions.add(sessionData)
|
|
||||||
}
|
|
||||||
|
|
||||||
override suspend fun updateData(sessionData: SessionData) = error("Not implemented")
|
|
||||||
|
|
||||||
override suspend fun getSession(sessionId: String): SessionData? = error("Not implemented")
|
|
||||||
|
|
||||||
override suspend fun getAllSessions(): List<SessionData> = sessions
|
|
||||||
|
|
||||||
override suspend fun getLatestSession(): SessionData = error("Not implemented")
|
|
||||||
|
|
||||||
override suspend fun removeSession(sessionId: String) = error("Not implemented")
|
|
||||||
}
|
|
||||||
|
|
@ -1,62 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2023, 2024 New Vector Ltd.
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
|
|
||||||
* Please see LICENSE files in the repository root for full details.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package io.element.android.libraries.sessionstorage.impl.memory
|
|
||||||
|
|
||||||
import io.element.android.libraries.sessionstorage.api.LoggedInState
|
|
||||||
import io.element.android.libraries.sessionstorage.api.SessionData
|
|
||||||
import io.element.android.libraries.sessionstorage.api.SessionStore
|
|
||||||
import kotlinx.coroutines.flow.Flow
|
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
|
||||||
import kotlinx.coroutines.flow.map
|
|
||||||
|
|
||||||
class InMemorySessionStore : SessionStore {
|
|
||||||
private var sessionDataFlow = MutableStateFlow<SessionData?>(null)
|
|
||||||
|
|
||||||
override fun isLoggedIn(): Flow<LoggedInState> {
|
|
||||||
return sessionDataFlow.map {
|
|
||||||
if (it == null) {
|
|
||||||
LoggedInState.NotLoggedIn
|
|
||||||
} else {
|
|
||||||
LoggedInState.LoggedIn(
|
|
||||||
sessionId = it.userId,
|
|
||||||
isTokenValid = it.isTokenValid,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun sessionsFlow(): Flow<List<SessionData>> {
|
|
||||||
return sessionDataFlow.map { listOfNotNull(it) }
|
|
||||||
}
|
|
||||||
|
|
||||||
override suspend fun storeData(sessionData: SessionData) {
|
|
||||||
sessionDataFlow.value = sessionData
|
|
||||||
}
|
|
||||||
|
|
||||||
override suspend fun updateData(sessionData: SessionData) {
|
|
||||||
sessionDataFlow.value = sessionData
|
|
||||||
}
|
|
||||||
|
|
||||||
override suspend fun getSession(sessionId: String): SessionData? {
|
|
||||||
return sessionDataFlow.value.takeIf { it?.userId == sessionId }
|
|
||||||
}
|
|
||||||
|
|
||||||
override suspend fun getAllSessions(): List<SessionData> {
|
|
||||||
return listOfNotNull(sessionDataFlow.value)
|
|
||||||
}
|
|
||||||
|
|
||||||
override suspend fun getLatestSession(): SessionData? {
|
|
||||||
return sessionDataFlow.value
|
|
||||||
}
|
|
||||||
|
|
||||||
override suspend fun removeSession(sessionId: String) {
|
|
||||||
if (sessionDataFlow.value?.userId == sessionId) {
|
|
||||||
sessionDataFlow.value = null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -0,0 +1,71 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2023, 2024 New Vector Ltd.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
|
||||||
|
* Please see LICENSE files in the repository root for full details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.element.android.libraries.sessionstorage.test
|
||||||
|
|
||||||
|
import io.element.android.libraries.sessionstorage.api.LoggedInState
|
||||||
|
import io.element.android.libraries.sessionstorage.api.SessionData
|
||||||
|
import io.element.android.libraries.sessionstorage.api.SessionStore
|
||||||
|
import kotlinx.coroutines.flow.Flow
|
||||||
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
|
import kotlinx.coroutines.flow.asStateFlow
|
||||||
|
import kotlinx.coroutines.flow.map
|
||||||
|
|
||||||
|
class InMemorySessionStore : SessionStore {
|
||||||
|
private val sessionDataListFlow = MutableStateFlow<List<SessionData>>(emptyList())
|
||||||
|
|
||||||
|
override fun isLoggedIn(): Flow<LoggedInState> {
|
||||||
|
return sessionDataListFlow.map {
|
||||||
|
if (it.isEmpty()) {
|
||||||
|
LoggedInState.NotLoggedIn
|
||||||
|
} else {
|
||||||
|
it.first().let { sessionData ->
|
||||||
|
LoggedInState.LoggedIn(
|
||||||
|
sessionId = sessionData.userId,
|
||||||
|
isTokenValid = sessionData.isTokenValid,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun sessionsFlow(): Flow<List<SessionData>> = sessionDataListFlow.asStateFlow()
|
||||||
|
|
||||||
|
override suspend fun storeData(sessionData: SessionData) {
|
||||||
|
val currentList = sessionDataListFlow.value.toMutableList()
|
||||||
|
currentList.removeAll { it.userId == sessionData.userId }
|
||||||
|
currentList.add(sessionData)
|
||||||
|
sessionDataListFlow.value = currentList
|
||||||
|
}
|
||||||
|
|
||||||
|
override suspend fun updateData(sessionData: SessionData) {
|
||||||
|
val currentList = sessionDataListFlow.value.toMutableList()
|
||||||
|
val index = currentList.indexOfFirst { it.userId == sessionData.userId }
|
||||||
|
if (index != -1) {
|
||||||
|
currentList[index] = sessionData
|
||||||
|
sessionDataListFlow.value = currentList
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override suspend fun getSession(sessionId: String): SessionData? {
|
||||||
|
return sessionDataListFlow.value.first { it.userId == sessionId }
|
||||||
|
}
|
||||||
|
|
||||||
|
override suspend fun getAllSessions(): List<SessionData> {
|
||||||
|
return sessionDataListFlow.value
|
||||||
|
}
|
||||||
|
|
||||||
|
override suspend fun getLatestSession(): SessionData? {
|
||||||
|
return sessionDataListFlow.value.firstOrNull()
|
||||||
|
}
|
||||||
|
|
||||||
|
override suspend fun removeSession(sessionId: String) {
|
||||||
|
val currentList = sessionDataListFlow.value.toMutableList()
|
||||||
|
currentList.removeAll { it.userId == sessionId }
|
||||||
|
sessionDataListFlow.value = currentList
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue