Error copy updates for Newsletter settings (#20559)

Fixes
https://linear.app/tryghost/issue/DES-550/mechanical-error-message-in-newsletter-detail-modal

Errors in the newsletter detail modal sounded mechanical and were
inconsistent with other error messages. That is now fixed, and they
sound more human.
This commit is contained in:
Daniël van der Winden 2024-07-08 17:33:26 +02:00 committed by GitHub
parent dfb0f93c06
commit 0aef3d3bee
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 11 additions and 11 deletions

View File

@ -39,7 +39,7 @@ const AddNewsletterModal: React.FC<RoutingModalProps> = () => {
const newErrors: Record<string, string> = {}; const newErrors: Record<string, string> = {};
if (!formState.name) { if (!formState.name) {
newErrors.name = 'Name is required'; newErrors.name = 'A name is required for your newsletter';
} }
return newErrors; return newErrors;

View File

@ -546,17 +546,17 @@ const NewsletterDetailModalContent: React.FC<{newsletter: Newsletter; onlyOne: b
const newErrors: Record<string, string> = {}; const newErrors: Record<string, string> = {};
if (!formState.name) { if (!formState.name) {
newErrors.name = 'Name is required'; newErrors.name = 'A name is required for your newsletter';
} }
if (formState.sender_email && !validator.isEmail(formState.sender_email)) { if (formState.sender_email && !validator.isEmail(formState.sender_email)) {
newErrors.sender_email = 'Invalid email'; newErrors.sender_email = 'Enter a valid email address';
} else if (formState.sender_email && hasSendingDomain(config) && formState.sender_email.split('@')[1] !== sendingDomain(config)) { } else if (formState.sender_email && hasSendingDomain(config) && formState.sender_email.split('@')[1] !== sendingDomain(config)) {
newErrors.sender_email = `Email must end with @${sendingDomain(config)}`; newErrors.sender_email = `Email address must end with @${sendingDomain(config)}`;
} }
if (formState.sender_reply_to && !validator.isEmail(formState.sender_reply_to) && !['newsletter', 'support'].includes(formState.sender_reply_to)) { if (formState.sender_reply_to && !validator.isEmail(formState.sender_reply_to) && !['newsletter', 'support'].includes(formState.sender_reply_to)) {
newErrors.sender_reply_to = 'Invalid email'; newErrors.sender_reply_to = 'Enter a valid email address';
} }
return newErrors; return newErrors;

View File

@ -27,7 +27,7 @@ test.describe('Newsletter settings', async () => {
const modal = page.getByTestId('add-newsletter-modal'); const modal = page.getByTestId('add-newsletter-modal');
await modal.getByRole('button', {name: 'Create'}).click(); await modal.getByRole('button', {name: 'Create'}).click();
await expect(modal).toHaveText(/Name is required/); await expect(modal).toHaveText(/A name is required for your newsletter/);
// Shouldn't be necessary, but without these Playwright doesn't click Create the second time for some reason // Shouldn't be necessary, but without these Playwright doesn't click Create the second time for some reason
await modal.getByRole('button', {name: 'Cancel'}).click(); await modal.getByRole('button', {name: 'Cancel'}).click();
@ -69,7 +69,7 @@ test.describe('Newsletter settings', async () => {
await modal.getByPlaceholder('Weekly Roundup').fill(''); await modal.getByPlaceholder('Weekly Roundup').fill('');
await modal.getByRole('button', {name: 'Save'}).click(); await modal.getByRole('button', {name: 'Save'}).click();
await expect(modal).toHaveText(/Name is required/); await expect(modal).toHaveText(/A name is required for your newsletter/);
await modal.getByPlaceholder('Weekly Roundup').fill('Updated newsletter'); await modal.getByPlaceholder('Weekly Roundup').fill('Updated newsletter');
@ -114,7 +114,7 @@ test.describe('Newsletter settings', async () => {
await modal.getByLabel('Sender email').fill('not-an-email'); await modal.getByLabel('Sender email').fill('not-an-email');
await modal.getByRole('button', {name: 'Save'}).click(); await modal.getByRole('button', {name: 'Save'}).click();
await expect(modal).toHaveText(/Invalid email/); await expect(modal).toHaveText(/Enter a valid email address/);
await modal.getByLabel('Sender email').fill('test@test.com'); await modal.getByLabel('Sender email').fill('test@test.com');
await modal.getByRole('button', {name: 'Save'}).click(); await modal.getByRole('button', {name: 'Save'}).click();
@ -191,7 +191,7 @@ test.describe('Newsletter settings', async () => {
await replyToEmail.fill('not-an-email'); await replyToEmail.fill('not-an-email');
await modal.getByRole('button', {name: 'Save'}).click(); await modal.getByRole('button', {name: 'Save'}).click();
await expect(modal).toHaveText(/Invalid email/); await expect(modal).toHaveText(/Enter a valid email address/);
await replyToEmail.fill('test@test.com'); await replyToEmail.fill('test@test.com');
await modal.getByRole('button', {name: 'Save'}).click(); await modal.getByRole('button', {name: 'Save'}).click();
@ -237,12 +237,12 @@ test.describe('Newsletter settings', async () => {
// Error case #1: add invalid email address // Error case #1: add invalid email address
await senderEmail.fill('Harry Potter'); await senderEmail.fill('Harry Potter');
await modal.getByRole('button', {name: 'Save'}).click(); await modal.getByRole('button', {name: 'Save'}).click();
await expect(modal).toHaveText(/Invalid email/); await expect(modal).toHaveText(/Enter a valid email address/);
// Error case #2: the sender email address doesn't match the custom sending domain // Error case #2: the sender email address doesn't match the custom sending domain
await senderEmail.fill('harry@potter.com'); await senderEmail.fill('harry@potter.com');
await modal.getByRole('button', {name: 'Save'}).click(); await modal.getByRole('button', {name: 'Save'}).click();
await expect(modal).toHaveText(/Email must end with @customdomain.com/); await expect(modal).toHaveText(/Email address must end with @customdomain.com/);
// But can have any address on the same domain, without verification // But can have any address on the same domain, without verification
await senderEmail.fill('harry@customdomain.com'); await senderEmail.fill('harry@customdomain.com');