1
0
mirror of https://github.com/wulkanowy/wulkanowy.git synced 2024-09-20 06:19:09 -05:00

Add dynamic nick/email in login (#676)

This commit is contained in:
Dominik Korsa 2020-02-05 00:42:49 +01:00 committed by GitHub
parent 720a530a6c
commit bdbf1fe304
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 132 additions and 74 deletions

View File

@ -35,8 +35,8 @@ class LoginAdvancedFragment : BaseFragment(), LoginAdvancedView {
else -> "HYBRID" else -> "HYBRID"
} }
override val formNameValue: String override val formUsernameValue: String
get() = loginFormName.text.toString().trim() get() = loginFormUsername.text.toString().trim()
override val formPassValue: String override val formPassValue: String
get() = loginFormPass.text.toString().trim() get() = loginFormPass.text.toString().trim()
@ -45,8 +45,8 @@ class LoginAdvancedFragment : BaseFragment(), LoginAdvancedView {
private lateinit var hostValues: Array<String> private lateinit var hostValues: Array<String>
override val formHostValue: String? override val formHostValue: String
get() = hostValues.getOrNull(hostKeys.indexOf(loginFormHost.text.toString())) get() = hostValues.getOrNull(hostKeys.indexOf(loginFormHost.text.toString())).orEmpty()
override val formPinValue: String override val formPinValue: String
get() = loginFormPin.text.toString().trim() get() = loginFormPin.text.toString().trim()
@ -57,6 +57,12 @@ class LoginAdvancedFragment : BaseFragment(), LoginAdvancedView {
override val formTokenValue: String override val formTokenValue: String
get() = loginFormToken.text.toString().trim() get() = loginFormToken.text.toString().trim()
override val nicknameLabel: String
get() = getString(R.string.login_nickname_hint)
override val emailLabel: String
get() = getString(R.string.login_email_hint)
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_login_advanced, container, false) return inflater.inflate(R.layout.fragment_login_advanced, container, false)
} }
@ -70,7 +76,7 @@ class LoginAdvancedFragment : BaseFragment(), LoginAdvancedView {
hostKeys = resources.getStringArray(R.array.hosts_keys) hostKeys = resources.getStringArray(R.array.hosts_keys)
hostValues = resources.getStringArray(R.array.hosts_values) hostValues = resources.getStringArray(R.array.hosts_values)
loginFormName.doOnTextChanged { _, _, _, _ -> presenter.onNameTextChanged() } loginFormUsername.doOnTextChanged { _, _, _, _ -> presenter.onUsernameTextChanged() }
loginFormPass.doOnTextChanged { _, _, _, _ -> presenter.onPassTextChanged() } loginFormPass.doOnTextChanged { _, _, _, _ -> presenter.onPassTextChanged() }
loginFormPin.doOnTextChanged { _, _, _, _ -> presenter.onPinTextChanged() } loginFormPin.doOnTextChanged { _, _, _, _ -> presenter.onPinTextChanged() }
loginFormSymbol.doOnTextChanged { _, _, _, _ -> presenter.onSymbolTextChanged() } loginFormSymbol.doOnTextChanged { _, _, _, _ -> presenter.onSymbolTextChanged() }
@ -103,16 +109,20 @@ class LoginAdvancedFragment : BaseFragment(), LoginAdvancedView {
} }
} }
override fun setDefaultCredentials(name: String, pass: String, symbol: String, token: String, pin: String) { override fun setDefaultCredentials(username: String, pass: String, symbol: String, token: String, pin: String) {
loginFormName.setText(name) loginFormUsername.setText(username)
loginFormPass.setText(pass) loginFormPass.setText(pass)
loginFormToken.setText(token) loginFormToken.setText(token)
loginFormSymbol.setText(symbol) loginFormSymbol.setText(symbol)
loginFormPin.setText(pin) loginFormPin.setText(pin)
} }
override fun setErrorNameRequired() { override fun setUsernameLabel(label: String) {
with(loginFormNameLayout) { loginFormUsernameLayout.hint = label
}
override fun setErrorUsernameRequired() {
with(loginFormUsernameLayout) {
requestFocus() requestFocus()
error = getString(R.string.login_field_required) error = getString(R.string.login_field_required)
} }
@ -181,8 +191,8 @@ class LoginAdvancedFragment : BaseFragment(), LoginAdvancedView {
} }
} }
override fun clearNameError() { override fun clearUsernameError() {
loginFormNameLayout.error = null loginFormUsernameLayout.error = null
} }
override fun clearPassError() { override fun clearPassError() {
@ -202,7 +212,7 @@ class LoginAdvancedFragment : BaseFragment(), LoginAdvancedView {
} }
override fun showOnlyHybridModeInputs() { override fun showOnlyHybridModeInputs() {
loginFormNameLayout.visibility = View.VISIBLE loginFormUsernameLayout.visibility = View.VISIBLE
loginFormPassLayout.visibility = View.VISIBLE loginFormPassLayout.visibility = View.VISIBLE
loginFormHostLayout.visibility = View.VISIBLE loginFormHostLayout.visibility = View.VISIBLE
loginFormPinLayout.visibility = View.GONE loginFormPinLayout.visibility = View.GONE
@ -211,7 +221,7 @@ class LoginAdvancedFragment : BaseFragment(), LoginAdvancedView {
} }
override fun showOnlyScrapperModeInputs() { override fun showOnlyScrapperModeInputs() {
loginFormNameLayout.visibility = View.VISIBLE loginFormUsernameLayout.visibility = View.VISIBLE
loginFormPassLayout.visibility = View.VISIBLE loginFormPassLayout.visibility = View.VISIBLE
loginFormHostLayout.visibility = View.VISIBLE loginFormHostLayout.visibility = View.VISIBLE
loginFormPinLayout.visibility = View.GONE loginFormPinLayout.visibility = View.GONE
@ -220,7 +230,7 @@ class LoginAdvancedFragment : BaseFragment(), LoginAdvancedView {
} }
override fun showOnlyMobileApiModeInputs() { override fun showOnlyMobileApiModeInputs() {
loginFormNameLayout.visibility = View.GONE loginFormUsernameLayout.visibility = View.GONE
loginFormPassLayout.visibility = View.GONE loginFormPassLayout.visibility = View.GONE
loginFormHostLayout.visibility = View.GONE loginFormHostLayout.visibility = View.GONE
loginFormPinLayout.visibility = View.VISIBLE loginFormPinLayout.visibility = View.VISIBLE
@ -246,12 +256,17 @@ class LoginAdvancedFragment : BaseFragment(), LoginAdvancedView {
override fun notifyParentAccountLogged(students: List<Student>) { override fun notifyParentAccountLogged(students: List<Student>) {
(activity as? LoginActivity)?.onFormFragmentAccountLogged(students, Triple( (activity as? LoginActivity)?.onFormFragmentAccountLogged(students, Triple(
loginFormName.text.toString(), loginFormUsername.text.toString(),
loginFormPass.text.toString(), loginFormPass.text.toString(),
resources.getStringArray(R.array.hosts_values)[1] resources.getStringArray(R.array.hosts_values)[1]
)) ))
} }
override fun onResume() {
super.onResume()
presenter.updateUsernameLabel()
}
override fun onDestroyView() { override fun onDestroyView() {
super.onDestroyView() super.onDestroyView()
presenter.onDetachView() presenter.onDetachView()

View File

@ -65,13 +65,20 @@ class LoginAdvancedPresenter @Inject constructor(
} }
} }
fun updateUsernameLabel() {
view?.apply {
setUsernameLabel(if ("vulcan" in formHostValue || "fakelog" in formHostValue) emailLabel else nicknameLabel)
}
}
fun onHostSelected() { fun onHostSelected() {
view?.apply { view?.apply {
clearPassError() clearPassError()
clearNameError() clearUsernameError()
if (formHostValue?.contains("fakelog") == true) { if (formHostValue.contains("fakelog")) {
setDefaultCredentials("jan@fakelog.cf", "jan123", "powiatwulkanowy", "FK100000", "999999") setDefaultCredentials("jan@fakelog.cf", "jan123", "powiatwulkanowy", "FK100000", "999999")
} }
updateUsernameLabel()
} }
} }
@ -89,8 +96,8 @@ class LoginAdvancedPresenter @Inject constructor(
view?.clearPassError() view?.clearPassError()
} }
fun onNameTextChanged() { fun onUsernameTextChanged() {
view?.clearNameError() view?.clearUsernameError()
} }
fun onPinTextChanged() { fun onPinTextChanged() {
@ -137,7 +144,7 @@ class LoginAdvancedPresenter @Inject constructor(
} }
private fun getStudentsAppropriatesToLoginType(): Single<List<Student>> { private fun getStudentsAppropriatesToLoginType(): Single<List<Student>> {
val email = view?.formNameValue.orEmpty() val email = view?.formUsernameValue.orEmpty()
val password = view?.formPassValue.orEmpty() val password = view?.formPassValue.orEmpty()
val endpoint = view?.formHostValue.orEmpty() val endpoint = view?.formHostValue.orEmpty()
@ -153,7 +160,7 @@ class LoginAdvancedPresenter @Inject constructor(
} }
private fun validateCredentials(): Boolean { private fun validateCredentials(): Boolean {
val login = view?.formNameValue.orEmpty() val login = view?.formUsernameValue.orEmpty()
val password = view?.formPassValue.orEmpty() val password = view?.formPassValue.orEmpty()
val pin = view?.formPinValue.orEmpty() val pin = view?.formPinValue.orEmpty()
@ -181,7 +188,7 @@ class LoginAdvancedPresenter @Inject constructor(
} }
Sdk.Mode.SCRAPPER -> { Sdk.Mode.SCRAPPER -> {
if (login.isEmpty()) { if (login.isEmpty()) {
view?.setErrorNameRequired() view?.setErrorUsernameRequired()
isCorrect = false isCorrect = false
} }
@ -197,7 +204,7 @@ class LoginAdvancedPresenter @Inject constructor(
} }
Sdk.Mode.HYBRID -> { Sdk.Mode.HYBRID -> {
if (login.isEmpty()) { if (login.isEmpty()) {
view?.setErrorNameRequired() view?.setErrorUsernameRequired()
isCorrect = false isCorrect = false
} }

View File

@ -5,11 +5,11 @@ import io.github.wulkanowy.ui.base.BaseView
interface LoginAdvancedView : BaseView { interface LoginAdvancedView : BaseView {
val formNameValue: String val formUsernameValue: String
val formPassValue: String val formPassValue: String
val formHostValue: String? val formHostValue: String
val formLoginType: String val formLoginType: String
@ -19,11 +19,17 @@ interface LoginAdvancedView : BaseView {
val formTokenValue: String val formTokenValue: String
val nicknameLabel: String
val emailLabel: String
fun initView() fun initView()
fun setDefaultCredentials(name: String, pass: String, symbol: String, token: String, pin: String) fun setDefaultCredentials(username: String, pass: String, symbol: String, token: String, pin: String)
fun setErrorNameRequired() fun setUsernameLabel(label: String)
fun setErrorUsernameRequired()
fun setErrorPassRequired(focus: Boolean) fun setErrorPassRequired(focus: Boolean)
@ -31,7 +37,7 @@ interface LoginAdvancedView : BaseView {
fun setErrorPassIncorrect() fun setErrorPassIncorrect()
fun clearNameError() fun clearUsernameError()
fun clearPassError() fun clearPassError()

View File

@ -34,11 +34,20 @@ class LoginFormFragment : BaseFragment(), LoginFormView {
fun newInstance() = LoginFormFragment() fun newInstance() = LoginFormFragment()
} }
override val formNameValue get() = loginFormName.text.toString() override val formUsernameValue: String
get() = loginFormUsername.text.toString()
override val formPassValue get() = loginFormPass.text.toString() override val formPassValue: String
get() = loginFormPass.text.toString()
override val formHostValue get() = hostValues.getOrNull(hostKeys.indexOf(loginFormHost.text.toString())) override val formHostValue: String
get() = hostValues.getOrNull(hostKeys.indexOf(loginFormHost.text.toString())).orEmpty()
override val nicknameLabel: String
get() = getString(R.string.login_nickname_hint)
override val emailLabel: String
get() = getString(R.string.login_email_hint)
private lateinit var hostKeys: Array<String> private lateinit var hostKeys: Array<String>
@ -57,7 +66,7 @@ class LoginFormFragment : BaseFragment(), LoginFormView {
hostKeys = resources.getStringArray(R.array.hosts_keys) hostKeys = resources.getStringArray(R.array.hosts_keys)
hostValues = resources.getStringArray(R.array.hosts_values) hostValues = resources.getStringArray(R.array.hosts_values)
loginFormName.doOnTextChanged { _, _, _, _ -> presenter.onNameTextChanged() } loginFormUsername.doOnTextChanged { _, _, _, _ -> presenter.onUsernameTextChanged() }
loginFormPass.doOnTextChanged { _, _, _, _ -> presenter.onPassTextChanged() } loginFormPass.doOnTextChanged { _, _, _, _ -> presenter.onPassTextChanged() }
loginFormHost.setOnItemClickListener { _, _, _, _ -> presenter.onHostSelected() } loginFormHost.setOnItemClickListener { _, _, _, _ -> presenter.onHostSelected() }
loginFormSignIn.setOnClickListener { presenter.onSignInClick() } loginFormSignIn.setOnClickListener { presenter.onSignInClick() }
@ -76,13 +85,17 @@ class LoginFormFragment : BaseFragment(), LoginFormView {
} }
} }
override fun setCredentials(name: String, pass: String) { override fun setCredentials(username: String, pass: String) {
loginFormName.setText(name) loginFormUsername.setText(username)
loginFormPass.setText(pass) loginFormPass.setText(pass)
} }
override fun setErrorNameRequired() { override fun setUsernameLabel(label: String) {
with(loginFormNameLayout) { loginFormUsernameLayout.hint = label
}
override fun setErrorUsernameRequired() {
with(loginFormUsernameLayout) {
requestFocus() requestFocus()
error = getString(R.string.login_field_required) error = getString(R.string.login_field_required)
} }
@ -109,8 +122,8 @@ class LoginFormFragment : BaseFragment(), LoginFormView {
} }
} }
override fun clearNameError() { override fun clearUsernameError() {
loginFormNameLayout.error = null loginFormUsernameLayout.error = null
} }
override fun clearPassError() { override fun clearPassError() {
@ -163,6 +176,11 @@ class LoginFormFragment : BaseFragment(), LoginFormView {
context?.openInternetBrowser("https://wulkanowy.github.io/czesto-zadawane-pytania/dlaczego-nie-moge-sie-zalogowac", ::showMessage) context?.openInternetBrowser("https://wulkanowy.github.io/czesto-zadawane-pytania/dlaczego-nie-moge-sie-zalogowac", ::showMessage)
} }
override fun onResume() {
super.onResume()
presenter.updateUsernameLabel()
}
override fun openEmail() { override fun openEmail() {
context?.openEmailClient( context?.openEmailClient(
requireContext().getString(R.string.login_email_intent_title), requireContext().getString(R.string.login_email_intent_title),

View File

@ -42,10 +42,17 @@ class LoginFormPresenter @Inject constructor(
fun onHostSelected() { fun onHostSelected() {
view?.apply { view?.apply {
clearPassError() clearPassError()
clearNameError() clearUsernameError()
if (formHostValue?.contains("fakelog") == true) { if (formHostValue.contains("fakelog")) {
setCredentials("jan@fakelog.cf", "jan123") setCredentials("jan@fakelog.cf", "jan123")
} }
updateUsernameLabel()
}
}
fun updateUsernameLabel() {
view?.apply {
setUsernameLabel(if ("vulcan" in formHostValue || "fakelog" in formHostValue) emailLabel else nicknameLabel)
} }
} }
@ -53,12 +60,12 @@ class LoginFormPresenter @Inject constructor(
view?.clearPassError() view?.clearPassError()
} }
fun onNameTextChanged() { fun onUsernameTextChanged() {
view?.clearNameError() view?.clearUsernameError()
} }
fun onSignInClick() { fun onSignInClick() {
val email = view?.formNameValue.orEmpty().trim() val email = view?.formUsernameValue.orEmpty().trim()
val password = view?.formPassValue.orEmpty().trim() val password = view?.formPassValue.orEmpty().trim()
val endpoint = view?.formHostValue.orEmpty().trim() val endpoint = view?.formHostValue.orEmpty().trim()
@ -105,7 +112,7 @@ class LoginFormPresenter @Inject constructor(
var isCorrect = true var isCorrect = true
if (login.isEmpty()) { if (login.isEmpty()) {
view?.setErrorNameRequired() view?.setErrorUsernameRequired()
isCorrect = false isCorrect = false
} }

View File

@ -7,15 +7,21 @@ interface LoginFormView : BaseView {
fun initView() fun initView()
val formNameValue: String val formUsernameValue: String
val formPassValue: String val formPassValue: String
val formHostValue: String? val formHostValue: String
fun setCredentials(name: String, pass: String) val nicknameLabel: String
fun setErrorNameRequired() val emailLabel: String
fun setCredentials(username: String, pass: String)
fun setUsernameLabel(label: String)
fun setErrorUsernameRequired()
fun setErrorPassRequired(focus: Boolean) fun setErrorPassRequired(focus: Boolean)
@ -23,7 +29,7 @@ interface LoginFormView : BaseView {
fun setErrorPassIncorrect() fun setErrorPassIncorrect()
fun clearNameError() fun clearUsernameError()
fun clearPassError() fun clearPassError()

View File

@ -52,7 +52,7 @@
android:gravity="center" android:gravity="center"
android:orientation="horizontal" android:orientation="horizontal"
android:paddingTop="24dp" android:paddingTop="24dp"
app:layout_constraintBottom_toTopOf="@+id/loginFormNameLayout" app:layout_constraintBottom_toTopOf="@+id/loginFormUsernameLayout"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/loginFormHeader"> app:layout_constraintTop_toBottomOf="@+id/loginFormHeader">
@ -81,7 +81,7 @@
</RadioGroup> </RadioGroup>
<com.google.android.material.textfield.TextInputLayout <com.google.android.material.textfield.TextInputLayout
android:id="@+id/loginFormNameLayout" android:id="@+id/loginFormUsernameLayout"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox" style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
@ -98,7 +98,7 @@
app:layout_constraintTop_toBottomOf="@+id/loginTypeSwitch"> app:layout_constraintTop_toBottomOf="@+id/loginTypeSwitch">
<com.google.android.material.textfield.TextInputEditText <com.google.android.material.textfield.TextInputEditText
android:id="@+id/loginFormName" android:id="@+id/loginFormUsername"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:autofillHints="username|emailAddress" android:autofillHints="username|emailAddress"
@ -125,7 +125,7 @@
app:layout_constraintBottom_toTopOf="@+id/loginFormHostLayout" app:layout_constraintBottom_toTopOf="@+id/loginFormHostLayout"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/loginFormNameLayout" app:layout_constraintTop_toBottomOf="@+id/loginFormUsernameLayout"
app:passwordToggleEnabled="true"> app:passwordToggleEnabled="true">
<com.google.android.material.textfield.TextInputEditText <com.google.android.material.textfield.TextInputEditText

View File

@ -105,7 +105,7 @@
android:text="@string/login_header_default" android:text="@string/login_header_default"
android:textSize="16sp" android:textSize="16sp"
app:fontFamily="sans-serif-light" app:fontFamily="sans-serif-light"
app:layout_constraintBottom_toTopOf="@+id/loginFormNameLayout" app:layout_constraintBottom_toTopOf="@+id/loginFormUsernameLayout"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/loginFormContact" app:layout_constraintTop_toBottomOf="@+id/loginFormContact"
@ -113,7 +113,7 @@
<com.google.android.material.textfield.TextInputLayout <com.google.android.material.textfield.TextInputLayout
android:id="@+id/loginFormNameLayout" android:id="@+id/loginFormUsernameLayout"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox" style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
@ -130,7 +130,7 @@
app:layout_constraintTop_toBottomOf="@+id/loginFormHeader"> app:layout_constraintTop_toBottomOf="@+id/loginFormHeader">
<com.google.android.material.textfield.TextInputEditText <com.google.android.material.textfield.TextInputEditText
android:id="@+id/loginFormName" android:id="@+id/loginFormUsername"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:autofillHints="username|emailAddress" android:autofillHints="username|emailAddress"
@ -157,7 +157,7 @@
app:layout_constraintBottom_toTopOf="@+id/loginFormHostLayout" app:layout_constraintBottom_toTopOf="@+id/loginFormHostLayout"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/loginFormNameLayout" app:layout_constraintTop_toBottomOf="@+id/loginFormUsernameLayout"
app:passwordToggleEnabled="true"> app:passwordToggleEnabled="true">
<com.google.android.material.textfield.TextInputEditText <com.google.android.material.textfield.TextInputEditText

View File

@ -24,7 +24,8 @@
<!--Login--> <!--Login-->
<string name="login_header_default">Zaloguj się za pomocą konta ucznia lub rodzica</string> <string name="login_header_default">Zaloguj się za pomocą konta ucznia lub rodzica</string>
<string name="login_header_symbol">Podaj symbol</string> <string name="login_header_symbol">Podaj symbol</string>
<string name="login_nickname_hint">Email lub nick</string> <string name="login_nickname_hint">Nazwa użytkownika</string>
<string name="login_email_hint">Email</string>
<string name="login_password_hint">Hasło</string> <string name="login_password_hint">Hasło</string>
<string name="login_host_hint">Dziennik</string> <string name="login_host_hint">Dziennik</string>
<string name="login_symbol_hint">Symbol</string> <string name="login_symbol_hint">Symbol</string>

View File

@ -25,7 +25,8 @@
<!--Login--> <!--Login-->
<string name="login_header_default">Авторизируйтесь при помощи аккаунта ученика или родителя</string> <string name="login_header_default">Авторизируйтесь при помощи аккаунта ученика или родителя</string>
<string name="login_header_symbol">Впишите \"symbol\"</string> <string name="login_header_symbol">Впишите \"symbol\"</string>
<string name="login_nickname_hint">Электронная почта или имя пользователя</string> <string name="login_nickname_hint">Имя пользователя</string>
<string name="login_email_hint">Электронная почта</string>
<string name="login_password_hint">Пароль</string> <string name="login_password_hint">Пароль</string>
<string name="login_host_hint">Дневник</string> <string name="login_host_hint">Дневник</string>
<string name="login_type_api">Мобильный API</string> <string name="login_type_api">Мобильный API</string>

View File

@ -24,7 +24,8 @@
<!--Login--> <!--Login-->
<string name="login_header_default">Sign in with the student or parent account</string> <string name="login_header_default">Sign in with the student or parent account</string>
<string name="login_header_symbol">Enter the symbol</string> <string name="login_header_symbol">Enter the symbol</string>
<string name="login_nickname_hint">Email or nick</string> <string name="login_nickname_hint">Username</string>
<string name="login_email_hint">Email</string>
<string name="login_password_hint">Password</string> <string name="login_password_hint">Password</string>
<string name="login_host_hint">Register</string> <string name="login_host_hint">Register</string>
<string name="login_type_api">Mobile API</string> <string name="login_type_api">Mobile API</string>

View File

@ -4,7 +4,6 @@ import io.github.wulkanowy.TestSchedulersProvider
import io.github.wulkanowy.data.db.entities.Student import io.github.wulkanowy.data.db.entities.Student
import io.github.wulkanowy.data.repositories.student.StudentRepository import io.github.wulkanowy.data.repositories.student.StudentRepository
import io.github.wulkanowy.ui.modules.login.LoginErrorHandler import io.github.wulkanowy.ui.modules.login.LoginErrorHandler
import io.github.wulkanowy.utils.AppInfo
import io.github.wulkanowy.utils.FirebaseAnalyticsHelper import io.github.wulkanowy.utils.FirebaseAnalyticsHelper
import io.reactivex.Single import io.reactivex.Single
import org.junit.Before import org.junit.Before
@ -34,9 +33,6 @@ class LoginFormPresenterTest {
@Mock @Mock
lateinit var analytics: FirebaseAnalyticsHelper lateinit var analytics: FirebaseAnalyticsHelper
@Mock
lateinit var appInfo: AppInfo
private lateinit var presenter: LoginFormPresenter private lateinit var presenter: LoginFormPresenter
@Before @Before
@ -54,36 +50,36 @@ class LoginFormPresenterTest {
@Test @Test
fun emptyNicknameLoginTest() { fun emptyNicknameLoginTest() {
`when`(loginFormView.formNameValue).thenReturn("") `when`(loginFormView.formUsernameValue).thenReturn("")
`when`(loginFormView.formPassValue).thenReturn("test123") `when`(loginFormView.formPassValue).thenReturn("test123")
`when`(loginFormView.formHostValue).thenReturn("https://fakelog.cf") `when`(loginFormView.formHostValue).thenReturn("https://fakelog.cf")
presenter.onSignInClick() presenter.onSignInClick()
verify(loginFormView).setErrorNameRequired() verify(loginFormView).setErrorUsernameRequired()
verify(loginFormView, never()).setErrorPassRequired(false) verify(loginFormView, never()).setErrorPassRequired(false)
verify(loginFormView, never()).setErrorPassInvalid(false) verify(loginFormView, never()).setErrorPassInvalid(false)
} }
@Test @Test
fun emptyPassLoginTest() { fun emptyPassLoginTest() {
`when`(loginFormView.formNameValue).thenReturn("@") `when`(loginFormView.formUsernameValue).thenReturn("@")
`when`(loginFormView.formPassValue).thenReturn("") `when`(loginFormView.formPassValue).thenReturn("")
`when`(loginFormView.formHostValue).thenReturn("https://fakelog.cf") `when`(loginFormView.formHostValue).thenReturn("https://fakelog.cf")
presenter.onSignInClick() presenter.onSignInClick()
verify(loginFormView, never()).setErrorNameRequired() verify(loginFormView, never()).setErrorUsernameRequired()
verify(loginFormView).setErrorPassRequired(true) verify(loginFormView).setErrorPassRequired(true)
verify(loginFormView, never()).setErrorPassInvalid(false) verify(loginFormView, never()).setErrorPassInvalid(false)
} }
@Test @Test
fun invalidPassLoginTest() { fun invalidPassLoginTest() {
`when`(loginFormView.formNameValue).thenReturn("@") `when`(loginFormView.formUsernameValue).thenReturn("@")
`when`(loginFormView.formPassValue).thenReturn("123") `when`(loginFormView.formPassValue).thenReturn("123")
`when`(loginFormView.formHostValue).thenReturn("https://fakelog.cf") `when`(loginFormView.formHostValue).thenReturn("https://fakelog.cf")
presenter.onSignInClick() presenter.onSignInClick()
verify(loginFormView, never()).setErrorNameRequired() verify(loginFormView, never()).setErrorUsernameRequired()
verify(loginFormView, never()).setErrorPassRequired(true) verify(loginFormView, never()).setErrorPassRequired(true)
verify(loginFormView).setErrorPassInvalid(true) verify(loginFormView).setErrorPassInvalid(true)
} }
@ -93,7 +89,7 @@ class LoginFormPresenterTest {
val studentTest = Student(email = "test@", password = "123", scrapperBaseUrl = "https://fakelog.cf", loginType = "AUTO", studentName = "", schoolSymbol = "", schoolName = "", studentId = 0, classId = 1, isCurrent = false, symbol = "", registrationDate = now(), className = "", mobileBaseUrl = "", privateKey = "", certificateKey = "", loginMode = "", userLoginId = 0, isParent = false) val studentTest = Student(email = "test@", password = "123", scrapperBaseUrl = "https://fakelog.cf", loginType = "AUTO", studentName = "", schoolSymbol = "", schoolName = "", studentId = 0, classId = 1, isCurrent = false, symbol = "", registrationDate = now(), className = "", mobileBaseUrl = "", privateKey = "", certificateKey = "", loginMode = "", userLoginId = 0, isParent = false)
doReturn(Single.just(listOf(studentTest))).`when`(repository).getStudentsScrapper(anyString(), anyString(), anyString(), anyString()) doReturn(Single.just(listOf(studentTest))).`when`(repository).getStudentsScrapper(anyString(), anyString(), anyString(), anyString())
`when`(loginFormView.formNameValue).thenReturn("@") `when`(loginFormView.formUsernameValue).thenReturn("@")
`when`(loginFormView.formPassValue).thenReturn("123456") `when`(loginFormView.formPassValue).thenReturn("123456")
`when`(loginFormView.formHostValue).thenReturn("https://fakelog.cf") `when`(loginFormView.formHostValue).thenReturn("https://fakelog.cf")
presenter.onSignInClick() presenter.onSignInClick()
@ -109,7 +105,7 @@ class LoginFormPresenterTest {
fun loginEmptyTest() { fun loginEmptyTest() {
doReturn(Single.just(emptyList<Student>())) doReturn(Single.just(emptyList<Student>()))
.`when`(repository).getStudentsScrapper(anyString(), anyString(), anyString(), anyString()) .`when`(repository).getStudentsScrapper(anyString(), anyString(), anyString(), anyString())
`when`(loginFormView.formNameValue).thenReturn("@") `when`(loginFormView.formUsernameValue).thenReturn("@")
`when`(loginFormView.formPassValue).thenReturn("123456") `when`(loginFormView.formPassValue).thenReturn("123456")
`when`(loginFormView.formHostValue).thenReturn("https://fakelog.cf") `when`(loginFormView.formHostValue).thenReturn("https://fakelog.cf")
presenter.onSignInClick() presenter.onSignInClick()
@ -125,7 +121,7 @@ class LoginFormPresenterTest {
fun loginEmptyTwiceTest() { fun loginEmptyTwiceTest() {
doReturn(Single.just(emptyList<Student>())) doReturn(Single.just(emptyList<Student>()))
.`when`(repository).getStudentsScrapper(anyString(), anyString(), anyString(), anyString()) .`when`(repository).getStudentsScrapper(anyString(), anyString(), anyString(), anyString())
`when`(loginFormView.formNameValue).thenReturn("@") `when`(loginFormView.formUsernameValue).thenReturn("@")
`when`(loginFormView.formPassValue).thenReturn("123456") `when`(loginFormView.formPassValue).thenReturn("123456")
`when`(loginFormView.formHostValue).thenReturn("https://fakelog.cf") `when`(loginFormView.formHostValue).thenReturn("https://fakelog.cf")
presenter.onSignInClick() presenter.onSignInClick()
@ -142,7 +138,7 @@ class LoginFormPresenterTest {
fun loginErrorTest() { fun loginErrorTest() {
val testException = RuntimeException("test") val testException = RuntimeException("test")
doReturn(Single.error<List<Student>>(testException)).`when`(repository).getStudentsScrapper(anyString(), anyString(), anyString(), anyString()) doReturn(Single.error<List<Student>>(testException)).`when`(repository).getStudentsScrapper(anyString(), anyString(), anyString(), anyString())
`when`(loginFormView.formNameValue).thenReturn("@") `when`(loginFormView.formUsernameValue).thenReturn("@")
`when`(loginFormView.formPassValue).thenReturn("123456") `when`(loginFormView.formPassValue).thenReturn("123456")
`when`(loginFormView.formHostValue).thenReturn("https://fakelog.cf") `when`(loginFormView.formHostValue).thenReturn("https://fakelog.cf")
presenter.onSignInClick() presenter.onSignInClick()