61 lines
1.9 KiB
TypeScript
61 lines
1.9 KiB
TypeScript
import { describe, expect, it } from 'vitest'
|
|
import { resolveTaskErrorMessage, resolveTaskErrorSummary } from '@/lib/task/error-message'
|
|
|
|
describe('task error message normalization', () => {
|
|
it('maps TASK_CANCELLED to unified cancelled message', () => {
|
|
const summary = resolveTaskErrorSummary({
|
|
errorCode: 'TASK_CANCELLED',
|
|
errorMessage: 'whatever',
|
|
})
|
|
expect(summary.cancelled).toBe(true)
|
|
expect(summary.code).toBe('CONFLICT')
|
|
expect(summary.message).toBe('Task cancelled by user')
|
|
})
|
|
|
|
it('keeps cancelled semantics from normalized task error details', () => {
|
|
const summary = resolveTaskErrorSummary({
|
|
error: {
|
|
code: 'CONFLICT',
|
|
message: 'Task cancelled by user',
|
|
details: { cancelled: true, originalCode: 'TASK_CANCELLED' },
|
|
},
|
|
})
|
|
expect(summary.cancelled).toBe(true)
|
|
expect(summary.code).toBe('CONFLICT')
|
|
expect(summary.message).toBe('Task cancelled by user')
|
|
})
|
|
|
|
it('extracts nested error message from payload', () => {
|
|
const message = resolveTaskErrorMessage({
|
|
error: {
|
|
details: {
|
|
message: 'provider failed',
|
|
},
|
|
},
|
|
}, 'fallback')
|
|
expect(message).toBe('provider failed')
|
|
})
|
|
|
|
it('supports flat error/details string payload', () => {
|
|
expect(resolveTaskErrorMessage({
|
|
error: 'provider failed',
|
|
}, 'fallback')).toBe('provider failed')
|
|
|
|
expect(resolveTaskErrorMessage({
|
|
details: 'provider failed',
|
|
}, 'fallback')).toBe('provider failed')
|
|
})
|
|
|
|
it('uses fallback when payload has no structured error', () => {
|
|
expect(resolveTaskErrorMessage({}, 'fallback')).toBe('fallback')
|
|
})
|
|
|
|
it('recognizes cancelled semantics from message-only payload', () => {
|
|
const summary = resolveTaskErrorSummary({
|
|
message: 'Task cancelled by user',
|
|
})
|
|
expect(summary.cancelled).toBe(true)
|
|
expect(summary.message).toBe('Task cancelled by user')
|
|
})
|
|
})
|