test creds on signUp

This commit is contained in:
MaximOksiuta
2025-11-23 15:28:02 +03:00
parent 98a9216515
commit 576af0f9d2
2 changed files with 53 additions and 0 deletions
@@ -1,6 +1,7 @@
package com.prodhack.moscow2025.presentation.screens.register package com.prodhack.moscow2025.presentation.screens.register
import androidx.compose.foundation.Image import androidx.compose.foundation.Image
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.Spacer
@@ -15,6 +16,7 @@ import androidx.compose.foundation.layout.width
import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.AlertDialog
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.SnackbarDuration import androidx.compose.material3.SnackbarDuration
@@ -58,6 +60,7 @@ fun ErrorCollectorScope.RegisterScreen(
val formState by viewModel.formStateSignUp.collectAsState() val formState by viewModel.formStateSignUp.collectAsState()
var errorText by remember { mutableStateOf("") } var errorText by remember { mutableStateOf("") }
var isGeneratorDialogVisible by remember { mutableStateOf(false) }
val registerState by viewModel.registerState.collectAsStateWithCallbacks( val registerState by viewModel.registerState.collectAsStateWithCallbacks(
onInputError = { onInputError = {
errorText = it.error errorText = it.error
@@ -76,6 +79,29 @@ fun ErrorCollectorScope.RegisterScreen(
} }
) )
if (isGeneratorDialogVisible) {
AlertDialog(
onDismissRequest = { isGeneratorDialogVisible = false },
title = { Text("Генерация данных") },
text = { Text("Случайный email и пароль будут подставлены в поля.") },
confirmButton = {
TextButton(
onClick = {
viewModel.fillRandomCredentials()
isGeneratorDialogVisible = false
}
) {
Text("Сгенерировать данные")
}
},
dismissButton = {
TextButton(onClick = { isGeneratorDialogVisible = false }) {
Text("Отмена")
}
}
)
}
LaunchedEffect(registerState) { LaunchedEffect(registerState) {
if (registerState is UIState.Success) { if (registerState is UIState.Success) {
onSuccess() onSuccess()
@@ -117,6 +143,7 @@ fun ErrorCollectorScope.RegisterScreen(
contentDescription = null, contentDescription = null,
modifier = Modifier modifier = Modifier
.size(200.dp) .size(200.dp)
.clickable { isGeneratorDialogVisible = true }
) )
Text( Text(
text = "Регистрация", text = "Регистрация",
@@ -12,6 +12,7 @@ import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.update import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.koin.android.annotation.KoinViewModel import org.koin.android.annotation.KoinViewModel
import kotlin.random.Random
data class RegisterFormState( data class RegisterFormState(
val email: String = "", val email: String = "",
@@ -56,6 +57,31 @@ class RegisterViewModel(
} }
} }
fun fillRandomCredentials() {
val password = randomPassword()
val email = randomEmail()
_formStateSignUp.update {
it.copy(
email = email,
password = password,
confirmPassword = password,
errors = emptyMap()
)
}
}
private fun randomEmail(): String {
val symbols = "abcdefghijklmnopqrstuvwxyz"
val name = (1..8).joinToString("") { symbols.random().toString() }
val domain = (1..5).joinToString("") { symbols.random().toString() }
return "$name@$domain.com"
}
private fun randomPassword(length: Int = 12): String {
val symbols = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
return (1..length).joinToString("") { symbols.random().toString() } + "!"
}
fun submit() { fun submit() {
viewModelScope.launch { viewModelScope.launch {
val validation = validateFieldsUseCase.validateSignUp( val validation = validateFieldsUseCase.validateSignUp(