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
47 changes: 47 additions & 0 deletions packages/ui/src/elements/Toasts/fieldErrors.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import { describe, expect, it } from 'vitest'

import { createErrorsFromMessage } from './fieldErrors.js'

describe('createErrorsFromMessage', () => {
it('should return the full message when there is no colon', () => {
const result = createErrorsFromMessage('Something went wrong')

expect(result).toEqual({ message: 'Something went wrong' })
})

it('should split a single field error after the colon', () => {
const result = createErrorsFromMessage('Validation failed: email')

expect(result).toEqual({ errors: ['email'], message: 'Validation failed: ' })
})

it('should split multiple comma-separated field errors after the colon', () => {
const result = createErrorsFromMessage('The following fields are invalid: email, name')

expect(result).toEqual({
errors: ['email', 'name'],
message: 'The following fields are invalid (2):',
})
})

it('should preserve the full message when it contains multiple colons', () => {
const result = createErrorsFromMessage('With: multiple: colons')

expect(result).toEqual({ errors: ['multiple: colons'], message: 'With: ' })
})

it('should replace " > " with " → " in error paths', () => {
const result = createErrorsFromMessage('Invalid: parent > child')

expect(result).toEqual({ errors: ['parent → child'], message: 'Invalid: ' })
})

it('should group similar errors and count them', () => {
const result = createErrorsFromMessage('Invalid: blocks > 0, blocks > 1, other')

expect(result).toEqual({
errors: ['blocks → 0', 'blocks → 1', 'other'],
message: 'Invalid (3):',
})
})
})
6 changes: 4 additions & 2 deletions packages/ui/src/elements/Toasts/fieldErrors.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,13 @@ function groupSimilarErrors(items: string[]): string[] {
return result
}

function createErrorsFromMessage(message: string): {
export function createErrorsFromMessage(message: string): {
errors?: string[]
message: string
} {
const [intro, errorsString] = message.split(':')
const colonIndex = message.indexOf(':')
const intro = colonIndex >= 0 ? message.slice(0, colonIndex) : message
const errorsString = colonIndex >= 0 ? message.slice(colonIndex + 1) : undefined

if (!errorsString) {
return {
Expand Down
Loading