Coverage Summary for Class: LogoutUseCase (com.georgeci.moneysurfer.domain.usecase)
| Class |
Method, %
|
Branch, %
|
Line, %
|
Instruction, %
|
| LogoutUseCase |
100%
(2/2)
|
|
100%
(11/11)
|
100%
(71/71)
|
| LogoutUseCase$invoke$1 |
|
| Total |
100%
(2/2)
|
|
100%
(11/11)
|
100%
(71/71)
|
package com.georgeci.moneysurfer.domain.usecase
import com.georgeci.moneysurfer.domain.auth.SessionMutator
import com.georgeci.moneysurfer.domain.repositories.AuthRemoteRepository
import com.georgeci.moneysurfer.domain.repositories.LocalDataResetRepository
import com.georgeci.moneysurfer.domain.repositories.RemoteDataResetRepository
import com.georgeci.moneysurfer.domain.repositories.SessionShutdownGate
import org.koin.core.annotation.Single
@Single
class LogoutUseCase(
private val sessionShutdownGate: SessionShutdownGate,
private val authRemoteRepository: AuthRemoteRepository,
private val localDataResetRepository: LocalDataResetRepository,
private val remoteDataResetRepository: RemoteDataResetRepository,
private val sessionMutator: SessionMutator,
) {
suspend operator fun invoke() {
// Stop sync work BEFORE wiping local data — otherwise an in-flight
// pull could re-populate Room mid-wipe and produce ghost rows.
sessionShutdownGate.shutdown()
sessionMutator.clearSession()
localDataResetRepository.clearAll()
remoteDataResetRepository.clearAll()
// Best-effort: a failed signOut shouldn't keep the user pinned in the local session.
authRemoteRepository.signOut()
}
}