adding tests around login usecase
This commit is contained in:
parent
27e29ebd34
commit
df9e97cbf8
|
@ -1 +1 @@
|
||||||
Subproject commit 8139eaaf57cee4ce9d0616d617e8aff7eb1480e3
|
Subproject commit cdf3e1bffba4b69dd8f752c6cc7588b0e89a17af
|
|
@ -28,7 +28,7 @@ fun loginReducer(
|
||||||
dispatch(LoginAction.UpdateContent(LoginScreenState.Content.Loading))
|
dispatch(LoginAction.UpdateContent(LoginScreenState.Content.Loading))
|
||||||
val request = LoginRequest(action.userName, action.password, action.serverUrl.takeIfNotEmpty())
|
val request = LoginRequest(action.userName, action.password, action.serverUrl.takeIfNotEmpty())
|
||||||
|
|
||||||
when (val result = loginUseCase.run(request)) {
|
when (val result = loginUseCase.login(request)) {
|
||||||
is LoginResult.Error -> dispatch(LoginAction.UpdateContent(LoginScreenState.Content.Error(result.cause)))
|
is LoginResult.Error -> dispatch(LoginAction.UpdateContent(LoginScreenState.Content.Error(result.cause)))
|
||||||
|
|
||||||
LoginResult.MissingWellKnown -> {
|
LoginResult.MissingWellKnown -> {
|
||||||
|
|
|
@ -15,7 +15,7 @@ class LoginUseCase(
|
||||||
private val pushTokenRegistrar: PushTokenRegistrar,
|
private val pushTokenRegistrar: PushTokenRegistrar,
|
||||||
private val errorTracker: ErrorTracker,
|
private val errorTracker: ErrorTracker,
|
||||||
) {
|
) {
|
||||||
suspend fun run(request: LoginRequest): LoginResult {
|
suspend fun login(request: LoginRequest): LoginResult {
|
||||||
return logP("login") {
|
return logP("login") {
|
||||||
when (val result = chatEngine.login(request)) {
|
when (val result = chatEngine.login(request)) {
|
||||||
is LoginResult.Success -> {
|
is LoginResult.Success -> {
|
||||||
|
|
|
@ -0,0 +1,72 @@
|
||||||
|
package app.dapk.st.login.state
|
||||||
|
|
||||||
|
import app.dapk.st.engine.LoginRequest
|
||||||
|
import app.dapk.st.engine.LoginResult
|
||||||
|
import app.dapk.st.matrix.common.DeviceId
|
||||||
|
import app.dapk.st.matrix.common.HomeServerUrl
|
||||||
|
import app.dapk.st.matrix.common.UserCredentials
|
||||||
|
import app.dapk.st.push.PushTokenRegistrar
|
||||||
|
import fake.FakeChatEngine
|
||||||
|
import fake.FakeErrorTracker
|
||||||
|
import fixture.aUserId
|
||||||
|
import io.mockk.mockk
|
||||||
|
import kotlinx.coroutines.test.runTest
|
||||||
|
import org.amshove.kluent.shouldBeEqualTo
|
||||||
|
import org.junit.Test
|
||||||
|
import test.expect
|
||||||
|
|
||||||
|
private val A_LOGIN_ERROR = LoginResult.Error(RuntimeException())
|
||||||
|
private val A_LOGIN_SUCCESS = LoginResult.Success(aUserCredentials())
|
||||||
|
|
||||||
|
private val A_LOGIN_REQUEST = LoginRequest(
|
||||||
|
userName = "a-username",
|
||||||
|
password = "a-password",
|
||||||
|
serverUrl = "a-server-url",
|
||||||
|
)
|
||||||
|
|
||||||
|
class LoginUseCaseTest {
|
||||||
|
|
||||||
|
private val fakeChatEngine = FakeChatEngine()
|
||||||
|
private val fakePushTokenRegistrar = FakePushTokenRegistrar()
|
||||||
|
private val fakeErrorTracker = FakeErrorTracker()
|
||||||
|
|
||||||
|
private val useCase = LoginUseCase(
|
||||||
|
fakeChatEngine,
|
||||||
|
fakePushTokenRegistrar,
|
||||||
|
fakeErrorTracker,
|
||||||
|
)
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `when logging in succeeds, then registers push token and preload me`() = runTest {
|
||||||
|
fakeChatEngine.givenLogin(A_LOGIN_REQUEST).returns(A_LOGIN_SUCCESS)
|
||||||
|
fakePushTokenRegistrar.expect { it.registerCurrentToken() }
|
||||||
|
fakeChatEngine.expect { it.me(forceRefresh = false) }
|
||||||
|
|
||||||
|
val result = useCase.login(A_LOGIN_REQUEST)
|
||||||
|
|
||||||
|
result shouldBeEqualTo A_LOGIN_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `when logging in fails with MissingWellKnown, then does nothing`() = runTest {
|
||||||
|
fakeChatEngine.givenLogin(A_LOGIN_REQUEST).returns(LoginResult.MissingWellKnown)
|
||||||
|
|
||||||
|
val result = useCase.login(A_LOGIN_REQUEST)
|
||||||
|
|
||||||
|
result shouldBeEqualTo LoginResult.MissingWellKnown
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `when logging in errors, then tracks cause`() = runTest {
|
||||||
|
fakeChatEngine.givenLogin(A_LOGIN_REQUEST).returns(A_LOGIN_ERROR)
|
||||||
|
fakeErrorTracker.expect { it.track(A_LOGIN_ERROR.cause) }
|
||||||
|
|
||||||
|
val result = useCase.login(A_LOGIN_REQUEST)
|
||||||
|
|
||||||
|
result shouldBeEqualTo A_LOGIN_ERROR
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class FakePushTokenRegistrar : PushTokenRegistrar by mockk()
|
||||||
|
|
||||||
|
private fun aUserCredentials() = UserCredentials("ignored", HomeServerUrl("ignored"), aUserId(), DeviceId("ignored"))
|
|
@ -10,6 +10,6 @@ class FakeLoginUseCase {
|
||||||
|
|
||||||
val instance = mockk<LoginUseCase>()
|
val instance = mockk<LoginUseCase>()
|
||||||
|
|
||||||
fun given(loginRequest: LoginRequest) = coEvery { instance.run(loginRequest) }.delegateReturn()
|
fun given(loginRequest: LoginRequest) = coEvery { instance.login(loginRequest) }.delegateReturn()
|
||||||
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue