fix: refactors toast error rendering (#13252)

Fixes #13191

- Render a single html element for single error messages
- Preserve ul structure for multiple errors
- Updates tests to check for both cases
This commit is contained in:
Sean Zubrickas
2025-07-28 05:59:25 -07:00
committed by GitHub
parent 2e9ba10fb5
commit d093bb1f00
2 changed files with 27 additions and 18 deletions

View File

@@ -63,11 +63,15 @@ export function FieldErrorsToast({ errorMessage }) {
<div> <div>
{message} {message}
{Array.isArray(errors) && errors.length > 0 ? ( {Array.isArray(errors) && errors.length > 0 ? (
<ul data-testid="field-errors"> errors.length === 1 ? (
{errors.map((error, index) => { <span data-testid="field-error">{errors[0]}</span>
return <li key={index}>{error}</li> ) : (
})} <ul data-testid="field-errors">
</ul> {errors.map((error, index) => {
return <li key={index}>{error}</li>
})}
</ul>
)
) : null} ) : null}
</div> </div>
) )

View File

@@ -11,19 +11,24 @@ export async function assertToastErrors({
errors: string[] errors: string[]
page: Page page: Page
}): Promise<void> { }): Promise<void> {
const message = const isSingleError = errors.length === 1
errors.length === 1 const message = isSingleError
? 'The following field is invalid:' ? 'The following field is invalid:'
: `The following fields are invalid (${errors.length}):` : `The following fields are invalid (${errors.length}):`
await expect(
page.locator('.payload-toast-container li').filter({ hasText: message }), // Check the intro message text
).toBeVisible() await expect(page.locator('.payload-toast-container')).toContainText(message)
for (let i = 0; i < errors.length; i++) {
const error = errors[i] // Check single error
if (error) { if (isSingleError) {
await expect( await expect(page.locator('.payload-toast-container [data-testid="field-error"]')).toHaveText(
page.locator('.payload-toast-container [data-testid="field-errors"] li').nth(i), errors[0]!,
).toHaveText(error) )
} else {
// Check multiple errors
const errorItems = page.locator('.payload-toast-container [data-testid="field-errors"] li')
for (let i = 0; i < errors.length; i++) {
await expect(errorItems.nth(i)).toHaveText(errors[i]!)
} }
} }