diff --git a/app/forms/add_user_email_form.rb b/app/forms/add_user_email_form.rb index 893f8aa9200..c0dbe793e62 100644 --- a/app/forms/add_user_email_form.rb +++ b/app/forms/add_user_email_form.rb @@ -43,7 +43,7 @@ def new_email_address(params) attr_reader :success, :email_address def valid_form? - @allow && valid? && !email_taken? + @allow && valid? end def process_successful_submission @@ -54,7 +54,6 @@ def process_successful_submission def extra_analytics_attributes { - email_already_exists: email_taken?, user_id: existing_user.uuid, domain_name: email&.split('@')&.last, }.merge(@recaptcha_h) diff --git a/app/validators/form_add_email_validator.rb b/app/validators/form_add_email_validator.rb index 256d380a2d0..57021c76b2d 100644 --- a/app/validators/form_add_email_validator.rb +++ b/app/validators/form_add_email_validator.rb @@ -27,6 +27,7 @@ def downcase_and_strip def email_is_available_to_user email_address = EmailAddress.find_with_email(email) - @email_taken = true if email_address&.user_id == @user.id + return unless email_address&.user_id == @user.id + errors.add(:email, I18n.t('email_addresses.add.duplicate')) end end diff --git a/config/locales/email_addresses/en.yml b/config/locales/email_addresses/en.yml index 41d5dfea1a2..2289bf5641f 100644 --- a/config/locales/email_addresses/en.yml +++ b/config/locales/email_addresses/en.yml @@ -1,6 +1,8 @@ --- en: email_addresses: + add: + duplicate: This email address is already registered to your account. delete: confirm: Are you sure you want to delete %{email}? failure: Unable to delete this email address. diff --git a/config/locales/email_addresses/es.yml b/config/locales/email_addresses/es.yml index bc06e0c1079..edae56206e7 100644 --- a/config/locales/email_addresses/es.yml +++ b/config/locales/email_addresses/es.yml @@ -1,6 +1,8 @@ --- es: email_addresses: + add: + duplicate: Esta dirección de correo electrónico ya está registrada en su cuenta. delete: confirm: "¿Estas seguro que quieres borrarlo %{email}?" failure: No se puede eliminar esta dirección de correo electrónico. diff --git a/config/locales/email_addresses/fr.yml b/config/locales/email_addresses/fr.yml index 2a4afb207be..76722b4cf65 100644 --- a/config/locales/email_addresses/fr.yml +++ b/config/locales/email_addresses/fr.yml @@ -1,6 +1,8 @@ --- fr: email_addresses: + add: + duplicate: Cette adresse e-mail est déjà enregistrée sur votre compte. delete: confirm: Etes-vous sûr que vous voulez supprimer %{email}? failure: Impossible de supprimer cette adresse email. diff --git a/spec/features/multiple_emails/add_email_spec.rb b/spec/features/multiple_emails/add_email_spec.rb index eb2fb971241..0f653219535 100644 --- a/spec/features/multiple_emails/add_email_spec.rb +++ b/spec/features/multiple_emails/add_email_spec.rb @@ -133,6 +133,21 @@ expect(page).to have_current_path(add_email_path) end + it 'stays on form and gives an error message when adding an email already on the account' do + user = create(:user, :signed_up) + sign_in_and_2fa_user(user) + visit account_path + click_link t('account.index.email_add') + + expect(page).to have_current_path(add_email_path) + + fill_in 'Email', with: user.email_addresses.first.email + click_button t('forms.buttons.submit.default') + + expect(page).to have_current_path(add_email_path) + expect(page).to have_content(I18n.t('email_addresses.add.duplicate')) + end + it 'does not show verify screen without an email in session from add email' do user = create(:user, :signed_up) sign_in_and_2fa_user(user)