Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions e2e-frontend/login.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -108,5 +108,9 @@ test.describe('Login', () => {
await expect(page.getByRole('alert')).toContainText(/desactivada/i, {
timeout: 10000,
});
await expect(page.getByRole('alert')).toContainText(
'admin@carpoolear.com.ar',
{ timeout: 10000 }
);
});
});
21 changes: 21 additions & 0 deletions src/components/views/Login.view.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,3 +29,24 @@ describe('Login password visibility toggle', () => {
expect(messages[locale].ocultarContrasena).toBeTruthy();
});
});

describe('Login contact messages', () => {
it('uses config admin_email for banned and inactive account copy', () => {
expect(loginSource).toContain('loginContactMessages.js');
expect(loginSource).toContain('getLoginBannedMessage');
expect(loginSource).toContain('getLoginInactiveAccountMessage');
expect(loginSource).toContain('this.config?.admin_email');
expect(loginSource).toContain('config.admin_email');
expect(loginSource).not.toContain("$t('carpoolearMail')");
});

it.each(['arg', 'en'])(
'keeps login contact i18n keys parameterized in %s locale',
(locale) => {
expect(messages[locale].usuarioBanneado).toContain('{adminEmail}');
expect(messages[locale].paraIngresarCuenta).toContain('{adminEmail}');
expect(messages[locale].usuarioBanneado).not.toContain('@@');
expect(messages[locale].paraIngresarCuenta).not.toContain('@@');
}
);
});
65 changes: 42 additions & 23 deletions src/components/views/Login.vue
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
<div class="alert alert-warning" role="alert" v-if="!isUnderstood">
{{ $t('recuperarDeFacebook') }}
<a :href="'mailto:' + config.admin_email">{{
$t('carpoolearMail')
config.admin_email
}}</a>
{{ $t('recuperarDeFacebook2') }}
<div class="row form-inline form-warning-login">
Expand Down Expand Up @@ -91,7 +91,7 @@
role="alert"
v-if="showUserBannedInfo"
>
{{ $t('usuarioBanneado') }}
{{ loginBannedMessage }}
</div>
<AppButton
v-jump
Expand Down Expand Up @@ -224,6 +224,10 @@ import AppInfoCard from '../ui/AppInfoCard.vue';
import AppAuthPage from '../ui/AppAuthPage.vue';
import cache from '../../services/cache';
import { isOfflineApiError } from '../../utils/apiErrors.js';
import {
getLoginBannedMessage,
getLoginInactiveAccountMessage
} from '../../utils/loginContactMessages.js';
import {
CARPOOLEAR_FACEBOOK_URL,
CARPOOLEAR_INSTAGRAM_URL
Expand Down Expand Up @@ -291,6 +295,12 @@ export default {
} else {
return 'col-sm-12 col-md-12';
}
},
loginBannedMessage() {
return getLoginBannedMessage(
this.$t.bind(this),
this.config?.admin_email || ''
);
}
},
methods: {
Expand Down Expand Up @@ -346,29 +356,38 @@ export default {
// router.rememberBack();
},
(error) => {
if (isOfflineApiError(error)) {
try {
if (isOfflineApiError(error)) {
return;
}
const userNotActive =
error && error.message === 'user_not_active';
const userBanned =
error && error.message === 'user_banned';
const adminEmail = this.config?.admin_email || '';
const message = userNotActive
? getLoginInactiveAccountMessage(
this.$t.bind(this),
adminEmail
)
: userBanned
? getLoginBannedMessage(
this.$t.bind(this),
adminEmail
)
: this.$t('emailOContra');
this.showUserNotActiveInfo = userNotActive;
this.showUserBannedInfo = userBanned;
dialogs.message(message, {
duration: 10,
estado: 'error'
});
if (error) {
this.error = error.error;
}
} finally {
this.loading = false;
return;
}
const userNotActive =
error && error.message === 'user_not_active';
const userBanned =
error && error.message === 'user_banned';
const message = userNotActive
? this.$t('paraIngresarCuenta')
: userBanned
? this.$t('usuarioBanneado')
: this.$t('emailOContra');
this.showUserNotActiveInfo = userNotActive;
this.showUserBannedInfo = userBanned;
dialogs.message(message, {
duration: 10,
estado: 'error'
});
if (error) {
this.error = error.error;
}
this.loading = false;
}
);
} else {
Expand Down
10 changes: 4 additions & 6 deletions src/language/i18n.js
Original file line number Diff line number Diff line change
Expand Up @@ -1175,7 +1175,6 @@ const messages = {
carpoolear: 'Carpoolear',
recuperarDeFacebook:
'Si carpooleabas antes del 5/8/17, tenés que entrar al sistema mediante el botón "ingresar con Facebook" para seguir usando el mismo usuario y recuperar tus calificaciones. Si no podés entrar, escribinos a',
carpoolearMail: 'carpoolear@@stsrosario.org.ar',
recuperarDeFacebook2: 'o a nuestro Facebook así te ayudamos :)',
noMostrar: 'No volver a mostrar',
entendido: 'ENTENDIDO!',
Expand Down Expand Up @@ -1204,9 +1203,9 @@ const messages = {
alIngresarApple: 'Al ingresar con Apple estas aceptando nuestros',
alIngresarFace: 'Al ingresar con Facebook estas aceptando nuestros',
usuarioBanneado:
'Tu cuenta se encuentra desactivada por el equipo de Carpoolear. Ponte en contacto con nosotros a contacto@@carpoolear.com para solucionar el inconveniente.',
'Tu cuenta se encuentra desactivada por el equipo de Carpoolear. Ponte en contacto con nosotros a {adminEmail} para solucionar el inconveniente.',
paraIngresarCuenta:
'Esta cuenta no se encuentra confirmada. Debes activarla desde tu correo, busca en tu bandeja de entrada/spam por un correo nuestro. Sino encuentras el correo ponte en contacto con nosotros a contacto@@carpoolear.com',
'Esta cuenta no se encuentra confirmada. Debes activarla desde tu correo, busca en tu bandeja de entrada/spam por un correo nuestro. Sino encuentras el correo ponte en contacto con nosotros a {adminEmail}',
emailOContra: 'Email o password incorrecto.',
solicitudEnviada:
'Su solicitud ya fue enviada, aguarde un momento por favor.',
Expand Down Expand Up @@ -4856,7 +4855,6 @@ const messages = {
carpoolear: 'Carpoolear',
recuperarDeFacebook:
'If you were carpooling before 8/5/17, you need to enter the system using the "log in with Facebook" button to continue using the same user and recover your ratings. If you cannot log in, write to us at',
carpoolearMail: 'carpoolear@@stsrosario.org.ar',
recuperarDeFacebook2: 'or to our Facebook so we can help you :)',
noMostrar: 'Do not show again',
entendido: 'GOT IT!',
Expand Down Expand Up @@ -4884,9 +4882,9 @@ const messages = {
alIngresarApple: 'By logging in with Apple you are accepting our',
alIngresarFace: 'By logging in with Facebook you are accepting our',
usuarioBanneado:
'Your account has been deactivated by the Carpoolear team. Contact us at contacto@@carpoolear.com to resolve the issue.',
'Your account has been deactivated by the Carpoolear team. Contact us at {adminEmail} to resolve the issue.',
paraIngresarCuenta:
'This account is not confirmed. You must activate it from your email, check your inbox/spam for an email from us. If you cannot find the email, contact us at contacto@@carpoolear.com',
'This account is not confirmed. You must activate it from your email, check your inbox/spam for an email from us. If you cannot find the email, contact us at {adminEmail}',
emailOContra: 'Incorrect email or password.',
solicitudEnviada:
'Your request has already been sent, please wait a moment.',
Expand Down
7 changes: 7 additions & 0 deletions src/utils/loginContactMessages.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
export function getLoginBannedMessage(t, adminEmail) {
return t('usuarioBanneado', { adminEmail });
}

export function getLoginInactiveAccountMessage(t, adminEmail) {
return t('paraIngresarCuenta', { adminEmail });
}
45 changes: 45 additions & 0 deletions src/utils/loginContactMessages.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import { describe, expect, it } from 'vitest';
import i18n from '../i18n.js';
import {
getLoginBannedMessage,
getLoginInactiveAccountMessage
} from './loginContactMessages.js';

const ADMIN_EMAIL = 'admin@carpoolear.com.ar';

describe('loginContactMessages', () => {
it('builds banned user message with admin email from config', () => {
const message = getLoginBannedMessage(i18n.global.t, ADMIN_EMAIL);

expect(message).toContain(ADMIN_EMAIL);
expect(message).not.toContain('@@');
expect(message).toMatch(/desactivada/i);
});

it('builds inactive account message with admin email from config', () => {
const message = getLoginInactiveAccountMessage(
i18n.global.t,
ADMIN_EMAIL
);

expect(message).toContain(ADMIN_EMAIL);
expect(message).not.toContain('@@');
expect(message).toMatch(/confirmada/i);
});

it('does not throw when translating login contact messages in production mode', () => {
const previousNodeEnv = process.env.NODE_ENV;
process.env.NODE_ENV = 'production';

try {
expect(() =>
getLoginBannedMessage(i18n.global.t, ADMIN_EMAIL)
).not.toThrow();
expect(() =>
getLoginInactiveAccountMessage(i18n.global.t, ADMIN_EMAIL)
).not.toThrow();
} finally {
process.env.NODE_ENV = previousNodeEnv;
}
});
});
Loading