adding tests around the login error parsing
This commit is contained in:
parent
f89b9305e8
commit
b25fd4a540
|
@ -0,0 +1,102 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2022 New Vector Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package im.vector.app.features.onboarding.ftueauth
|
||||||
|
|
||||||
|
import im.vector.app.R
|
||||||
|
import im.vector.app.test.fakes.FakeErrorFormatter
|
||||||
|
import im.vector.app.test.fakes.FakeStringProvider
|
||||||
|
import im.vector.app.test.fakes.toTestString
|
||||||
|
import im.vector.app.test.fixtures.aHomeserverUnavailableError
|
||||||
|
import im.vector.app.test.fixtures.aLoginEmailUnknownError
|
||||||
|
import im.vector.app.test.fixtures.anInvalidPasswordError
|
||||||
|
import im.vector.app.test.fixtures.anInvalidUserNameError
|
||||||
|
import org.amshove.kluent.shouldBeEqualTo
|
||||||
|
import org.junit.Test
|
||||||
|
|
||||||
|
private const val A_VALID_PASSWORD = "11111111"
|
||||||
|
private const val A_FORMATTED_ERROR_MESSAGE = "error message"
|
||||||
|
|
||||||
|
class LoginErrorParserTest {
|
||||||
|
|
||||||
|
private val fakeErrorFormatter = FakeErrorFormatter()
|
||||||
|
private val fakeStringProvider = FakeStringProvider()
|
||||||
|
|
||||||
|
private val loginErrorParser = LoginErrorParser(fakeErrorFormatter, fakeStringProvider.instance)
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `given a generic error, when parsing, then has null username and password errors`() {
|
||||||
|
val cause = RuntimeException()
|
||||||
|
|
||||||
|
val result = loginErrorParser.parse(throwable = cause, password = A_VALID_PASSWORD)
|
||||||
|
|
||||||
|
result shouldBeEqualTo LoginErrorParser.LoginErrorResult(cause, usernameOrIdError = null, passwordError = null)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `given an invalid username error, when parsing, then has username error`() {
|
||||||
|
val cause = anInvalidUserNameError()
|
||||||
|
fakeErrorFormatter.given(cause, formatsTo = A_FORMATTED_ERROR_MESSAGE)
|
||||||
|
|
||||||
|
val result = loginErrorParser.parse(throwable = cause, password = A_VALID_PASSWORD)
|
||||||
|
|
||||||
|
result shouldBeEqualTo LoginErrorParser.LoginErrorResult(
|
||||||
|
cause,
|
||||||
|
usernameOrIdError = A_FORMATTED_ERROR_MESSAGE,
|
||||||
|
passwordError = null
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `given a homeserver unavailable error, when parsing, then has username error`() {
|
||||||
|
val cause = aHomeserverUnavailableError()
|
||||||
|
|
||||||
|
val result = loginErrorParser.parse(throwable = cause, password = A_VALID_PASSWORD)
|
||||||
|
|
||||||
|
result shouldBeEqualTo LoginErrorParser.LoginErrorResult(
|
||||||
|
cause,
|
||||||
|
usernameOrIdError = R.string.login_error_homeserver_not_found.toTestString(),
|
||||||
|
passwordError = null
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `given a login email unknown error, when parsing, then has username error`() {
|
||||||
|
val cause = aLoginEmailUnknownError()
|
||||||
|
|
||||||
|
val result = loginErrorParser.parse(throwable = cause, password = A_VALID_PASSWORD)
|
||||||
|
|
||||||
|
result shouldBeEqualTo LoginErrorParser.LoginErrorResult(
|
||||||
|
cause,
|
||||||
|
usernameOrIdError = R.string.login_login_with_email_error.toTestString(),
|
||||||
|
passwordError = null
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `given a password with surrounding spaces and an invalid password error, when parsing, then has password error`() {
|
||||||
|
val cause = anInvalidPasswordError()
|
||||||
|
|
||||||
|
val result = loginErrorParser.parse(throwable = cause, password = " $A_VALID_PASSWORD ")
|
||||||
|
|
||||||
|
result shouldBeEqualTo LoginErrorParser.LoginErrorResult(
|
||||||
|
cause,
|
||||||
|
usernameOrIdError = null,
|
||||||
|
passwordError = R.string.auth_invalid_login_param_space_in_password.toTestString()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2022 New Vector Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package im.vector.app.test.fakes
|
||||||
|
|
||||||
|
import im.vector.app.core.error.ErrorFormatter
|
||||||
|
import io.mockk.every
|
||||||
|
import io.mockk.mockk
|
||||||
|
|
||||||
|
class FakeErrorFormatter : ErrorFormatter by mockk() {
|
||||||
|
fun given(cause: Throwable, formatsTo: String) {
|
||||||
|
every { toHumanReadable(cause) } returns formatsTo
|
||||||
|
}
|
||||||
|
}
|
|
@ -25,4 +25,16 @@ fun a401ServerError() = Failure.ServerError(
|
||||||
MatrixError(MatrixError.M_UNAUTHORIZED, ""), HttpsURLConnection.HTTP_UNAUTHORIZED
|
MatrixError(MatrixError.M_UNAUTHORIZED, ""), HttpsURLConnection.HTTP_UNAUTHORIZED
|
||||||
)
|
)
|
||||||
|
|
||||||
|
fun anInvalidUserNameError() = Failure.ServerError(
|
||||||
|
MatrixError(MatrixError.M_INVALID_USERNAME, ""), HttpsURLConnection.HTTP_BAD_REQUEST
|
||||||
|
)
|
||||||
|
|
||||||
|
fun anInvalidPasswordError() = Failure.ServerError(
|
||||||
|
MatrixError(MatrixError.M_FORBIDDEN, "Invalid password"), HttpsURLConnection.HTTP_FORBIDDEN
|
||||||
|
)
|
||||||
|
|
||||||
|
fun aLoginEmailUnknownError() = Failure.ServerError(
|
||||||
|
MatrixError(MatrixError.M_FORBIDDEN, ""), HttpsURLConnection.HTTP_FORBIDDEN
|
||||||
|
)
|
||||||
|
|
||||||
fun aHomeserverUnavailableError() = Failure.NetworkConnection(UnknownHostException())
|
fun aHomeserverUnavailableError() = Failure.NetworkConnection(UnknownHostException())
|
||||||
|
|
Loading…
Reference in New Issue