diff --git a/webapp/locales/de.json b/webapp/locales/de.json
index a5f56ae8d..03a49d831 100644
--- a/webapp/locales/de.json
+++ b/webapp/locales/de.json
@@ -169,7 +169,7 @@
"success": "Eine neue E-Mail Addresse wurde registriert.",
"submitted": "Eine E-Mail zur Bestätigung deiner Adresse wurde an {email} gesendet.",
"change-successful": "Deine E-Mail Adresse wurde erfolgreich geändert.",
- "change-error": {
+ "verification-error": {
"message": "Deine E-Mail Adresse konnte nicht verifiziert werden.",
"support": "Wenn das Problem weiterhin besteht, kontaktiere uns gerne per E-Mail an",
"explanation": "Das kann verschiedene Ursachen haben:",
diff --git a/webapp/locales/en.json b/webapp/locales/en.json
index d6cb53b7f..4e8c01435 100644
--- a/webapp/locales/en.json
+++ b/webapp/locales/en.json
@@ -170,7 +170,7 @@
"success": "A new E-Mail address has been registered.",
"submitted": "An email to verify your address has been sent to {email}.",
"change-successful": "Your E-Mail address has been changed successfully.",
- "change-error": {
+ "verification-error": {
"message": "Your E-Mail could not be changed.",
"explanation": "This can have different causes:",
"reason": {
diff --git a/webapp/pages/settings/my-email-address/index.spec.js b/webapp/pages/settings/my-email-address/index.spec.js
index c0c767e25..8bf1bb986 100644
--- a/webapp/pages/settings/my-email-address/index.spec.js
+++ b/webapp/pages/settings/my-email-address/index.spec.js
@@ -95,6 +95,21 @@ describe('EmailSettingsIndexPage', () => {
})
})
})
+
+ describe('if backend responds with unique constraint violation', () => {
+ beforeEach(() => {
+ mocks.$apollo.mutate = jest.fn().mockRejectedValue({
+ message: 'User account already exists',
+ })
+ wrapper = Wrapper()
+ wrapper.find('#email').setValue('already-taken@example.org')
+ wrapper.find('form').trigger('submit')
+ })
+
+ it('translates error message', () => {
+ expect(wrapper.text()).toContain('registration.signup.form.errors.email-exists')
+ })
+ })
})
})
})
diff --git a/webapp/pages/settings/my-email-address/index.vue b/webapp/pages/settings/my-email-address/index.vue
index a166d5521..3ebd233d3 100644
--- a/webapp/pages/settings/my-email-address/index.vue
+++ b/webapp/pages/settings/my-email-address/index.vue
@@ -11,6 +11,9 @@
+
+ {{ backendErrors.message }}
+
{{ $t('actions.save') }}
@@ -31,6 +34,7 @@ export default {
},
data() {
return {
+ backendErrors: null,
success: false,
}
},
@@ -88,6 +92,14 @@ export default {
})
}, 3000)
} catch (err) {
+ if (err.message.includes('exists')) {
+ // We cannot use form validation errors here, the backend does not
+ // have a query to filter for email addresses. This is a privacy
+ // consideration. We could implement a dedicated query to check that
+ // but I think it's too much effort for this feature.
+ this.backendErrors = { message: this.$t('registration.signup.form.errors.email-exists') }
+ return
+ }
this.$toast.error(err.message)
}
},
diff --git a/webapp/pages/settings/my-email-address/verify.spec.js b/webapp/pages/settings/my-email-address/verify.spec.js
index 9280685d1..d0f098bb0 100644
--- a/webapp/pages/settings/my-email-address/verify.spec.js
+++ b/webapp/pages/settings/my-email-address/verify.spec.js
@@ -149,7 +149,7 @@ describe('EmailVerifyPage', () => {
})
it('shows success message', () => {
- expect(wrapper.text()).toContain('settings.email.change-error')
+ expect(wrapper.text()).toContain('settings.email.verification-error')
})
describe('after timeout', () => {
diff --git a/webapp/pages/settings/my-email-address/verify.vue b/webapp/pages/settings/my-email-address/verify.vue
index f435d4f7d..d173a1cf0 100644
--- a/webapp/pages/settings/my-email-address/verify.vue
+++ b/webapp/pages/settings/my-email-address/verify.vue
@@ -12,26 +12,26 @@
- {{ $t(`settings.email.change-error.message`) }}
+ {{ $t(`settings.email.verification-error.message`) }}
- {{ $t(`settings.email.change-error.explanation`) }}
+ {{ $t(`settings.email.verification-error.explanation`) }}
- {{ $t(`settings.email.change-error.reason.invalid-nonce`) }}
+ {{ $t(`settings.email.verification-error.reason.invalid-nonce`) }}
- {{ $t(`settings.email.change-error.reason.no-email-request`) }}
+ {{ $t(`settings.email.verification-error.reason.no-email-request`) }}
- {{ $t(`settings.email.change-error.reason.email-address-taken`) }}
+ {{ $t(`settings.email.verification-error.reason.email-address-taken`) }}
- {{ $t('settings.email.change-error.support') }}
+ {{ $t('settings.email.verification-error.support') }}
support@human-connection.org