SignedOut mode - WIP

This commit is contained in:
Benoit Marty 2023-10-09 17:38:28 +02:00 committed by Benoit Marty
parent 8305912b14
commit 124d6bf95f
13 changed files with 105 additions and 41 deletions

View file

@ -22,6 +22,7 @@ import com.squareup.sqldelight.runtime.coroutines.mapToList
import com.squareup.sqldelight.runtime.coroutines.mapToOneOrNull
import io.element.android.libraries.di.AppScope
import io.element.android.libraries.di.SingleIn
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
@ -35,11 +36,17 @@ class DatabaseSessionStore @Inject constructor(
private val database: SessionDatabase,
) : SessionStore {
override fun isLoggedIn(): Flow<Boolean> {
override fun isLoggedIn(): Flow<LoggedInState> {
return database.sessionDataQueries.selectFirst()
.asFlow()
.mapToOneOrNull()
.map { it != null }
.map {
if (it == null) {
LoggedInState.NotLoggedIn
} else {
LoggedInState.LoggedIn((it.isTokenValid ?: 1) == 1L)
}
}
}
override suspend fun storeData(sessionData: SessionData) {

View file

@ -20,6 +20,7 @@ import app.cash.turbine.test
import com.google.common.truth.Truth.assertThat
import com.squareup.sqldelight.sqlite.driver.JdbcSqliteDriver
import io.element.android.libraries.matrix.session.SessionData
import io.element.android.libraries.sessionstorage.api.LoggedInState
import kotlinx.coroutines.test.runTest
import org.junit.Before
import org.junit.Test
@ -65,11 +66,11 @@ class DatabaseSessionStoreTests {
@Test
fun `isLoggedIn emits true while there are sessions in the DB`() = runTest {
databaseSessionStore.isLoggedIn().test {
assertThat(awaitItem()).isFalse()
assertThat(awaitItem()).isEqualTo(LoggedInState.NotLoggedIn)
database.sessionDataQueries.insertSessionData(aSessionData)
assertThat(awaitItem()).isTrue()
assertThat(awaitItem()).isEqualTo(LoggedInState.LoggedIn(true))
database.sessionDataQueries.removeSession(aSessionData.userId)
assertThat(awaitItem()).isFalse()
assertThat(awaitItem()).isEqualTo(LoggedInState.NotLoggedIn)
}
}