feat: update new error message and translations

This commit is contained in:
2026-03-16 12:48:30 -03:00
parent 40f0c5a1d5
commit 5ae989a1cc
6 changed files with 106 additions and 65 deletions
@@ -35,26 +35,31 @@ describe('Portuguese Utils unit tests', () => {
it('should translate all server responses to pt_br', () => {
const keys: string[] = Object.keys(serverResponses);
expect(translateServerResponse(keys[0], 'pt_br')).toBe('Senha fraca: Senha deve possuir pelo menos 8 letras, 1 maiúscula, 1 caracter especial');
expect(translateServerResponse(keys[1], 'pt_br')).toBe('Senha fraca: Senha deve possuir pelo menos 1 maiúscula, 1 caracter especial');
expect(translateServerResponse(keys[2], 'pt_br')).toBe('Senha fraca: Senha deve possuir pelo menos 1 caracter especial');
expect(translateServerResponse(keys[3], 'pt_br')).toBe('E-mail já cadastrado!');
expect(translateServerResponse(keys[4], 'pt_br')).toBe('Proibido! Acesso negado');
expect(translateServerResponse(keys[5], 'pt_br')).toBe('Se o endereço de e-mail informado estiver associado a uma conta, você receberá um link para resetar a senha em breve.');
expect(translateServerResponse(keys[6], 'pt_br')).toBe('Erro Interno do Servidor!');
expect(translateServerResponse(keys[7], 'pt_br')).toBe('Limite máximo de tentativas atingido. Por favor aguarde 30 minutos');
expect(translateServerResponse(keys[8], 'pt_br')).toBe('Erro de rede ao tentar obter recursos.');
expect(translateServerResponse(keys[9], 'pt_br')).toBe('Por favor, confirme seu e-mail antes de continuar');
expect(translateServerResponse(keys[10], 'pt_br')).toBe('Por ravor, preencha todos os campos');
expect(translateServerResponse(keys[11], 'pt_br')).toBe('Por favor, informe seu e-mail');
expect(translateServerResponse(keys[12], 'pt_br')).toBe('Por favor, informe seu e-mail e senha!');
expect(translateServerResponse(keys[13], 'pt_br')).toBe('Por favor, informe a nova senha');
expect(translateServerResponse(keys[14], 'pt_br')).toBe('Por favor, digite pelo menos 3 letras');
expect(translateServerResponse(keys[15], 'pt_br')).toBe('O tamanho máximo do texto é 2000');
expect(translateServerResponse(keys[16], 'pt_br')).toBe('Erro desconhecido');
expect(translateServerResponse(keys[17], 'pt_br')).toBe('Identificação incorreta ou faltando');
expect(translateServerResponse(keys[18], 'pt_br')).toBe('Informação errada ou incompleta!');
expect(translateServerResponse(keys[19], 'pt_br')).toBe('E-mail ou senha inválidos!');
expect(translateServerResponse(keys[20], 'pt_br')).toBe('Nada para atualizar!');
expect(translateServerResponse(keys[0], 'pt_br')).toBe('Senha fraca: Senha deve possuir pelo menos 8 letras');
expect(translateServerResponse(keys[1], 'pt_br')).toBe('Senha fraca: Senha deve possuir pelo menos 8 letras, 1 caracter especial');
expect(translateServerResponse(keys[2], 'pt_br')).toBe('Senha fraca: Senha deve possuir pelo menos 8 letras, 1 número, 1 caracter especial');
expect(translateServerResponse(keys[3], 'pt_br')).toBe('Senha fraca: Senha deve possuir pelo menos 8 letras, 1 maiúscula, 1 número, 1 caracter especial');
expect(translateServerResponse(keys[4], 'pt_br')).toBe('Senha fraca: Senha deve possuir pelo menos 8 letras, 1 maiúscula, 1 caracter especial');
expect(translateServerResponse(keys[5], 'pt_br')).toBe('Senha fraca: Senha deve possuir pelo menos 1 maiúscula, 1 caracter especial');
expect(translateServerResponse(keys[6], 'pt_br')).toBe('Senha fraca: Senha deve possuir pelo menos 1 caracter especial');
expect(translateServerResponse(keys[7], 'pt_br')).toBe('Senha fraca: Senha deve possuir pelo menos 1 número');
expect(translateServerResponse(keys[8], 'pt_br')).toBe('E-mail já cadastrado!');
expect(translateServerResponse(keys[9], 'pt_br')).toBe('Proibido! Acesso negado');
expect(translateServerResponse(keys[10], 'pt_br')).toBe('Se o endereço de e-mail informado estiver associado a uma conta, você receberá um link para resetar a senha em breve.');
expect(translateServerResponse(keys[11], 'pt_br')).toBe('Erro Interno do Servidor!');
expect(translateServerResponse(keys[12], 'pt_br')).toBe('Limite máximo de tentativas atingido. Por favor aguarde 30 minutos');
expect(translateServerResponse(keys[13], 'pt_br')).toBe('Erro de rede ao tentar obter recursos.');
expect(translateServerResponse(keys[14], 'pt_br')).toBe('Por favor, confirme seu e-mail antes de continuar');
expect(translateServerResponse(keys[15], 'pt_br')).toBe('Por favor, preencha todos os campos');
expect(translateServerResponse(keys[16], 'pt_br')).toBe('Por favor, informe seu e-mail');
expect(translateServerResponse(keys[17], 'pt_br')).toBe('Por favor, informe seu e-mail e senha!');
expect(translateServerResponse(keys[18], 'pt_br')).toBe('Por favor, informe a nova senha');
expect(translateServerResponse(keys[19], 'pt_br')).toBe('Por favor, digite pelo menos 3 letras');
expect(translateServerResponse(keys[20], 'pt_br')).toBe('O tamanho máximo do texto é 2000');
expect(translateServerResponse(keys[21], 'pt_br')).toBe('Erro desconhecido');
expect(translateServerResponse(keys[22], 'pt_br')).toBe('Identificação incorreta ou faltando');
expect(translateServerResponse(keys[23], 'pt_br')).toBe('Informação errada ou incompleta!');
expect(translateServerResponse(keys[24], 'pt_br')).toBe('E-mail ou senha inválidos!');
expect(translateServerResponse(keys[25], 'pt_br')).toBe('Nada para atualizar!');
});
});
+26 -21
View File
@@ -56,26 +56,31 @@ describe('Russian Utils unit tests', () => {
it('should translate all server responses to ru', () => {
const keys: string[] = Object.keys(serverResponses);
expect(translateServerResponse(keys[0], 'ru')).toBe('Неправильный пароль: Пароль должен содержать не менее 8 символов, 1 заглавную букву, 1 специальный символ.');
expect(translateServerResponse(keys[1], 'ru')).toBe('Неправильный пароль: Пароль должен содержать как минимум 1 заглавную букву и 1 специальный символ.');
expect(translateServerResponse(keys[2], 'ru')).toBe('Неправильный пароль: Пароль должен содержать хотя бы 1 специальный символ.');
expect(translateServerResponse(keys[3], 'ru')).toBe('Электронная почта уже используется!');
expect(translateServerResponse(keys[4], 'ru')).toBe('Доступ запрещен!');
expect(translateServerResponse(keys[5], 'ru')).toBe('Если введенный вами адрес электронной почты связан с учетной записью, вы вскоре получите ссылку для сброса пароля.');
expect(translateServerResponse(keys[6], 'ru')).toBe('Внутренняя ошибка сервера!');
expect(translateServerResponse(keys[7], 'ru')).toBe('Достигнут максимальный лимит попыток входа. Пожалуйста, подождите 30 минут');
expect(translateServerResponse(keys[8], 'ru')).toBe('Ошибка сети при попытке получить ресурс.');
expect(translateServerResponse(keys[9], 'ru')).toBe('Пожалуйста, подтвердите свой адрес электронной почты, прежде чем продолжить');
expect(translateServerResponse(keys[10], 'ru')).toBe('Пожалуйста, заполните все поля');
expect(translateServerResponse(keys[11], 'ru')).toBe('Пожалуйста, введите свой адрес электронной почты');
expect(translateServerResponse(keys[12], 'ru')).toBe('Пожалуйста, введите свое имя пользователя и пароль!');
expect(translateServerResponse(keys[13], 'ru')).toBe('Пожалуйста, введите новый пароль');
expect(translateServerResponse(keys[14], 'ru')).toBe('Пожалуйста, введите не менее 3 символов');
expect(translateServerResponse(keys[15], 'ru')).toBe('Максимальная длина текста — 2000 символов.');
expect(translateServerResponse(keys[16], 'ru')).toBe('Неизвестная ошибка');
expect(translateServerResponse(keys[17], 'ru')).toBe('Неправильная или отсутствующая идентификация');
expect(translateServerResponse(keys[18], 'ru')).toBe('Неверная или отсутствующая информация!');
expect(translateServerResponse(keys[19], 'ru')).toBe('Неправильный пользователь или пароль');
expect(translateServerResponse(keys[20], 'ru')).toBe('Нечего обновлять!');
expect(translateServerResponse(keys[0], 'ru')).toBe('Неправильный пароль: Пароль должен содержать не менее 8 символов.');
expect(translateServerResponse(keys[1], 'ru')).toBe('Неправильный пароль: Пароль должен содержать не менее 8 символов, 1 специальный символ.');
expect(translateServerResponse(keys[2], 'ru')).toBe('Неправильный пароль: Пароль должен содержать не менее 8 символов, 1 цифру, 1 специальный символ.');
expect(translateServerResponse(keys[3], 'ru')).toBe('Неправильный пароль: Пароль должен содержать не менее 8 символов, 1 заглавную букву, 1 цифру, 1 специальный символ.');
expect(translateServerResponse(keys[4], 'ru')).toBe('Неправильный пароль: Пароль должен содержать не менее 8 символов, 1 заглавную букву, 1 специальный символ.');
expect(translateServerResponse(keys[5], 'ru')).toBe('Неправильный пароль: Пароль должен содержать как минимум 1 заглавную букву и 1 специальный символ.');
expect(translateServerResponse(keys[6], 'ru')).toBe('Неправильный пароль: Пароль должен содержать хотя бы 1 специальный символ.');
expect(translateServerResponse(keys[7], 'ru')).toBe('Неправильный пароль: Пароль должен содержать не менее 1 цифры.');
expect(translateServerResponse(keys[8], 'ru')).toBe('Электронная почта уже используется!');
expect(translateServerResponse(keys[9], 'ru')).toBe('Доступ запрещен!');
expect(translateServerResponse(keys[10], 'ru')).toBe('Если введенный вами адрес электронной почты связан с учетной записью, вы вскоре получите ссылку для сброса пароля.');
expect(translateServerResponse(keys[11], 'ru')).toBe('Внутренняя ошибка сервера!');
expect(translateServerResponse(keys[12], 'ru')).toBe('Достигнут максимальный лимит попыток входа. Пожалуйста, подождите 30 минут');
expect(translateServerResponse(keys[13], 'ru')).toBe('Ошибка сети при попытке получить ресурс.');
expect(translateServerResponse(keys[14], 'ru')).toBe('Пожалуйста, подтвердите свой адрес электронной почты, прежде чем продолжить');
expect(translateServerResponse(keys[15], 'ru')).toBe('Пожалуйста, заполните все поля');
expect(translateServerResponse(keys[16], 'ru')).toBe('Пожалуйста, введите свой адрес электронной почты');
expect(translateServerResponse(keys[17], 'ru')).toBe('Пожалуйста, введите свое имя пользователя и пароль!');
expect(translateServerResponse(keys[18], 'ru')).toBe('Пожалуйста, введите новый пароль');
expect(translateServerResponse(keys[19], 'ru')).toBe('Пожалуйста, введите не менее 3 символов');
expect(translateServerResponse(keys[20], 'ru')).toBe('Максимальная длина текста — 2000 символов.');
expect(translateServerResponse(keys[21], 'ru')).toBe('Неизвестная ошибка');
expect(translateServerResponse(keys[22], 'ru')).toBe('Неправильная или отсутствующая идентификация');
expect(translateServerResponse(keys[23], 'ru')).toBe('Неверная или отсутствующая информация!');
expect(translateServerResponse(keys[24], 'ru')).toBe('Неправильный пользователь или пароль');
expect(translateServerResponse(keys[25], 'ru')).toBe('Нечего обновлять!');
});
});
+26 -21
View File
@@ -35,26 +35,31 @@ describe('Spanish Utils unit tests', () => {
it('should translate all server responses to es', () => {
const keys: string[] = Object.keys(serverResponses);
expect(translateServerResponse(keys[0], 'es')).toBe('Contraseña inválida: La contraseña debe tener al menos 8 caracteres, 1 mayúscula y 1 carácter especial');
expect(translateServerResponse(keys[1], 'es')).toBe('Contraseña inválida: La contraseña debe tener al menos 1 mayúscula y 1 carácter especial');
expect(translateServerResponse(keys[2], 'es')).toBe('Contraseña inválida: La contraseña debe tener al menos 1 carácter especial');
expect(translateServerResponse(keys[3], 'es')).toBe('¡El correo ya está registrado!');
expect(translateServerResponse(keys[4], 'es')).toBe('¡Prohibido! Acceso denegado');
expect(translateServerResponse(keys[5], 'es')).toBe('Si la dirección de correo electrónico ingresada está asociada a una cuenta, recibirá un enlace para restablecer su contraseña en breve.');
expect(translateServerResponse(keys[6], 'es')).toBe('¡Error interno del servidor!');
expect(translateServerResponse(keys[7], 'es')).toBe('Has alcanzado el límite máximo de intentos de inicio de sesión. Por favor, espera 30 minutos');
expect(translateServerResponse(keys[8], 'es')).toBe('Error de red al intentar obtener el recurso.');
expect(translateServerResponse(keys[9], 'es')).toBe('Por favor, confirme su correo electrónico antes de continuar');
expect(translateServerResponse(keys[10], 'es')).toBe('Por favor, completa todos los campos');
expect(translateServerResponse(keys[11], 'es')).toBe('Por favor, ingresa tu correo electronico');
expect(translateServerResponse(keys[12], 'es')).toBe('¡Por favor, ingresa tu correo electronico y contraseña!');
expect(translateServerResponse(keys[13], 'es')).toBe('Por favor, rellene la nueva contraseña');
expect(translateServerResponse(keys[14], 'es')).toBe('¡Por favor, escriba al menos 3 caracteres!');
expect(translateServerResponse(keys[15], 'es')).toBe('La longitud máxima del texto es 2000');
expect(translateServerResponse(keys[16], 'es')).toBe('Error desconocido');
expect(translateServerResponse(keys[17], 'es')).toBe('Identificación incorrecta o faltante');
expect(translateServerResponse(keys[18], 'es')).toBe('¡Información incorrecta o incompleta!');
expect(translateServerResponse(keys[19], 'es')).toBe(Usuario o contraseña incorrectos!');
expect(translateServerResponse(keys[20], 'es')).toBe('¡Nada que actualizar!');
expect(translateServerResponse(keys[0], 'es')).toBe('Contraseña inválida: La contraseña debe tener al menos 8 caracteres');
expect(translateServerResponse(keys[1], 'es')).toBe('Contraseña inválida: La contraseña debe tener al menos 8 caracteres, 1 carácter especial');
expect(translateServerResponse(keys[2], 'es')).toBe('Contraseña inválida: La contraseña debe tener al menos 8 caracteres, 1 número, 1 carácter especial');
expect(translateServerResponse(keys[3], 'es')).toBe('Contraseña inválida: La contraseña debe tener al menos 8 caracteres, 1 mayúscula, 1 número, 1 carácter especial');
expect(translateServerResponse(keys[4], 'es')).toBe('Contraseña inválida: La contraseña debe tener al menos 8 caracteres, 1 mayúscula y 1 carácter especial');
expect(translateServerResponse(keys[5], 'es')).toBe('Contraseña inválida: La contraseña debe tener al menos 1 mayúscula y 1 carácter especial');
expect(translateServerResponse(keys[6], 'es')).toBe('Contraseña inválida: La contraseña debe tener al menos 1 carácter especial');
expect(translateServerResponse(keys[7], 'es')).toBe('Contraseña inválida: La contraseña debe tener al menos 1 número');
expect(translateServerResponse(keys[8], 'es')).toBe('¡El correo ya está registrado!');
expect(translateServerResponse(keys[9], 'es')).toBe('¡Prohibido! Acceso denegado');
expect(translateServerResponse(keys[10], 'es')).toBe('Si la dirección de correo electrónico ingresada está asociada a una cuenta, recibirá un enlace para restablecer su contraseña en breve.');
expect(translateServerResponse(keys[11], 'es')).toBe('¡Error interno del servidor!');
expect(translateServerResponse(keys[12], 'es')).toBe('Has alcanzado el límite máximo de intentos de inicio de sesión. Por favor, espera 30 minutos');
expect(translateServerResponse(keys[13], 'es')).toBe('Error de red al intentar obtener el recurso.');
expect(translateServerResponse(keys[14], 'es')).toBe('Por favor, confirme su correo electrónico antes de continuar');
expect(translateServerResponse(keys[15], 'es')).toBe('Por favor, completa todos los campos');
expect(translateServerResponse(keys[16], 'es')).toBe('Por favor, ingresa tu correo electronico');
expect(translateServerResponse(keys[17], 'es')).toBe('¡Por favor, ingresa tu correo electronico y contraseña!');
expect(translateServerResponse(keys[18], 'es')).toBe('Por favor, rellene la nueva contraseña');
expect(translateServerResponse(keys[19], 'es')).toBe(Por favor, escriba al menos 3 caracteres!');
expect(translateServerResponse(keys[20], 'es')).toBe('La longitud máxima del texto es 2000');
expect(translateServerResponse(keys[21], 'es')).toBe('Error desconocido');
expect(translateServerResponse(keys[22], 'es')).toBe('Identificación incorrecta o faltante');
expect(translateServerResponse(keys[23], 'es')).toBe('¡Información incorrecta o incompleta!');
expect(translateServerResponse(keys[24], 'es')).toBe('¡Usuario o contraseña incorrectos!');
expect(translateServerResponse(keys[25], 'es')).toBe('¡Nada que actualizar!');
});
});
+7 -1
View File
@@ -65,7 +65,13 @@ async function handleResponse(response: Response) {
const contentType = response.headers.get('content-type');
if (contentType && contentType.includes('application/json')) {
const data = await response.json();
throw new Error(data.message);
if ('message' in data && typeof data.message === 'string') {
throw new Error(data.message);
}
if ('fields' in data && Array.isArray(data.fields)) {
const firstError = data.fields[0].fieldMessage as string;
throw new Error(firstError);
}
}
handleError(response.status);
}
+16 -1
View File
@@ -64,6 +64,11 @@ export const timeAgoTranslations: Record<string, string> = {
};
export const serverResponsesTranslations: Record<string, string> = {
BAD_PASSWORD_8_pt_br: 'Senha fraca: Senha deve possuir pelo menos 8 letras',
BAD_PASSWORD_7_pt_br: 'Senha fraca: Senha deve possuir pelo menos 8 letras, 1 caracter especial',
BAD_PASSWORD_6_pt_br: 'Senha fraca: Senha deve possuir pelo menos 8 letras, 1 número, 1 caracter especial',
BAD_PASSWORD_5_pt_br: 'Senha fraca: Senha deve possuir pelo menos 8 letras, 1 maiúscula, 1 número, 1 caracter especial',
BAD_PASSWORD_4_pt_br: 'Senha fraca: Senha deve possuir pelo menos 1 número',
BAD_PASSWORD_3_pt_br: 'Senha fraca: Senha deve possuir pelo menos 8 letras, 1 maiúscula, 1 caracter especial',
BAD_PASSWORD_2_pt_br: 'Senha fraca: Senha deve possuir pelo menos 1 maiúscula, 1 caracter especial',
BAD_PASSWORD_1_pt_br: 'Senha fraca: Senha deve possuir pelo menos 1 caracter especial',
@@ -74,7 +79,7 @@ export const serverResponsesTranslations: Record<string, string> = {
INVALID_CREDENTIALS_pt_br: 'E-mail ou senha inválidos!',
MAX_LOGIN_ATTEMPT_pt_br: 'Limite máximo de tentativas atingido. Por favor aguarde 30 minutos',
NETWORK_ERROR_pt_br: 'Erro de rede ao tentar obter recursos.',
FILL_ALL_FIELDS_pt_br: 'Por ravor, preencha todos os campos',
FILL_ALL_FIELDS_pt_br: 'Por favor, preencha todos os campos',
FILL_NEW_PASSWORD_pt_br: 'Por favor, informe a nova senha',
FILL_USER_pt_br: 'Por favor, informe seu e-mail',
FILL_USER_AND_PASS_pt_br: 'Por favor, informe seu e-mail e senha!',
@@ -86,6 +91,11 @@ export const serverResponsesTranslations: Record<string, string> = {
WRONG_OR_MISSING_INFO_pt_br: 'Informação errada ou incompleta!',
NOTHING_TO_UPDATE_pt_br: 'Nada para atualizar!',
BAD_PASSWORD_8_es: 'Contraseña inválida: La contraseña debe tener al menos 8 caracteres',
BAD_PASSWORD_7_es: 'Contraseña inválida: La contraseña debe tener al menos 8 caracteres, 1 carácter especial',
BAD_PASSWORD_6_es: 'Contraseña inválida: La contraseña debe tener al menos 8 caracteres, 1 número, 1 carácter especial',
BAD_PASSWORD_5_es: 'Contraseña inválida: La contraseña debe tener al menos 8 caracteres, 1 mayúscula, 1 número, 1 carácter especial',
BAD_PASSWORD_4_es: 'Contraseña inválida: La contraseña debe tener al menos 1 número',
BAD_PASSWORD_3_es: 'Contraseña inválida: La contraseña debe tener al menos 8 caracteres, 1 mayúscula y 1 carácter especial',
BAD_PASSWORD_2_es: 'Contraseña inválida: La contraseña debe tener al menos 1 mayúscula y 1 carácter especial',
BAD_PASSWORD_1_es: 'Contraseña inválida: La contraseña debe tener al menos 1 carácter especial',
@@ -108,6 +118,11 @@ export const serverResponsesTranslations: Record<string, string> = {
WRONG_OR_MISSING_INFO_es: '¡Información incorrecta o incompleta!',
NOTHING_TO_UPDATE_es: '¡Nada que actualizar!',
BAD_PASSWORD_8_ru: 'Неправильный пароль: Пароль должен содержать не менее 8 символов.',
BAD_PASSWORD_7_ru: 'Неправильный пароль: Пароль должен содержать не менее 8 символов, 1 специальный символ.',
BAD_PASSWORD_6_ru: 'Неправильный пароль: Пароль должен содержать не менее 8 символов, 1 цифру, 1 специальный символ.',
BAD_PASSWORD_5_ru: 'Неправильный пароль: Пароль должен содержать не менее 8 символов, 1 заглавную букву, 1 цифру, 1 специальный символ.',
BAD_PASSWORD_4_ru: 'Неправильный пароль: Пароль должен содержать не менее 1 цифры.',
BAD_PASSWORD_3_ru: 'Неправильный пароль: Пароль должен содержать не менее 8 символов, 1 заглавную букву, 1 специальный символ.',
BAD_PASSWORD_2_ru: 'Неправильный пароль: Пароль должен содержать как минимум 1 заглавную букву и 1 специальный символ.',
BAD_PASSWORD_1_ru: 'Неправильный пароль: Пароль должен содержать хотя бы 1 специальный символ.',
+5
View File
@@ -1,7 +1,12 @@
export const serverResponses: Record<string, string> = {
'Bad password: Password must have at least at least 8 characters': 'BAD_PASSWORD_8',
'Bad password: Password must have at least at least 8 characters, 1 special character': 'BAD_PASSWORD_7',
'Bad password: Password must have at least at least 8 characters, 1 number, 1 special character': 'BAD_PASSWORD_6',
'Bad password: Password must have at least at least 8 characters, 1 uppercase, 1 number, 1 special character': 'BAD_PASSWORD_5',
'Bad password: Password must have at least at least 8 characters, 1 uppercase, 1 special character': 'BAD_PASSWORD_3',
'Bad password: Password must have at least 1 uppercase, 1 special character': 'BAD_PASSWORD_2',
'Bad password: Password must have at least 1 special character': 'BAD_PASSWORD_1',
'Bad password: Password must have at least 1 number': 'BAD_PASSWORD_4',
'Email already exists!': 'EMAIL_EXISTS',
'Forbidden! Access denied!': 'FORBIDDEN',
'If the email address you entered is associated with an account, you will receive a password reset link shortly.': 'RECOVER_PASSWORD',