FakeSessionLocalDataSource.kt

package com.louisfn.somovie.test.fixtures.datasource.datastore

import com.louisfn.somovie.data.datastore.datasource.DataStoreLocalDataSource
import com.louisfn.somovie.data.datastore.model.SessionData
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.updateAndGet

class FakeSessionLocalDataSource : DataStoreLocalDataSource<SessionData> {

    private val sessionData = MutableStateFlow(SessionData())

    override fun dataChanges(): Flow<SessionData> = sessionData

    override suspend fun getData(): SessionData = sessionData.value

    override suspend fun updateData(transform: suspend (t: SessionData) -> SessionData): SessionData =
        sessionData.updateAndGet { transform(sessionData.value) }

    fun setSession(sessionData: SessionData) {
        this.sessionData.value = sessionData
    }
}